iOS 应用 - 非公共 API 使用 - 应用引用非公共选择器:cancelButtonClicked、setResult:

Posted

技术标签:

【中文标题】iOS 应用 - 非公共 API 使用 - 应用引用非公共选择器:cancelButtonClicked、setResult:【英文标题】:iOS app - Non-Public API usage- app references non-public selectors: cancelButtonClicked, setResult: 【发布时间】:2015-11-18 08:57:40 【问题描述】:

在我将应用程序上传到 iTunes 后,我收到邮件说我的应用程序使用非公共 api 方法 - cancelButtonClickedsetResult:

但是cancelButtonClicked被用作各种按钮和searchBar的IBAction方法。我需要重命名它吗?另外,这很常见,请建议..

对于 setResult: 方法我也没有在任何地方使用过这个方法,我也没有在我的完整工作区中找到这个方法。

我使用了多个第三方 API,其中一些如下:

AFNetworking 谷歌地图 SDK Google Places SDK 谷歌分析 RSK 图像裁剪器 Facebook SDK 推特 SDK ASIHTTP MBProgressHud 可达性 SDWebImageCache

请建议我能做什么。

另外,我正在使用 Xcode 6.3.2 和部署目标 ios 8.0。在一些 SO 的答案中,建议使用 Xcode 6.0.1,但我不能使用它,因为 Google Maps SDK POD 建议使用 Xcode6.3 或更高版本。

任何帮助表示赞赏。

【问题讨论】:

你有没有想过这个问题? cancelButtonClicked 是如何进行私有 api 调用的? 我在一个名为 cancelButtonClicked 的协议中定义了一种方法。这导致苹果出现问题。一旦我重命名它,问题就解决了。 @AvtarGuleria 那么 setResult: 你也用过吗?你也重命名了 setResult 吗? 【参考方案1】:

您应该在项目目录中搜索您提到的方法调用。这是在整个项目中搜索的命令行脚本。这将返回调用这些方法的位置,然后您应该修改方法的名称或更新包含调用的库/框架。

grep -Rnis 'cancelButtonClicked' *
grep -Rnis 'setResult:' *

【讨论】:

我在多个视图控制器中使用了 cancelButtonClicked 方法作为 IBAction。我认为为同名的取消按钮创建 IBAction 是很明显的,所以不应该是这样 @TekayaMarouene 感谢您的 grep 命令推荐,我发现了有问题的框架。在尝试使用“otool”和“strings”命令失败后,“grep -R”给了我解决方案!很好的答案! PhysicianPortal_ios_build_new jenkins$ grep -Rnis 'etResult:' * 二进制文件 build/Physician Portal.xcarchive/Products/Applications/Physician Portal.app/Physician Portal 匹配二进制文件 node_modules/cordova-plugin-facebook/ src/ios/Bolts.framework/Bolts 匹配 node_modules/cordova-plugin-facebook/src/ios/Bolts.framework/Headers/BFTaskCompletionSource.h:37:- (void)setResult:(id)result; node_modules/cordova-plugin-facebook/src/ios/Bolts.framework/Headers/BFTaskCompletionSource.h:63:- (BOOL)trySetResult:(id)result; 二进制文件 node_modules/cordova-plugin-facebook/src/ios/FBSDKCoreKit.framework/FBSDKCoreKit 匹配二进制文件platforms/ios/DerivedData/Build/Intermediates.noindex/ArchiveIntermediates/Physician Portal/IntermediateBuildFilesPath/Physician Portal.build/Release-iphoneos/Physician Portal.build/Objects-normal/arm64/Physician Portal 匹配二进制文件平台/ios/DerivedData/Build/Intermediates.noindex/ArchiveIntermediates/Physician Portal/IntermediateBuildFilesPath/Physician Portal.build/Release- iphoneos/Physician Portal.build/Objects-normal/armv7/Physician Portal 匹配 二进制文件平台/ios/Physician Portal/Plugins/cordova-plugin-facebook/FBSDKCoreKit.framework/FBSDKCoreKit 匹配二进制文件插件/cordova-plugin-facebook/src/ios/Bolts.framework/Bolts匹配 plugins/cordova-plugin-facebook/src/ios/Bolts.framework/Headers/BFTaskCompletionSource.h:37:- (void)setResult:(id)result;插件/cordova-plugin-facebook/src/ios/Bolts.framework/Headers/BFTaskCompletionSource.h:63:- (BOOL)trySetResult:(id)result;二进制文件 plugins/cordova-plugin-facebook/src/ios/FBSDKCoreKit.framework/FBSDKCoreKit 匹配

以上是关于iOS 应用 - 非公共 API 使用 - 应用引用非公共选择器:cancelButtonClicked、setResult:的主要内容,如果未能解决你的问题,请参考以下文章

当我提交带有犰狳的 iOS 应用程序时,BLAS 符号被拒绝为私有(ITMS-90338:非公共 API 使用)

无法使用 Facebook SDK 3.0 上传 iOS 应用程序,因为引用了非公共选择器

含义 - 使用非公共 API 的应用程序将被拒绝

应用拒绝问题 2.5:使用非公共 API 的应用将被拒绝

应用程序中的非公共 API,__strlcat_chk,__strlcpy_chk

ITMS-90338:非公共 API 使用 - 应用程序引用非公共选择器 _setAlwaysRunsAtForegroundPriority: