在使用Xcode 4.2和iOS 5进入main()之前,iOS应用程序崩溃

rjs*_*ing 13 xcode objective-c xcodebuild lldb ios5

背景

/升级到/我在App加载时甚至它进入之前遇到崩溃main().

我已经设定了一个断点,main()但它永远不会达到.

main()断点

  • 使用Base SDK4.3 编译Xcode 4.1中的项目在iOS 4.x和iOS 5上正常工作.
  • 使用Base SDK5.0 编译Xcode 4.2中的相同项目在4.x上工作正常但在iOS 5中崩溃,无论是在模拟器上还是在设备上.

模拟器崩溃

iOS 5模拟器LLDB崩溃Xcode 4.2输出

EXC_BAD_ACCESS崩溃

堆栈电话

呼叫列表,所有系统呼叫,甚至main()还没有被呼叫.

我最好的猜测是加载一个库有问题,但知道如何跟踪它!

试图解决问题

  1. 打开僵尸
  2. 打开所有日志记录
  3. 添加了不同版本的系统库(libz.1.2.5.dylib和libz.dylib)
  4. 清理了这个项目
  5. 从模拟器中删除了应用程序
  6. 删除Derived Data文件夹

Mar*_*off 10

您的部署目标是什么?

我的部署目标是iOS4.0.我将其更改为iOS4.3并解决了问题!(当然,建立在iOS5 GM SDK的基础上.)我的应用程序现在可以在iOS5模拟器中运行.

我从另一个SO线程的答案中得到了这个想法,即在iOS4.3及更高版本中支持ARC.据我所知,我的应用程序不使用ARC,也不使用任何依赖库.答案还说了一些关于弱引用归零的东西,这看起来似乎......可能是相关的,因为很多人已经成功地删除了关于对libSystem.B.dylib的弱引用的特定链接器指令.

令我困扰的是,我必须将我的基本部署目标提升到4.0以上,因为这感觉我正在削减许多潜在用户.尽管Apple希望每个人都能永远升级他们的设备,但许多人却不会.那好吧.

编辑

值得一提的是,这个项目最初是在Xcode3下完成的,所以项目本身可能只有一些奇怪的错误,这两者都是不必要的并导致了这个问题.但如果我能找到它,我会被诅咒!

编辑2

好吧,好吧......经过进一步的检查......我在我的project.pbxproj文件中发现了2个对libSystem.B.dylib的错误引用,这些引用是通过Xcode的构建设置看不到的,但是我必须手动删除文本编辑器!

执行此操作后,我将基本部署版本重置为4.0,为iOS5模拟器构建,应用程序运行没有问题.

惊人.

经验教训:永远不要低估项目文件中存在垃圾的可能性.

编辑3

Xcode项目编辑

project.pbxproj在Xcode项目包中的文件中删除这些行的3次(右键单击并显示包内容).

显示包装内容