使用ad-hoc分发在设备上崩溃

时间:2012-09-25 10:08:54

标签: ios xcode memory-management segmentation-fault ad-hoc-distribution

突然间,我通过Testflight和iTunes-sync进行的临时发布不再有效。使用ad-hoc构建配置分发的应用程序永远不会在设备上完全启动。它会立即崩溃并出现分段错误11。

这个问题的奇怪之处在于,在下面提到的所有设备上,调试版本可以完美地工作。这让我相信我的project.pbxproj中有些东西搞砸了。但是当我查看git-log时,我发现没有任何故障,唯一改变的是架构( ARCHS )和有效架构( VALID_ARCHS )。

我是否正确地假设弄乱架构不应该在启动时但在构建过程中导致实际错误?

一些背景:
另外值得一提的是,我安装了Xcode 4.4.1和4.5 GM,当我将GM升级到App Store的时,它也删除了Xcode 4.4.1的备份。在打嗝之后,我删除了所有版本的Xcode,重新启动并再次安装了4.4.1版(这样我就可以为armv6构建了)。

有关如何进行此调试的任何有用提示对我来说都非常有价值 谢谢你的时间。 < 3

来自设备的控制台打印和崩溃日志
- https://gist.github.com/3781018
如果需要,我可以添加更多日志。

当前环境:
  - Xcode版本4.4.1(4F1003)
  - Mac OS版本10.8.2

项目设置(pbxproj):
  - https://gist.github.com/3780985

经过测试的设备:
  - iPhone 3GS iOS 6
  - iPhone 3G iOS 4.2.1
  - iPad第二代iOS 5.1.1
  - iPhone 4S iOS 5.1.1
  - iPhone 4 iOS 6.0
  - iPhone 4S iOS 6.0

更新
为了进行调试,这是我尝试过的:
 1.跳过Testflight并使用老派的方式在iTunes中发布ad-hoc。的 FAIL  2.重新安装配置文件 FAIL
 2.在我的机器上创建一个新用户并重新安装Xcode。的 FAIL
 3.从另一台机器构建。的 FAIL
 4.将优化级别设置为:-O0 FAIL

尽管我确信没有任何代码被更改,但我没有看到其他合理的解释。所以我开始用git恢复项目,盯着我成功发布临时版本的那一天。令我恐惧的是,我注意到同样的分段错误正在跟随我的时间结构! 考虑到这一事实,只剩下一个动作;一个非常强大的调试方式我称之为喷雾和祈祷。 =)换句话说,我开始评论代码的各个部分,看看是否有任何不同,我完全惊讶它实际上做了。几个小时的禁用和启用我的应用程序的部分后,我找到了罪魁祸首:从未保留静态NSArray。我真正想到的是,自2010年以来,阵列的实际初始化看起来一直如此。那么为什么现在这突然导致内存错误呢?为什么静态分析仪没有警告我们呢?

我现在太精疲力竭地回答这些问题了,我会尝试更详细地更新问题,希望明天也能回答。
再一次,非常感谢迄今为止帮助过的人! < 3

1 个答案:

答案 0 :(得分:0)

看起来问题的原因是并发问题:

Crashed Thread:  1

在这种情况下,可能很难找到并解决问题的根源(http://en.wikipedia.org/wiki/Unusual_software_bug#Heisenbug)。

您可能正在使用多个线程中的一个对象执行某些操作而没有正确的同步; 或者你可能是一个线程中的dealloc'ed对象(例如线程0)并尝试从另一个线程(线程1)访问它。