Xcode上传App Store失败:Cordova项目引用非公开Selector求助
解决App Store上传时非公开选择器
setResult:/taskWithResult报错问题 问题分析
从你的grep结果可以明确,这个上传报错的根源是cordova-plugin-facebook插件依赖的Bolts.framework和FBSDKCoreKit.framework中,包含了苹果检测工具判定为"非公开选择器"的setResult:和taskWithResult方法。你已经配置的Facebook相关plist项和这个私有API检测问题无关,下面给你几个可行的解决方案:
解决方案
1. 升级Facebook插件到维护中的兼容版本
旧版cordova-plugin-facebook已经停止维护,其依赖的FBSDK版本存在私有API检测漏洞。官方推荐使用cordova-plugin-facebook4(适配了最新FBSDK,修复了这类检测问题),操作步骤如下:
# 先卸载旧插件 cordova plugin remove cordova-plugin-facebook # 安装最新兼容版,替换为你的实际AppID和AppName cordova plugin add cordova-plugin-facebook4 --save --variable APP_ID="你的FacebookAppID" --variable APP_NAME="你的FacebookDisplayName"
这是最稳妥的方案,既能彻底解决私有API问题,也能避免后续其他SDK兼容隐患。
2. 临时应急:修改Bolts框架头文件(不推荐长期使用)
如果你暂时无法升级插件,可以尝试注释掉头文件中的相关方法声明(苹果检测工具会扫描头文件中的选择器):
- 找到插件目录下的
BFTaskCompletionSource.h路径,比如plugins/cordova-plugin-facebook/src/ios/Bolts.framework/Headers/BFTaskCompletionSource.h - 注释掉以下两行代码:
// - (void)setResult:(id)result; // - (BOOL)trySetResult:(id)result;
⚠️ 注意:这个方法可能导致Facebook插件的异步任务功能异常,仅作为临时测试使用,长期建议还是升级插件。
3. 优化Xcode构建配置,移除多余符号
在Xcode项目的Build Settings中调整以下选项,减少苹果检测到的符号数量:
- 将
Strip Debug Symbols During Copy设置为YES - 将
Strip Linked Product设置为YES - 确保
Deployment Postprocessing也设置为YES
如果是Jenkins构建,要确认构建脚本中没有覆盖这些配置。
4. 完善Facebook相关plist配置(避免额外问题)
除了你已有的配置,建议添加LSApplicationQueriesSchemes数组,确保Facebook SDK能正常工作:
<key>LSApplicationQueriesSchemes</key> <array> <string>fbapi</string> <string>fb-messenger-share-api</string> <string>fbauth2</string> <string>fbshareextension</string> </array>
额外提示
你使用的Xcode 9版本较旧,建议尽量升级到支持你当前Cordova版本的较新Xcode(比如Xcode 11+),避免因工具链版本过低导致的其他兼容问题。
内容的提问来源于stack exchange,提问作者Ashish Karpe
相关产品推荐
相关产品推荐

