自从我将 Xcode 更新到 6.0.1 并将 iOS SDK 更新到 8.0 后,我的应用程序不再在设备上运行(运行 iOS 8 ofc)。 但它在模拟器中完美运行。
在对委托(delegate)进行任何调用之前,应用程序在 UIApplicationMain 中崩溃。 CFTypeCollectionRetain 中的值或键似乎为空。
我试过了
- 重新创建证书/配置文件。
- 使用/不使用 ARC 进行重建。
- 测试了 armv7 和 arm64 版本。
- Xcode 模板(游戏)应用程序编译和运行没有问题。
注意事项
- 几乎所有代码都是 C++,它是一个游戏引擎并且使用最少的操作系统服务。
- 一些全局构造函数(在 main 之前执行)正在使用 pthreads 原语。
- 没有创建 Root View Controller (遗留原因),而是创建了一个使用 CAEAGLLayer 来“启用”GLES 的自定义 View ...但是由于程序没有达到创建它们的地步,所以我忽略了它暂时。
- 在 UIApplicationMain 中有一个对 [_UIFlippingView layerClass] 的调用崩溃了;但在 Google 上找不到有关 UIFlippingView 类的任何信息...
我不希望得到答案,但如果有任何关于下一步看哪里的好建议,我们将不胜感激!
调用栈如下:
* thread #1: tid = 0x185d9, 0x23f7646c CoreFoundation`__CFTypeCollectionRetain + 104, queue = 'com.apple.main-thread', stop reason = EXC_BREAKPOINT (code=EXC_ARM_BREAKPOINT, subcode=0xdefe) * frame #0: 0x23f7646c CoreFoundation`__CFTypeCollectionRetain + 104 frame #1: 0x23fd9168 CoreFoundation`__CFBasicHashAddValue + 564 frame #2: 0x23ec06c0 CoreFoundation`CFBasicHashAddValue + 19048 frame #3: 0x23ef745e CoreFoundation`CFDictionaryCreate + 178 frame #4: 0x28a8d246 BackBoardServices`BKSHIDEventCreateClientAttributes + 186 frame #5: 0x28a8d2ac BackBoardServices`___getHIDEventSystemClient_block_invoke + 36 frame #6: 0x01fab740 libdispatch.dylib`dispatch_once_f + 100 frame #7: 0x28a8d318 BackBoardServices`BKSHIDEventRegisterEventCallback + 84 frame #8: 0x274ab4a8 UIKit`UIApplicationMain + 576 frame #9: 0x0008833c Traktor.Amalgam.App`main(argc=1, argv=0x01d3f9e8) + 196 at Main.mm:15
CoreFoundation`__CFTypeCollectionRetain: 0x23f76404: push {r4, r5, r7, lr} 0x23f76406: mov r4, r1 0x23f76408: add r7, sp, #0x8 0x23f7640a: cbz r4, 0x23f7646c ; __CFTypeCollectionRetain + 104 0x23f7640c: ldrd r0, r1, [r4] 0x23f76410: cmp r0, #0x0 0x23f76412: ubfx r1, r1, #0x8, #0xa 0x23f76416: beq 0x23f7644a ; __CFTypeCollectionRetain + 70 0x23f76418: movw r2, #0xdf70 0x23f7641c: movt r2, #0xe02 0x23f76420: add r2, pc 0x23f76422: ldr r2, [r2] 0x23f76424: cmp r0, r2 0x23f76426: beq 0x23f7644a ; __CFTypeCollectionRetain + 70 0x23f76428: movw r2, #0x4aa4 0x23f7642c: movt r2, #0xe03 0x23f76430: add r2, pc 0x23f76432: ldr.w r5, [r2, r1, lsl #2] 0x23f76436: cmp r0, r5 0x23f76438: beq 0x23f7644a ; __CFTypeCollectionRetain + 70 0x23f7643a: tst.w r0, #0x1 0x23f7643e: beq 0x23f76456 ; __CFTypeCollectionRetain + 82 0x23f76440: mov r0, r4 0x23f76442: blx 0x2400d1e0 ; symbol stub for: +[NSMutableOrderedSet orderedSetWithCapacity:] 0x23f76446: cmp r0, r5 0x23f76448: bne 0x23f76456 ; __CFTypeCollectionRetain + 82 0x23f7644a: mov r0, r4 0x23f7644c: movs r1, #0x0 0x23f7644e: pop.w {r4, r5, r7, lr} 0x23f76452: b.w 0x23eafc38 ; _CFRetain 0x23f76456: movw r0, #0xb93e 0x23f7645a: movt r0, #0xe02 0x23f7645e: add r0, pc 0x23f76460: ldr r1, [r0] 0x23f76462: mov r0, r4 0x23f76464: pop.w {r4, r5, r7, lr} 0x23f76468: b.w 0x2400c0c8 ; objc_msgSend$shim 0x23f7646c: trap -- TRAPPED HERE 0x23f7646e: nop
在 UIApplicationMain 代码中,有趣的是对 [_UIFlippingView layerClass] 的调用崩溃了......
0x274ab486: blx 0x27b5b248 ; symbol stub for: roundf$shim 0x274ab48a: movs r5, #0x0 0x274ab48c: movw r0, #0x60f1 0x274ab490: movt r0, #0x0 0x274ab494: add r0, pc 0x274ab496: blx 0x27b595d8 ; symbol stub for: -[UIGravityBehavior _commonInit] 0x274ab49a: movw r0, #0xfa8f 0x274ab49e: movt r0, #0xfff9 0x274ab4a2: add r0, pc 0x274ab4a4: blx 0x27b59068 -- THIS CALL ; symbol stub for: +[_UIFlippingView layerClass] 0x274ab4a8: mov r0, r5 0x274ab4aa: mov r1, r11 0x274ab4ac: blx 0x27b5b248 ; symbol stub for: roundf$shim 0x274ab4b0: movw r1, #0x23e4 0x274ab4b4: movt r1, #0xb12 0x274ab4b8: add r1, pc 0x274ab4ba: ldr r1, [r1] 0x274ab4bc: blx 0x27b5b248 ; symbol stub for: roundf$shim
最佳答案
能够解决问题!!
显然,Xcode 有一个坏主意,即自动生成与“产品名称”不匹配的“产品模块名称”设置,因此在设备上运行时导致应用程序崩溃。这是令人难以置信的糟糕,但恕我直言,对 Xcode 的期望...
关于自 SDK 8 更新以来,iOS 8 UIApplicationMain 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25960255/