导语:2024年5月起,苹果强制要求所有应用配置隐私清单(Privacy Manifest)。本文手把手教你为老项目适配隐私清单,并详解AFNetworking、SDWebImage等常用库的处理方案,避免审核被拒!
一、为什么必须配置隐私清单?
- 政策要求:2024年5月1日后,未声明隐私清单的应用将无法通过App Store审核。
- 用户信任:明确数据收集行为(如位置、设备ID),提升用户对隐私保护的感知。
- 规避风险:未声明敏感API(如剪切板、文件路径)的使用可能导致下架。
二、隐私清单配置全流程(含代码示例)
步骤1:创建主工程隐私清单文件
-
在Xcode中添加文件:
File → New → File → iOS → Resource → Privacy Manifest File,命名为PrivacyInfo.xcprivacy。 -
声明数据收集类型(示例):
<key>NSPrivacyCollectedDataTypes</key> <array> <dict> <key>NSPrivacyCollectedDataType</key> <string>User ID</string> <key>NSPrivacyCollectedDataTypeLinkedToUser</key> <true/> <key>NSPrivacyCollectedDataTypeTracking</key> <false/> <key>NSPrivacyCollectedDataTypePurposes</key> <array> <string>Analytics</string> </array> </dict> </array> -
声明敏感API使用(以文件时间戳为例):
<key>NSPrivacyAccessedAPITypes</key> <array> <dict> <key>NSPrivacyAccessedAPIType</key> <string>NSPrivacyAccessedAPICategoryFileTimestamp</string> <key>NSPrivacyAccessedAPITypeReasons</key> <array> <string>DDA9.1</string> <!-- 原因代码 --> </array> </dict> </array>
三、常用第三方库的适配方案
1. AFNetworking(已停止维护)
-
问题:旧版本无隐私清单,需手动适配。
-
解决方案:
-
手动添加文件:在AFNetworking目录中创建
PrivacyInfo.xcprivacy,声明其可能访问的API(如网络状态):<key>NSPrivacyAccessedAPITypes</key> <array> <dict> <key>NSPrivacyAccessedAPIType</key> <string>NSPrivacyAccessedAPICategoryNetwork</string> <key>NSPrivacyAccessedAPITypeReasons</key> <array> <string>8FFB.1</string> <!-- 网络请求功能实现 --> </array> </dict> </array> -
替代方案:迁移至Alamofire(内置隐私清单)。
-
2. SDWebImage(已适配)
- 推荐操作:升级至最新版本(≥5.18.0),无需额外配置。
3. Alamofire(官方推荐)
- 优势:原生支持隐私清单,无需手动处理。
四、常见错误与排查工具
-
审核被拒:
-
错误原因:未声明第三方库的数据收集(如广告SDK的IDFA)。
-
排查工具:
# 扫描二进制文件中的隐私API调用 nm YourApp.app/YourApp | grep -i 'CAAnimation|NSFileCreationDate'
-
-
编译冲突:
-
解决方案:在Podfile中排除重复的隐私清单文件:
post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| # 移除第三方库的隐私清单编译 config.build_settings['CODE_SIGN_ENTITLEMENTS'] = '' end end end
-
结语:隐私清单配置已成为iOS开发者的必修课。本文提供的代码模板和第三方库适配方案,可帮助开发者快速满足苹果审核要求。立即行动,为你的应用添加隐私保护合规护盾!
相关资源: