使用Titanium SDK开发的App遭Apple提示缺失API声明,如何解决?
问题描述
尽管App Store审核已通过,但你可能需要在下次提交审核时修正以下问题。修正完成后,请上传新的二进制文件至App Store Connect。
ITMS-91053: Missing API declaration - 你的App中"APP_NAME"文件的代码引用了一个或多个需要说明使用理由的API,涉及以下API类别:NSPrivacyAccessedAPICategorySystemBootTime。目前无需采取行动,但从2024年5月1日起,上传新App或更新版本时,必须在App的隐私清单中包含NSPrivacyAccessedAPITypes数组,说明这些API的获批使用理由。
ITMS-91053: Missing API declaration - 你的App中"APP_NAME"文件的代码引用了一个或多个需要说明使用理由的API,涉及以下API类别:NSPrivacyAccessedAPICategoryUserDefaults。目前无需采取行动,但从2024年5月1日起,上传新App或更新版本时,必须在App的隐私清单中包含NSPrivacyAccessedAPITypes数组,说明这些API的获批使用理由。
我使用Titanium SDK开发和构建App,网上找到的解决方案都是基于Xcode生成隐私清单,不清楚在Titanium里该怎么操作。
解决方案
针对Titanium项目,你可以手动创建隐私清单文件并配置到项目中,步骤如下:
创建
PrivacyInfo.xcprivacy文件
在项目的app/platform/ios目录下(如果没有该目录,手动创建)新建一个名为PrivacyInfo.xcprivacy的XML文件,内容示例如下:<?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> <!-- 处理NSPrivacyAccessedAPICategorySystemBootTime --> <dict> <key>NSPrivacyAccessedAPIType</key> <string>NSPrivacyAccessedAPICategorySystemBootTime</string> <key>NSPrivacyAccessedAPITypeReasons</key> <array> <!-- 根据你的实际使用场景选择对应的理由代码,例如测量性能选E174.1 --> <string>E174.1</string> </array> </dict> <!-- 处理NSPrivacyAccessedAPICategoryUserDefaults --> <dict> <key>NSPrivacyAccessedAPIType</key> <string>NSPrivacyAccessedAPICategoryUserDefaults</string> <key>NSPrivacyAccessedAPITypeReasons</key> <array> <!-- 根据实际使用场景选择,例如存储用户偏好选CA92.1 --> <string>CA92.1</string> </array> </dict> </array> </dict> </plist>注意:理由代码必须和App实际使用API的场景匹配,要选择符合自身业务的对应代码。
配置Titanium项目打包文件
打开项目的tiapp.xml文件,添加以下配置,确保PrivacyInfo.xcprivacy被正确打包到iOS应用的主Bundle中:<ios> <plist> <!-- 保留原有plist配置 --> </plist> <resources> <resource>platform/ios/PrivacyInfo.xcprivacy</resource> </resources> </ios>验证并重新构建
清理Titanium项目的构建缓存,然后重新构建iOS版本。构建完成后,可查看生成的App包内容,确认PrivacyInfo.xcprivacy是否存在于主Bundle目录下。
注意事项
- 理由代码必须与实际使用场景一致,否则后续提交审核可能被拒绝。
- 2024年5月1日起,新提交或更新的App必须包含正确的隐私清单,否则无法通过审核。
内容的提问来源于stack exchange,提问作者user3188777

