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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在使用Xcode 4.2和iOS 5进入main()之前,iOS应用程序崩溃相关的知识,希望对你有一定的参考价值。

背景

在将qazxsw poi / qazxsw poi升级到qazxsw poi / 之后,我正在遇到崩溃,而App正在加载,甚至在它进入之前。

我在设置了一个断点,但它永远不会达到。

  • 使用4.3的在Xcode 4.1中编译项目在ios 4.x和iOS 5上运行正常。
  • 使用5.0的main()在Xcode 4.2中编译相同的项目在4.x上工作正常但在iOS 5中崩溃,无论是在模拟器上还是在设备上。

模拟器崩溃

与EXC_BAD_ACCESS崩溃

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

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

试图解决问题

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

您的部署目标是什么?

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

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

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

编辑

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

编辑2

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

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

惊人。

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

编辑3

在Xcode项目包中的main()file中删除这些行的3次出现(右键单击并显示包内容)。

另一答案

当链接框架未被复制时,在进入Logic unit tests crash之前崩溃的应用程序可能会发生,例如因为项目使用Carthage并且缺少This question构建阶段#0 0x00000000 in <????> () #1 0x99924ef3 in mig_get_reply_port () #2 0x9991e70c in mach_ports_lookup () #3 0x0141c124 in _xpc_domain_init_local () #4 0x01419eb1 in _libxpc_initializer () #5 0x8fe2a15b in __dyld__ZN16ImageLoaderMachO18doModInitFunctionsERKN11ImageLoader11LinkContextE () #6 0x8fe29cc0 in __dyld__ZN16ImageLoaderMachO16doInitializationERKN11ImageLoader11LinkContextE () #7 0x8fe27220 in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListE () #8 0x8fe271b6 in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListE () #9 0x8fe271b6 in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListE () #10 0x8fe271b6 in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListE () #11 0x8fe271b6 in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListE () #12 0x8fe281c0 in __dyld__ZN11ImageLoader15runInitializersERKNS_11LinkContextERNS_21InitializerTimingListE () #13 0x8fe1c626 in __dyld__ZN4dyld24initializeMainExecutableEv () #14 0x8fe20ef2 in __dyld__ZN4dyld5_mainEPK12macho_headermiPPKcS5_S5_ () #15 0x8fe1a2ef in __dyld__ZN13dyldbootstrap5startEPK12macho_headeriPPKclS2_ () #16 0x8fe1a063 in __dyld__dyld_start ()

另一答案

就我而言,它是main.mRun Script旗帜。我不得不删除它,它就像一个魅力。

另一答案

我似乎记得在调用main()之前有一个类似的崩溃错误,我跟踪它在app delegate和我的nib中声明的IBOutlets之间的不匹配。浏览并检查您的商店,看看是否有任何错误配置。

-mz

另一答案

检查链接器标志。您可能使用的某些库需要这样的标志:

Derived Data

弱链接允许针对iOS 4.x构建具有3.x部署目标。无论出于何种原因,它现在在模拟器中完全被打破了。

另一答案

我正在使用方案诊断程序,并通过意外设置“启用Guard Malloc”来获得完全相同的行为。我的目标是4.3并且在5.0 Simulator上运行ARC。从模拟器启动时,应用程序运行正常,而不是从XCode启动。转到产品 - >编辑方案...,选择左侧表格中的“运行”项,然后选择右侧的“诊断”选项卡。取消选中“启用Guard Malloc”。

另一答案

我在rjstelling和MarkGranoff的帖子中尝试了一切都无济于事。我现在可以通过在我的调试方案上关闭Guard Malloc来重复使用它。 Guard Malloc on - 崩溃,关闭 - 没有崩溃。我从来没有在设备上只有模拟器的问题。我首先在上面的帖子中应用了修复程序,所以我不知道如果没有这些更改,这是否可以解决问题。希望这有助于其他人。

另一答案

我有完全相同的诊断,但解决方案完全不同。

但是,这里的答案中描述的解决方案对我不起作用,因为我发现我的项目中没有“弱”相关的问题.pbxproj

但是,我发现我的问题的原因是从主线程调用的an answer in another SO thread方法中的死锁。在这种方法中,我打电话给project.pbxproj。将此更改为-weak_library /usr/lib/libSystem.B.dylib (注意“a”)解决了我的问题。

我发现这个问题的方式是偶然的。虽然似乎没有任何事情发生,Xcode的“线程”导航器告诉我应用程序本身没有崩溃。我偶然点击了调试器中的“暂停”。然后它突然停在了僵局所在的位置。经过一些思考后,这在逻辑上是显而易见的。

另一答案

我有逻辑单元测试的类似问题(运行单独的目标而不依赖于iOS模拟器中的主应用程序),在我的情况问题是在lldb,这里是更多细节: +(void)initialize

另一答案

Xcode 4.2仍然有一些粗略的边缘。一个完整的删除和重新安装修复了我遇到的问题(它被困在“附加”并且“官方”SO线程上的解决方案都没有帮助)。可能有点极端。

在File Navigator中选择顶级项目,然后转到Build Phases选项卡。展开“使用框架链接二进制”部分 - 是否有任何框架不是Apple提供的?它们是可选的还是必需的?您的任何代码是否需要任何其他框架?

为了帮助更多,您可以发布当前被调用堆栈弹出窗口隐藏的所有日志消息吗?

另一答案

您可以将链接器标志有条件地应用于iOS SDK,而不是XCode 4中的iPhone模拟器。

选择Other Linker Flags,单击Add Build Setting,选择Add Conditional Setting,然后为iOS SDK应用-weak_library /usr/lib/libSystem.B.dylib。

这使模拟器构建仍然有效。

另一答案

Guard malloc也是我的问题。可能是因为我使用的是libxml2.2.7.3.dylib。

dispatch_sync(dispatch_get_main_queue(), ^{[some block code]})描述了同样的崩溃,但他很幸运能够开启警卫摩托车,所以很明显是什么导致了撞车事故。我刚刚将Xcode升级到4.2后崩溃了。

我想要包含堆栈跟踪,以便它是Googleable。我很难找到这个页面。

dispatch_async

以上是关于在使用Xcode 4.2和iOS 5进入main()之前,iOS应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

使用 iOS 5.0 Beta 版本在 Xcode 4.2 中创建 IPA 文件

升级到 Xcode 4.2/iOS 5 后,类别中的方法引发异常

Xcode 4.2 和 iOS 5.1 管理器用黄点读取我的 iPhone?

如何在 Mac OSX 10.6.4 Snow leopard 中使用 iOS 5 安装 xcode 4.2

iOS 项目将 Xcode 4.2 更新到 Xcode 4.5

如何在 Xcode 4.0.2 中使用 iOS SDK 4.2