提交应用程序时出现此App Store错误。我一个月前能够提交相同的应用程序,但是我没有这个问题。上次提交时,它给了我错误,但仍然可以接受二进制至少。现在,它甚至不接受二进制文件。我使用如下代码。
valueTextField.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
我不确定我的图书馆是否没有达到期望。还有其他解决方法吗?
如果我必须向苹果发送电子邮件,我还应该向他们发送二进制文件吗?
编辑:Brian,我已经在.app文件上完成了nm和字符串。结果如下。您能建议下一步做什么吗?
最佳答案
您的错误与该特定代码行无关。编译后,该行可简化为有效的调用:
objc_msgSend(valueTextField, SEL(setKeyboardType:), (NSInteger)2);
您的二进制文件中不会提到UIKeyboard。
您还可以通过在二进制文件上运行
nm
和strings
来验证您的代码未引用UIKeyboard:nm MyApp.app/MyApp | grep UIKeyboard
strings MyApp.app/MyApp | grep UIKeyboard
这将显示您可能必须对UIKeyboard的任何字符串或符号引用。如果没有,则命令应该为空,否则nm将输出类似以下内容:
U _OBJC_CLASS_$_UIKeyboard
基于其他人遇到的事实,现在苹果的提交流程似乎有问题。如果问题仍然存在,您可以尝试以下三种不同的提交 channel :
更新
查看您的编辑,您的应用程序实际上引用了UIKeyboard。由于听起来您的代码未使用UIKeyboard,因此可能归咎于第三方库。您有两种选择:
跟踪引入更改的提交:
由于您在应用程序商店中拥有较早的发行版,因此您应该能够从SCM中 check out 该应用程序的版本,进行构建,运行
nm MyApp.app/MyApp | grep UIKeyboard
并确认您未引用该类。如果不是这种情况,事情将会变得更加艰难,您应该跳到我的下一个建议。现在,您可以通过在好与坏之间将提交一分为二来跟踪引入依赖关系的提交。如果使用git,
git bisect
是您的 friend :git bisect master SHA_OR_TAG_OF_PREVIOUS_RELEASE
nm MyApp.app/MyApp | grep UIKeyboard
git bisect good
,否则为git bisect bad
。 一旦发现错误的提交,就应该希望可以清楚地知道更新了哪个库来引入该问题。您可以检查是否有新的更新,将其还原或解决该问题所需的任何更新。如果您不能立即找出是哪个原因造成的,则可以执行下一步。
在您的应用使用的框架和库上运行
nm
:由于您无法在代码中找到对
UIKeyboard
的引用,因此很可能链接到引用它的库。您将需要在每个这些库上运行nm
来跟踪罪魁祸首。您可以在“将二进制文件与库链接”阶段的“构建阶段”下找到应用程序链接到的所有框架。您可以忽略工作空间中其他项目中的系统框架和库,而只关注任何第三方
.a
文件或框架。如果您要使用Cocoapods进行所有操作,则可以继续检查
libPods-*.a
以快速查看是否有任何Pod引用了该代码。如果您找到匹配项,则将nm
管道重新运行到less
中,并继续向上按压,直到看到一个路径名和目标文件名,它将指向您指向负责的库。否则,请在每个.frame文件和每个.framework目录中的二进制文件上运行
nm
。nm myLibrary.a | grep UIKeyboard
nm SomeComponent.framework/SomeComponent | grep UIKeyboard
找到匹配项后,您可以检查是否有新版本的框架或报告问题。如果您在生产中不应该链接到库中找到它,请找到一种删除它的方法。
关于ios - 该应用包含有效载荷/XXX.APP/XXX : UIKeyboard中的非公共(public)类或从中继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26691095/