You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

旧版Firebase与Angular适配Apple隐私清单要求的问题求助

解决方案建议

一、方案选择优先级

针对你deadline紧张的情况,优先选择手动创建隐私清单的临时方案,理由如下:

  • 升级Angular 12→16、AngularFire 6→16、Firebase 8→10涉及大量破坏性变更:Angular从12到16移除了大量旧API(如ViewChild的旧语法、HttpClient的部分配置),AngularFire也重构了不少模块的使用方式,重新测试整个应用的成本极高,完全赶不上当前的上架截止时间。
  • 可以复用Firebase 10.22.0的隐私清单内容,但需要针对性裁剪:只保留你当前使用的Firebase模块(Messaging、DynamicLinks、Core等)对应的声明,不需要的模块(如Analytics、Storage)的声明可以剔除,同时补充Capacitor、Cordova等其他SDK的隐私声明。

二、手动创建隐私清单后报错(ITMS-91061)的解决步骤

你遇到的问题大概率是清单格式错误、目标未正确关联,或者遗漏了部分SDK的API声明,按以下步骤排查:

1. 验证文件关联与格式

  • 打开Xcode,选中PrivacyInfo.xcprivacy文件,检查右侧Target Membership是否勾选了主应用目标(不要只勾选extension或其他子target)。
  • 核对XML结构是否严格符合Apple要求:确保每个NSPrivacyAccessedAPITypes条目包含正确的NSPrivacyAccessedAPIType(API类型)和NSPrivacyAccessedAPITypeReasons(理由代码),没有语法错误(比如标签未闭合、键名拼写错误)。

2. 补充所有SDK的隐私声明

App Store列出的所有SDK都需要覆盖对应的隐私API,以下是针对你用到的SDK的核心声明示例(可直接复用,根据实际功能调整理由代码):

<?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>NSPrivacyAccessedAPITypes</key>
    <array>
        <!-- Capacitor/Cordova 基础功能 -->
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPITypeFileTimestamp</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>C617.1</string>
            </array>
        </dict>
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPITypeUserDefaults</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>CA92.1</string>
            </array>
        </dict>
        <!-- Firebase Core/Installations -->
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPITypeDeviceIdentifier</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>35F9.1</string>
            </array>
        </dict>
        <!-- Firebase Messaging -->
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPITypePushNotifications</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>EA4.1</string>
            </array>
        </dict>
        <!-- Firebase Dynamic Links -->
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPITypeFileTimestamp</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>C617.1</string>
            </array>
        </dict>
        <!-- GoogleDataTransport/GoogleUtilities/FBLPromises -->
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPITypeUserDefaults</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>CA92.1</string>
            </array>
        </dict>
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPITypeFileTimestamp</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>C617.1</string>
            </array>
        </dict>
    </array>
</dict>
</plist>

3. 清理缓存并重新归档

  • 执行Cmd+Shift+K清理构建文件夹,再执行Cmd+Option+Shift+K清理派生数据,避免旧缓存干扰。
  • 重新归档应用,导出后检查AppName.app目录下是否存在PrivacyInfo.xcprivacy,且内容与你编写的一致。

4. 核对理由代码的准确性

确保每个API对应的理由代码符合Apple的官方规范:比如C617.1对应“文件时间戳用于应用功能”,CA92.1对应“用户默认设置用于存储应用状态”,不要随意填写错误代码。

三、后续长期方案

上架成功后,建议分阶段升级依赖:

  1. 先升级Angular到14(过渡版本,破坏性变更较少),适配后再升级到16。
  2. 同步升级AngularFire到对应版本,最后升级Firebase到最新稳定版,逐步替换旧API,降低测试成本。

内容的提问来源于stack exchange,提问作者MadMac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 09:11:02