Kids类React Native应用被Apple拒审:如何移除AppTrackingTransparency.framework
Kids分类应用移除内置AppTrackingTransparency框架的实操方案
只搜源码里的AppTrackingTransparency字符串找不到关联是非常常见的情况:这类系统框架通常是被第三方SDK写在podspec的链接配置里静态编译进二进制的,不会在JS层或者OC源码里留直接的引用文本,自然检索不到。
快速定位问题依赖
在iOS项目根目录下执行如下命令,直接扫描所有已安装Pod的配置文件,找出所有声明了ATT框架依赖的条目:
grep -r "AppTrackingTransparency" ./Pods --include="*.podspec" --include="*.json" --include="*.xcconfig"
结合你提供的依赖列表,高风险内置来源基本可以锁定两个:
react-native-onesignal@^4.0.3:OneSignal 4.x版本SDK默认会链接AppTrackingTransparency和AdServices框架用于广告归因,哪怕你没有主动写过任何ATT权限申请代码,只要框架被链接进二进制,苹果审核的静态扫描就会判定你实现了ATT。@react-native-firebase/analytics@10.5.1:Firebase Analytics 8.x以上版本会默认依赖AdSupport框架,部分版本会连带触发ATT的链接检测规则。
直接在Podfile层面移除框架链接,无需降级SDK
找到问题来源后不需要卸载对应功能,直接在Podfile的现有post_install块里添加配置,强制摘掉所有SDK内置的ATT链接即可:
platform :ios, '10.0' target 'Einee' do # 原有项目配置全部保留... post_install do |installer| # 原有的Flipper配置保留 flipper_post_install(installer) # 新增:遍历所有Pod目标,移除对ATT框架的链接 installer.pods_project.targets.each do |target| target.build_configurations.each do |config| # 从链接标记列表里删除ATT框架 other_ldflags = config.build_settings['OTHER_LDFLAGS'] ||= ['$(inherited)'] other_ldflags.delete('-framework "AppTrackingTransparency"') # 清理路径配置里残留的ATT框架搜索路径 search_paths = config.build_settings['FRAMEWORK_SEARCH_PATHS'].to_s config.build_settings['FRAMEWORK_SEARCH_PATHS'] = search_paths.gsub('AppTrackingTransparency.framework', '').strip end end # 新增:针对OneSignal SDK,完全禁用内置的ATT相关代码编译 onesignal_target = installer.pods_project.targets.find { |t| t.name == 'OneSignal' } if onesignal_target onesignal_target.build_configurations.each do |config| config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)'] config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'ONESIGNAL_DISABLE_ATT=1' end end end end
配套的OneSignal Extension配置说明
你现在给OneSignalNotificationServiceExtension目标配置的3.x版本OneSignal pod本身不包含ATT链接,不需要额外修改,只要处理主工程的OneSignal pod即可。
最终验证步骤
修改完Podfile后重新执行pod install完成依赖更新,编译Release包后,用如下命令扫描最终二进制,确认没有ATT残留:
# 替换为你实际编译产物的路径 otool -v -o ./build/Release-iphoneos/Einee.app/Einee | grep -i "AppTrackingTransparency"
命令执行后没有任何输出,就说明二进制里已经完全没有ATT的引用,不会再触发苹果审核的Kids分类规则检测。
注意事项
- 检查项目Info.plist,确保没有添加
NSUserTrackingUsageDescription字段,哪怕代码里没有相关调用,这个字段的存在也会被判定为实现了ATT。 - 如果Firebase Analytics还是被检测到关联,同样可以通过上面的OTHER_LDFLAGS移除配置,把Firebase pod链接的
AdSupport、AppTrackingTransparency条目从链接列表里删掉,不会影响基础的事件上报功能,只是关闭了广告归因的相关能力。
内容的提问来源于stack exchange,提问作者Ilya Karnaukhov
相关产品推荐
相关产品推荐

