应用程序仅在真实设备上启动时崩溃

时间:2014-09-11 19:04:30

标签: ios xcode swift sprite-kit

我想今天发布我的游戏应用程序(使用Swift - xCode GTM和Sprite工具包框架)。我的应用程序在模拟器上工作正常但是当我在真实设备上试用它 - iPhone 4 iOS 7时,它在启动时崩溃:

class func unarchiveFromFile(file : NSString) -> SKNode? {

        let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks")//CRASH!

        var sceneData = NSData.dataWithContentsOfFile(path!, options: .DataReadingMappedIfSafe, error: nil)
        var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData)

        archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
        let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as GameScene
        archiver.finishDecoding()
        return scene
    }
}

这是我的崩溃日志:

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000001, 0x000000000000defe
Triggered by Thread:  0

Thread 0 Crashed:
0   libswiftCore.dylib              0x003347d0 0x1b6000 + 1566672
1   libswiftCore.dylib              0x001f3a64 0x1b6000 + 252516
2   MyApp                       0x000d2904 0xc4000 + 59652
3   MyApp                       0x000d36d8 0xc4000 + 63192
4   MyApp                       0x000d4214 0xc4000 + 66068
5   MyApp                       0x000d4dc4 0xc4000 + 69060
6   UIKit                           0x3079e5fe -[UIViewController loadViewIfRequired] + 514
7   UIKit                           0x3079e3bc -[UIViewController view] + 20
8   UIKit                           0x307a5088 -[UIWindow addRootViewControllerViewIfPossible] + 60
9   UIKit                           0x307a275e -[UIWindow _setHidden:forced:] + 302
10  UIKit                           0x3080da50 -[UIWindow makeKeyAndVisible] + 56
11  UIKit                           0x3080a80c -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1652
12  UIKit                           0x30804d0e -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 710
13  UIKit                           0x3079f6a2 -[UIApplication handleEvent:withNewEvent:] + 3126
14  UIKit                           0x3079e9a4 -[UIApplication sendEvent:] + 68
15  UIKit                           0x308044f8 _UIApplicationHandleEvent + 660
16  GraphicsServices                0x32c3670a _PurpleEventCallback + 606
17  GraphicsServices                0x32c362f2 PurpleEventCallback + 30
18  CoreFoundation                  0x2dff39e4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 32
19  CoreFoundation                  0x2dff397e __CFRunLoopDoSource1 + 342
20  CoreFoundation                  0x2dff2152 __CFRunLoopRun + 1394
21  CoreFoundation                  0x2df5cce2 CFRunLoopRunSpecific + 518
22  CoreFoundation                  0x2df5cac6 CFRunLoopRunInMode + 102
23  UIKit                           0x30803794 -[UIApplication _run] + 756
24  UIKit                           0x307fea3c UIApplicationMain + 1132
25  MyApp                       0x000da594 0xc4000 + 91540
26  MyApp                       0x000da5d0 0xc4000 + 91600
27  libdyld.dylib                   0x38858ab4 start + 0

Thread 1:
0   libsystem_kernel.dylib          0x388fc83c kevent64 + 24
1   libdispatch.dylib               0x38847e08 _dispatch_mgr_invoke + 228
2   libdispatch.dylib               0x388373ee _dispatch_mgr_thread$VARIANT$up + 34

Thread 2:
0   libsystem_kernel.dylib          0x3890fc7c __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x38975dc6 _pthread_wqthread + 306
2   libsystem_pthread.dylib         0x38975c80 start_wqthread + 4

Thread 3:
0   libsystem_kernel.dylib          0x3890fc7c __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x38975dc6 _pthread_wqthread + 306
2   libsystem_pthread.dylib         0x38975c80 start_wqthread + 4

Thread 4 name:  WebThread
Thread 4:
0   libsystem_kernel.dylib          0x3890efa8 __psynch_mutexwait + 24
1   libsystem_pthread.dylib         0x38975f0a _pthread_mutex_lock + 302
2   WebCore                         0x35e2f138 _WebTryThreadLock(bool) + 104
3   WebCore                         0x35e2f0ba WebRunLoopLock(__CFRunLoopObserver*, unsigned long, void*) + 42
4   CoreFoundation                  0x2dff41d2 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 18
5   CoreFoundation                  0x2dff1b74 __CFRunLoopDoObservers + 280
6   CoreFoundation                  0x2dff1f84 __CFRunLoopRun + 932
7   CoreFoundation                  0x2df5cce2 CFRunLoopRunSpecific + 518
8   CoreFoundation                  0x2df5cac6 CFRunLoopRunInMode + 102
9   WebCore                         0x35e2dbae RunWebThread(void*) + 414
10  libsystem_pthread.dylib         0x38977c1a _pthread_body + 138
11  libsystem_pthread.dylib         0x38977b8a _pthread_start + 98
12  libsystem_pthread.dylib         0x38975c8c thread_start + 4

Thread 5 name:  com.apple.NSURLConnectionLoader
Thread 5:
0   libsystem_kernel.dylib          0x388fca8c mach_msg_trap + 20
1   libsystem_kernel.dylib          0x388fc888 mach_msg + 44
2   CoreFoundation                  0x2dff37c6 __CFRunLoopServiceMachPort + 150
3   CoreFoundation                  0x2dff1eec __CFRunLoopRun + 780
4   CoreFoundation                  0x2df5cce2 CFRunLoopRunSpecific + 518
5   CoreFoundation                  0x2df5cac6 CFRunLoopRunInMode + 102
6   Foundation                      0x2e996492 +[NSURLConnection(Loader) _resourceLoadLoop:] + 314
7   Foundation                      0x2ea0be22 __NSThread__main__ + 1058
8   libsystem_pthread.dylib         0x38977c1a _pthread_body + 138
9   libsystem_pthread.dylib         0x38977b8a _pthread_start + 98
10  libsystem_pthread.dylib         0x38975c8c thread_start + 4

Thread 6:
0   libsystem_kernel.dylib          0x388fca8c mach_msg_trap + 20
1   libsystem_kernel.dylib          0x388fc888 mach_msg + 44
2   CoreFoundation                  0x2dff37c6 __CFRunLoopServiceMachPort + 150
3   CoreFoundation                  0x2dff1eec __CFRunLoopRun + 780
4   CoreFoundation                  0x2df5cce2 CFRunLoopRunSpecific + 518
5   CoreFoundation                  0x2df5cac6 CFRunLoopRunInMode + 102
6   libAVFAudio.dylib               0x2cfe1584 GenericRunLoopThread::Entry(void*) + 124
7   libAVFAudio.dylib               0x2cfd5a94 CAPThread::Entry(CAPThread*) + 176
8   libsystem_pthread.dylib         0x38977c1a _pthread_body + 138
9   libsystem_pthread.dylib         0x38977b8a _pthread_start + 98
10  libsystem_pthread.dylib         0x38975c8c thread_start + 4

Thread 7:
0   libsystem_kernel.dylib          0x3890fc7c __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x38975dc6 _pthread_wqthread + 306
2   libsystem_pthread.dylib         0x38975c80 start_wqthread + 4

Thread 8 name:  JavaScriptCore::BlockFree
Thread 8:
0   libsystem_kernel.dylib          0x3890ef38 __psynch_cvwait + 24
1   libsystem_pthread.dylib         0x38977224 _pthread_cond_wait + 536
2   libsystem_pthread.dylib         0x38978040 pthread_cond_timedwait + 40
3   JavaScriptCore                  0x2ef80eb8 WTF::ThreadCondition::timedWait(WTF::Mutex&, double) + 104
4   JavaScriptCore                  0x2ef80ce4 JSC::BlockAllocator::blockFreeingThreadMain() + 88
5   JavaScriptCore                  0x2ef7e3a8 WTF::wtfThreadEntryPoint(void*) + 12
6   libsystem_pthread.dylib         0x38977c1a _pthread_body + 138
7   libsystem_pthread.dylib         0x38977b8a _pthread_start + 98
8   libsystem_pthread.dylib         0x38975c8c thread_start + 4

Thread 0 crashed with ARM Thread State (32-bit):
    r0: 0x00000000    r1: 0x00000000      r2: 0x00362ac4      r3: 0x000000b6
    r4: 0x00362ac4    r5: 0x00000000      r6: 0x145c97b0      r7: 0x27d3d364
    r8: 0x1456eb50    r9: 0x00000fff     r10: 0x145c97b0     r11: 0x00362ac0
    ip: 0x3a5431d0    sp: 0x27d3d354      lr: 0x00334183      pc: 0x003347d0
  cpsr: 0x60000030

1 个答案:

答案 0 :(得分:1)

pathForResource()函数返回String?,表示(因为它是可选的),可能无法返回任何值。我猜测该方法正在返回nil,但由于您使用let语句对其进行了分配,因此应用程序崩溃了。

我有点惊讶它直接在那条线上坠毁了。您应该可以使用nil关键字指定let。在任何情况下,如果值为nil,当您强行打开可选项时,您的下一行肯定会遇到崩溃:

var sceneData = NSData.dataWithContentsOfFile(path!, options: .DataReadingMappedIfSafe, error: nil)
                                                  ^ here

试试这个:

if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") {
    /* ... (your code using path) ... */
} else {
    NSLog("Unable to locate path for resource: \(file)")
}

我有一种感觉,你会在发布时看到NSLog()输出。