user1459524
user1459524

Reputation: 3603

Cocos2D v2.1 and arm64 crash on iPad Air despite no compiler warnings

I'm posting here in hope for advice from more experienced programmers (in general & with Cocos2D specifically).

I have an old-ish project that is using Cocos2D v2.1 in a couple of places, otherwise it's standard UIKit. I updated it to be compliant with arm64, or so I thought, and managed to remove any compiler warnings, and run the app successfully on the simulator. However, I just got a bug report form an iPad Air user that the Cocos2d portion of the app is crashing.

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000010
Triggered by Thread:  0

Thread 0 Crashed:
0   libobjc.A.dylib                   0x00000001995101d0 0x1994f8000 + 98768
1                     0x000000010014e820 -[CCTimer update:] + 152
2                     0x0000000100152140 -[CCScheduler update:] + 420
3                      0x000000010016ab30 -[CCDirectorIOS drawScene] + 172

Like I say, there are no compiler warnings and it all works on the simulator, so I'm kinda stuck as to how to fix it. I know that the usual two options would be to 1. remove arm64 2. upgrade to Cocos2D v3.0

However, I use Cocos2D only for a tiny portion of the app, so I was hoping that perhaps I am missing a simple fix. I'm pretty inexperienced with Cocos2D and debugging in general, so I'm hoping for some advice if this is a lost cause and I should better spend my time on one of the other 2 options, or perhaps there is something simple that I can tweak that I am missing right now. I did browse through the CCTimer update: methods, and the only thing that stood out were a few floats in the code, that I know can be problematic between 32/64 bit, but without a compiler warning I am at a loss.

UPDATE

So it gets mysteriouser and mysteriouser. I bought a brand new iPad Air to test this locally instead of on the simulator, and... it works. No crashes. Does the user perhaps simply have a defective device? I noticed that the Exception is thrown at KERN_INVALID_ADDRESS at 0x0000000000000010 which looks somewhat odd. Most of similar crash reports I've seen online have entirely different addresses that look much more random.

UPDATE 2

More mysteries. While the local version works on the device (run via XCode), the actually downloaded app from the AppStore does crash! I was able to capture some more info about it from the Device Logs:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000010
Triggered by Thread:  0

Thread 0 Crashed:
0   libobjc.A.dylib                 0x0000000196c041d0 objc_msgSend + 16
1                   0x00000001001da820 -[CCTimer update:] + 152
2                   0x00000001001de140 -[CCScheduler update:] + 420
3                   0x00000001001f6b30 -[CCDirectorIOS drawScene] + 172
4   QuartzCore                      0x000000018cf40cb8 CA::Display::DisplayLinkItem::dispatch() + 32
5   QuartzCore                      0x000000018cf40ac4 CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 296
6   IOKit                           0x000000018b23be70 IODispatchCalloutFromCFMessage + 360
7   CoreFoundation                  0x000000018a2ec8dc __CFMachPortPerform + 188
8   CoreFoundation                  0x000000018a2fae8c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
9   CoreFoundation                  0x000000018a2fadec __CFRunLoopDoSource1 + 440
10  CoreFoundation                  0x000000018a2f9010 __CFRunLoopRun + 1616
11  CoreFoundation                  0x000000018a239c1c CFRunLoopRunSpecific + 448
12  GraphicsServices                0x000000018fec9c08 GSEventRunModal + 164
13  UIKit                           0x000000018d36afd8 UIApplicationMain + 1152
14                  0x00000001000f4994 main (main.m:16)
15  libdyld.dylib                   0x00000001971e7a9c start + 0

Thread 1:
0   libsystem_kernel.dylib          0x00000001972c9aa8 kevent64 + 8
1   libdispatch.dylib               0x00000001971cd998 _dispatch_mgr_thread + 48

Thread 2:
0   libsystem_kernel.dylib          0x00000001972c9ca0 mach_msg_trap + 8
1   CoreFoundation                  0x000000018a2fab70 __CFRunLoopServiceMachPort + 180
2   CoreFoundation                  0x000000018a2f8d00 __CFRunLoopRun + 832
3   CoreFoundation                  0x000000018a239c1c CFRunLoopRunSpecific + 448
4   AudioToolbox                    0x0000000189aedabc GenericRunLoopThread::Entry(void*) + 156
5   AudioToolbox                    0x0000000189ade278 CAPThread::Entry(CAPThread*) + 136
6   libsystem_pthread.dylib         0x0000000197363e18 _pthread_body + 164
7   libsystem_pthread.dylib         0x0000000197363d70 _pthread_start + 136
8   libsystem_pthread.dylib         0x0000000197361550 thread_start + 0

Thread 3:
0   libsystem_kernel.dylib          0x00000001972e2e74 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000197361548 start_wqthread + 0

Thread 4:
0   libsystem_kernel.dylib          0x00000001972e2e74 __workq_kernreturn + 8
1   libsystem_pthread.dylib         0x0000000197361548 start_wqthread + 0

Baffled.

Upvotes: 0

Views: 663

Answers (1)

CodeSmile
CodeSmile

Reputation: 64478

Definitely remove arm64 from your project build settings (architecture, valid architectures) because cocos2d-iphone prior to v3 is not compatible with 64-bit builds even if you do not get compiler warnings/errors. There are some nasty potential issues hidden away.

If you do not receive compiler warnings I think it's likely that the 32/64 bit compatibility issues warnings are simply not enabled in your project/target (specifically the cocos2d-iphone target if it's in a separate target). In stock v2.1 of cocos2d there should actually be plenty of such warnings, though it may depend on your iOS Deployment target (for a test try setting it to iOS 7.1 which will give you the most warnings, including many "deprecation" warnings).

You can also perform an Analyze build to point out potential issues (and some false alerts, too).

Upvotes: 1

Related Questions