自SDK 8更新以来,iOS 8 UIApplicationMain发生崩溃
由于我更新Xcode到6.0.1和iOS SDK到8.0我的应用程序不再在设备上运行(运行iOS 8 ofc)。 但它在模拟器中完美地工作。
应用程序在UIApplicationMain发生任何调用之前崩溃。 看起来CFTypeCollectionRetain中的值或键都是空的。
我试过了
- 重新创build证书/configuration文件。
- 用/不用ARC重build。
- testing了armv7和arm64版本。
- Xcode模板(游戏)应用程序编译和运行没有probs。
注意事项
- 几乎所有的代码都是C ++,它是一个游戏引擎,只使用最less的OS服务。
- 一些全局构造函数(在main之前执行)使用pthreads基元。
- 没有根视图控制器被创build(遗留的原因),而是创build一个自定义视图,它使用CAEAGLLayer来“启用”GLES …但由于程序没有达到创build这些点,我忽略了它的时间。
- 在UIApplicationMain里面有一个调用[_UIFlippingView layerClass]的崩溃; 但在Google上找不到有关UIFlippingView类的任何信息…
我不期望一个答案,但任何好的build议,看看下一个将非常感激!
Callstack如下所示:
* 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 帧#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 第6帧:0x01fab740 libdispatch.dylib`dispatch_once_f + 100 frame#7:0x28a8d318 BackBoardServices`BKSHIDEventRegisterEventCallback + 84 帧#8:0x274ab4a8 UIKit`UIApplicationMain + 576 frame#9:0x0008833c Traktor.Amalgam.App`main(argc = 1,argv = 0x01d3f9e8)+196在Main.mm:15
CoreFoundation`__CFTypeCollectionRetain: 0x23f76404:push {r4,r5,r7,lr} 0x23f76406:mov r4,r1 0x23f76408:添加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:添加r2,pc 0x23f76422:ldr r2,[r2] 0x23f76424:cmp r0,r2 0x23f76426:beq 0x23f7644a; __CFTypeCollectionRetain + 70 0x23f76428:movw r2,#0x4aa4 0x23f7642c:movt r2,#0xe03 0x23f76430:添加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; 符号存根:+ [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:bw 0x23eafc38; _CFRetain 0x23f76456:movw r0,#0xb93e 0x23f7645a:movt r0,#0xe02 0x23f7645e:加r0,pc 0x23f76460:ldr r1,[r0] 0x23f76462:mov r0,r4 0x23f76464:pop.w {r4,r5,r7,lr} 0x23f76468:bw 0x2400c0c8; objc_msgSend $垫片 0x23f7646c:陷阱 - 陷在这里 0x23f7646e:nop
在UIApplicationMain代码里面,有意思的是对[_UIFlippingView layerClass]的调用,它会崩溃。
0x274ab486:blx 0x27b5b248; 符号存根:roundf $ shim 0x274ab48a:movs r5,#0x0 0x274ab48c:movw r0,#0x60f1 0x274ab490:movt r0,#0x0 0x274ab494:加上r0,pc 0x274ab496:blx 0x27b595d8; 符号存根: - [UIGravityBehavior _commonInit] 0x274ab49a:movw r0,#0xfa8f 0x274ab49e:movt r0,#0xfff9 0x274ab4a2:添加r0,pc 0x274ab4a4:blx 0x27b59068 - 这个电话; 符号存根:+ [_UIFlippingView layerClass] 0x274ab4a8:mov r0,r5 0x274ab4aa:mov r1,r11 0x274ab4ac:blx 0x27b5b248; 符号存根:roundf $ shim 0x274ab4b0:movw r1,#0x23e4 0x274ab4b4:movt r1,#0xb12 0x274ab4b8:添加r1,pc 0x274ab4ba:ldr r1,[r1] 0x274ab4bc:blx 0x27b5b248; 符号存根:roundf $ shim
能够解决这个问题!
显然Xcode有自动生成“产品模块名称”设置不匹配“产品名称”,从而在设备上运行时崩溃应用程序的坏主意。 这是mindbogglingly糟糕,但恕我直言,什么期望的Xcode …