App Store Connect审核新规:第三方SDK的隐私清单文件
App Store Connect审核新规:第三方SDK的隐私清单文件

App Store Connect审核新规:第三方SDK的隐私清单文件

苹果2025年的新审核规则:苹果现在要求常见的第三方 SDK(比如 AFNetworking、MBProgressHUD、SDWebImage 这种老牌库)必须提供一个 Privacy Manifest(隐私清单文件),否则会报 ITMS-91061 错误。

TMS-91061: Missing privacy manifest- Your app includes “Frameworks/AFNetworking.framework/AFNetworking”, which includes AFNetworking, an SDK that was identified in the documentation as a commonly used third-party SDK. If a new app includes a commonly used third-party SDK, or an app update adds a new commonly used third-party SDK, the SDK must include a privacy manifest file. Please contact the provider of the SDK that includes this file to get an updated SDK version with a privacy manifest. For more details about this policy, including a list of SDKs that are required to include signatures and manifests, visit: https://developer.apple.com/support/third-party-SDK-requirements.

SDK需要隐私清单文件

有些SDK在最新版本中新增了隐私清单,需要升级最新的SDK。

有些SDK官方停更,没有隐私清单,需要手动添加。

创建隐私清单文件

方案1: Xcode内创建隐私清单文件

在Xcode中在合适的位置,右击选择“New File from Template…”。

找到“App Privacy”类型,点击“Next”开始创建隐私清单文件。

隐私清单文件名称为:PrivacyInfo.xcprivacy

创建完成后,显示App Privacy隐私图标的文件。

点击PrivacyInfo.xcprivacy文件,点击App Privacy Configuration右侧的加号。

新增所有枚举选项。

方案2: 手动创建隐私清单文件

在Xcode项目文件夹中中新建一个PrivacyInfo.xcprivacy文件:

路径随意,比如YourApp/PrivacyInfo.xcprivacy。

推荐使用终端运行touch命令,创建该文件:

touch /Users/fangjunyu.com/Documents/Apple开发/iOS应用-存钱猪猪/存钱猪猪/piglet/PrivacyInfo.xcprivacy

创建完成,在访达中找到该文件,右击“打开方式”-“文本编辑”,文件内容(最小化,不收集任何数据):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" 
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>NSPrivacyTracking</key>
    <false/>
    <key>NSPrivacyTrackingDomains</key>
    <array/>
    <key>NSPrivacyCollectedDataTypes</key>
    <array/>
    <key>NSPrivacyAccessedAPITypes</key>
    <array/>
</dict>
</plist>

这个文件意思是:不进行跨 app 跟踪 (NSPrivacyTracking = false),没有收集数据类型,没有访问敏感 API。

将该文件拖进Xcode项目中,选择“Reference files in place”选项。

这样打包Xcode项目时,就会将PrivacyInfo.xcprivacy文件打包进去,从而绕过苹果的隐私清单文件审核。

隐私清单文件要求

1、SDK的隐私清单文件

苹果规则:每一个Framework(SDK)目录下都要有自己的PrivacyInfo.xcprivacy 文件。

因为审核的时候,苹果是逐个检查二进制包里 Frameworks/xxx.framework/ 下有没有清单。

只是 App 自己的代码,没有第三方 Framework,可以在 App 工程里放一个清单文件,统一声明。

如果引入了 AFNetworking.framework、MBProgressHUD.framework、SDWebImage.framework 这样的独立 framework,苹果会要求每个 framework 目录里都要有清单文件。

例如:

SDWebImage,新版本自带隐私清单,升级即可,不用手动创建。

AFNetworking & MBProgressHUD,已停更,没有清单,必须手动创建。

因此,在多个Framework(SDK)场景下,必须为每个Framework 创建一个隐私清单文件,不能只用一个隐私清单文件统一声明。

2、隐私清单文件字段

创建隐私清单文件,如果没有特殊要求,建议使用方案2。

因为方案1生成的隐私清单,会增加很多键,内容存在“空值”或者“空字符串”。

苹果在审核时不会要求填写大量字段,它只关心:

1、有没有这个文件;

2、文件里的字段是否有效、合理。

如果填了一个 NSPrivacyCollectedDataTypes,但里面 NSPrivacyCollectedDataType 是空字符串,严格来说这是无效值,可能会被苹果质疑。

最安全、最简洁的做法:如果 SDK 根本不收集数据、不访问隐私 API,直接声明空数组,不需要写一个带空值的 dict。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>NSPrivacyTracking</key>
    <false/>
    <key>NSPrivacyTrackingDomains</key>
    <array/>
    <key>NSPrivacyCollectedDataTypes</key>
    <array/>
    <key>NSPrivacyAccessedAPITypes</key>
    <array/>
</dict>
</plist>

3、隐私清单文件字段解析

这个文件本质上是一个 plist,字段意思如下:

NSPrivacyTracking:布尔值,表示 SDK 是否用于「跨应用跟踪用户」。比如广告 SDK 要设为 true。一般普通库(SDWebImage、AFNetworking)都设为 false。

<key>NSPrivacyTracking</key>
<false/>

NSPrivacyTrackingDomains:如果 NSPrivacyTracking 是 true,就要列出所有跟踪相关的域名。否则就是空数组。

<key>NSPrivacyTrackingDomains</key>
<array/>

NSPrivacyCollectedDataTypes:列出 SDK 收集了哪些用户数据。比如「位置信息」「联系人」「广告 ID」。如果没有收集,就设为空数组。

<key>NSPrivacyCollectedDataTypes</key>
<array>
    <dict>
        <key>NSPrivacyCollectedDataType</key>
        <string></string>
        <key>NSPrivacyCollectedDataTypeLinked</key>
        <false/>
        <key>NSPrivacyCollectedDataTypeTracking</key>
        <false/>
        <key>NSPrivacyCollectedDataTypePurposes</key>
        <array>
            <string></string>
        </array>
    </dict>
</array>

NSPrivacyAccessedAPITypes:列出 SDK 访问了哪些可能影响隐私的 API(例如文件系统、剪贴板、相册)。如果 SDK 只是做 UI/网络请求,就不用写,设为空数组。

<key>NSPrivacyAccessedAPITypes</key>
<array>
    <dict/>
</array>

如果存在一些隐私权限或者收集用户隐私数据字段,可以在Xcode中选择字段。

也可以参考隐私清单文件的示例文件,进行字段的填写:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>NSPrivacyTracking</key>
    <true />
    <key>NSPrivacyTrackingDomains</key>
    <array>
      <string>example.com</string>
    </array>
    <key>NSPrivacyCollectedDataTypes</key>
    <array>
      <dict>
        <key>NSPrivacyCollectedDataType</key>
        <string>NSPrivacyCollectedDataTypeName</string>
        <key>NSPrivacyCollectedDataTypeLinked</key>
        <true />
        <key>NSPrivacyCollectedDataTypeTracking</key>
        <false />
        <key>NSPrivacyCollectedDataTypePurposes</key>
        <array>
          <string>NSPrivacyCollectedDataTypePurposeProductPersonalization</string>
        </array>
      </dict>
    </array>
    <key>NSPrivacyAccessedAPITypes</key>
    <array>
      <dict>
        <key>NSPrivacyAccessedAPIType</key>
        <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
        <key>NSPrivacyAccessedAPITypeReasons</key>
        <array>
          <string>CA92.1</string>
        </array>
      </dict>
    </array>
  </dict>
</plist>

总结

PrivacyInfo.xcprivacy是 2023 WWDC 引入的新东西,从 2024 年 11 月 12 日 开始强制执行。它是「隐私清单」,主要针对第三方 SDK,苹果要统一管理「SDK 收集了哪些数据、访问了哪些 API」。

苹果现在要求第三方SDK必须带有PrivacyInfo.xcprivacy 文件(隐私清单),否则在提交 App 时会报 ITMS-91061。

很多老的 SDK(比如 Firebase 在 Xamarin 绑定里的库、AFNetworking、MBProgressHUD 这种)都没有附带这个文件,因为它们要么已经停更,要么旧版本里没包含,就需要手动创建PrivacyInfo.xcprivacy文件。

新的SDK可能在最新版本中新增PrivacyInfo.xcprivacy文件,需要升级SDK以获取PrivacyInfo.xcprivacy文件。

参考资料

1、How to Make Your Flutter Package Privacy Manifest Compatible:https://www.freecodecamp.org/news/how-to-make-your-flutter-package-privacy-manifest-compatible/

2、What the iOS Privacy Manifest Means for Developers:https://www.freecodecamp.org/news/what-the-ios-privacy-manifest-means-for-developers/

3、Enforcement of Apple Privacy Manifest starting from May 1, 2024:https://bitrise.io/blog/post/enforcement-of-apple-privacy-manifest-starting-from-may-1-2024

4、参考PrivacyInfo.xcprivacy文件:https://drive.google.com/file/d/1LRrX0bwRO2_DXisG-xwJPUVaJbmBRKhj/view?pli=1

5、Privacy manifest files(Apple文档):https://developer.apple.com/documentation/bundleresources/privacy-manifest-files

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注