自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 …