iOS应用程序与静态库仅在加载Ad Hoc归档构建时崩溃。在调试器中无法重现。

12
我意识到这很困难,而且我无法提供太多信息来帮助,但我会尽全力。我的应用程序已经持续开发了3年,从未遇到过这种情况。最近,我向苹果提交了一个小版本的发布,但两次被拒绝了,因为在他们所有的设备上启动时崩溃了。崩溃报告指向一些静态库中的代码,但关键的行没有得到符号化。试过Atos也没用。重点是,我有7个设备,我已经测试了所有的模式,特别是没连接到任何东西的模式:Wifi关闭、飞行模式打开、位置服务关闭。我永远无法模拟他们所声称看到的情况,即每次启动应用都会崩溃!我在AAPL Dev论坛上找到了一个类似的报告,但他没有得到任何解释。最后他放弃了,在应用程序中添加了大量日志,并请求苹果发送日志文件。他们获得了那个版本...几小时后就批准了。你有任何想法吗?我需要发布这个版本。
注:问题已解决。这实际上不是一个弱链接问题。我们只在使用Brad建议的归档版本的Ad Hoc分发运行应用程序时才看到崩溃,所以这很有帮助。然而,解决方法是一些编译器标志,我在这里列出了:https://dev59.com/jGkv5IYBdhLWcg3w3Eel#10302012

他们拥有的不是你正在测试的东西吗? - Martin James
你是在建议尝试临时构建吗?我还没有这样做,但我测试的肯定是他们所拥有的。 - Cliff Ribaudo
1
你是在测试发布版(关闭调试)构建吗? - mspasov
你能把崩溃报告放到像pastebin.com这样的网站上吗? - ott--
7
尝试构建和归档应用程序,然后选择将其分发给特定人群或企业描述。将.ipa文件放入iTunes中,并手动在其中一个测试设备上加载它。我刚遇到一个非常微妙的弱链接错误,在通过Xcode安装时没有显示出来,但在通过iTunes手动加载.ipa包时显露出来。这还涉及项目中的静态库,并且也会在提交审核的发布版本中显示出来。 - Brad Larson
1个回答

12

我将转载并扩展我之前的评论以便这个问题能够有一个被接受的答案。

最近我在构建我的GPUImage框架时遇到了一个类似的情况。当通过Xcode直接构建和安装应用程序时,构建过程似乎与存档时略有不同。

可以通过构建和存档应用程序,然后选择分发到 ad hoc 或企业分发来暴露这一点。将 .ipa 文件放在 iTunes 中,并手动在其中一个测试设备上加载它。以这种方式准备的应用程序的行为可能与通过 Xcode 构建和安装的应用程序不同,并且应该更接近于提交审核的构建的行为。

在我的例子中,问题是由于缺乏适当的弱链接而导致的。在 iOS 4.3 以上版本的 SDK 上,如果您希望有条件地使用在较旧的版本中缺失的较新 SDK 中存在的类和函数,则不再需要弱链接整个框架。如果您的目标是 4.0 及更高版本,则链接器现在应执行类和函数级别的弱链接。

但是,对于使用我的静态库的人来说,这一点并没有生效,因为它在 iOS 5.0 中进行了新纹理高速缓存函数的运行时检查,但只在这些存档的构建中失败。我从未在所有针对 4.x 设备的测试中看到过这种情况,因为那是通过 Xcode 安装完成的。最终,我需要让用户显式地弱链接整个 Core Video 框架,以便在通过 iTunes 存档和安装时使使用此框架的应用程序能够正常运行。

请注意,这并不是由于发布与调试构建配置之间的差异,因为我尝试在通过 Xcode 部署到设备时切换这些构建方案之间进行切换,并且在那里没有任何区别。在存档应用程序的构建和链接方式上有一些其他的不同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接