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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:09:16