所以我在这个非常奇怪和恼人的问题上被困了几天。所以我有一个应用程序,我发布到ios应用商店,我最近回去并为应用程序添加了一些额外的功能。我没有触摸应用程序的核心只是添加了诸如twitter,facebook,应用程序购买和谷歌admob(基于完整版本的免费版本)。所以这里的事情变得奇怪。我测试了我的更新我做了一个adhoc发布版本并在我的iphone 3gs,4s,ipad 2上测试 - 没有任何问题。我提交给苹果他们批准了更新,它已经发布。我更新了应用程序并尝试运行它并在启动画面后立即崩溃(此处没有任何更改)。我的项目使用cocos2dx框架(版本cocos2d-2.0-x-2.0.4 @ 2012年11月2日),我使用cocosbuilder(2.1)。我查看了日志,它似乎是CCBReader :: readFloat()函数内部的一个未对齐问题。我发现这里有一个解决方法:https://github.com/DarraghCoy/cocos2d-x/commit/34b31fd754778f815fcac108089e3fe015e2e2b9。
所以我继续修改我的默认情况: float CCBReader :: readFloat(){ unsigned char type = this-> readByte();
switch (type) {
case kCCBFloat0:
return 0;
case kCCBFloat1:
return 1;
case kCCBFloatMinus1:
return -1;
case kCCBFloat05:
return 0.5f;
case kCCBFloatInteger:
return (float)this->readInt(true);
default:
{
/* using a memcpy since the compiler isn't
* doing the float ptr math correctly on device.
* TODO still applies in C++ ? */
float * pF = (float*)(this->mBytes + this->mCurrentByte);
float f = 0;
memcpy( &f, pF, sizeof(float));
this->mCurrentByte += 4;
return f;
}
}
}
对此:
float CCBReader::readFloat() {
unsigned char type = this->readByte();
switch (type) {
case kCCBFloat0:
return 0;
case kCCBFloat1:
return 1;
case kCCBFloatMinus1:
return -1;
case kCCBFloat05:
return 0.5f;
case kCCBFloatInteger:
return (float)this->readInt(true);
default:
{
/* using a memcpy since the compiler isn't
* doing the float ptr math correctly on device.
* TODO still applies in C++ ? */
float * pF = (float*)(this->mBytes + this->mCurrentByte);
float f = 0;
memcpy((void*) &f, (const void*) pF, sizeof(float));
this->mCurrentByte += sizeof(float);
return f;
}
}
}
再次在设备上测试版本构建没有问题。我向苹果提交了此修复程序,并请求加急审核,以便应用程序运行而不是崩溃,并在1天内获得苹果批准并被运出。我更新到新版本的发布,并再次崩溃。
以下是崩溃日志的副本:
Incident Identifier: DCFEA2A4-9707-4FF7-A4B7-26CF61B4A73F
CrashReporter Key: b91e2f134184158618753244f837ff2ac5114f0d
Hardware Model: iPhone4,1
Process: GAMEAPP [848]
Path: /var/mobile/Applications/F860F02C-3D16-4995-A19F-CE036200209F/GAMEAPP.app/GAMEAPP
Identifier: GAMEAPP
Version: ??? (???)
Code Type: ARM (Native)
Parent Process: launchd [1]
Date/Time: 2013-03-01 19:42:44.987 -0500
OS Version: iOS 6.1.2 (10B146)
Report Version: 104
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: EXC_ARM_DA_ALIGN at 0x1f0807c9
Crashed Thread: 0
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 GAMEAPP 0x000f971c cocos2d::extension::CCBReader::readFloat() (CCBReader.cpp:422)
1 GAMEAPP 0x000f9e52 cocos2d::extension::CCBReader::readKeyframe(int) (CCBReader.cpp:648)
2 GAMEAPP 0x000f99ae cocos2d::extension::CCBReader::readNodeGraph(cocos2d::CCNode*) (CCBReader.cpp:509)
3 GAMEAPP 0x000f9c20 cocos2d::extension::CCBReader::readNodeGraph(cocos2d::CCNode*) (CCBReader.cpp:586)
4 GAMEAPP 0x000f9342 cocos2d::extension::CCBReader::readFileWithCleanUp(bool) (CCBReader.cpp:689)
5 GAMEAPP 0x000f92ec cocos2d::extension::CCBReader::readNodeGraphFromData(cocos2d::extension::CCData*, cocos2d::CCObject*, cocos2d::CCSize const&, cocos2d::extension::CCBAnimationManager**) (CCBReader.cpp:230)
6 GAMEAPP 0x000f91aa cocos2d::extension::CCBReader::readNodeGraphFromFile(char const*, cocos2d::CCObject*, cocos2d::CCSize const&, cocos2d::extension::CCBAnimationManager**) (CCBReader.cpp:213)
7 GAMEAPP 0x000f90a4 cocos2d::extension::CCBReader::readNodeGraphFromFile(char const*, cocos2d::CCObject*) (CCBReader.cpp:192)
8 GAMEAPP 0x00119b50 IntroScene::init() (IntroScene.cpp:55)
9 GAMEAPP 0x00119ca8 IntroScene::create() (IntroScene.h:19)
10 GAMEAPP 0x00119a7c IntroScene::scene() (IntroScene.cpp:22)
11 GAMEAPP 0x00110290 AppDelegate::applicationDidFinishLaunching() (AppDelegate.cpp:144)
12 GAMEAPP 0x000dab94 cocos2d::CCApplication::run() (CCApplication.mm:50)
13 GAMEAPP 0x000b6610 -[AppController application:didFinishLaunchingWithOptions:] (AppController.mm:76)
14 UIKit 0x36522ad4 -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 248
15 UIKit 0x3652265e -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1186
16 UIKit 0x3651a846 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 694
17 UIKit 0x364c2c34 -[UIApplication handleEvent:withNewEvent:] + 1000
18 UIKit 0x364c26c8 -[UIApplication sendEvent:] + 68
19 UIKit 0x364c2116 _UIApplicationHandleEvent + 6150
20 GraphicsServices 0x381d85a0 _PurpleEventCallback + 588
21 GraphicsServices 0x381d81ce PurpleEventCallback + 30
22 CoreFoundation 0x3468f170 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 32
23 CoreFoundation 0x3468f112 __CFRunLoopDoSource1 + 134
24 CoreFoundation 0x3468df94 __CFRunLoopRun + 1380
25 CoreFoundation 0x34600eb8 CFRunLoopRunSpecific + 352
26 CoreFoundation 0x34600d44 CFRunLoopRunInMode + 100
27 UIKit 0x36519480 -[UIApplication _run] + 664
28 UIKit 0x365162fc UIApplicationMain + 1116
29 GAMEAPP 0x000b6c22 main (main.m:14)
30 GAMEAPP 0x000b6344 start + 36
Thread 1:
0 libsystem_kernel.dylib 0x3c8d5d98 __workq_kernreturn + 8
1 libsystem_c.dylib 0x3c823cf6 _pthread_workq_return + 14
2 libsystem_c.dylib 0x3c823a12 _pthread_wqthread + 362
3 libsystem_c.dylib 0x3c8238a0 start_wqthread + 4
Thread 2 name: Dispatch queue: com.apple.libdispatch-manager
Thread 2:
0 libsystem_kernel.dylib 0x3c8c5648 kevent64 + 24
1 libdispatch.dylib 0x3c7f5974 _dispatch_mgr_invoke + 792
2 libdispatch.dylib 0x3c7f5654 _dispatch_mgr_thread$VARIANT$mp + 32
Thread 3:
0 libsystem_kernel.dylib 0x3c8d5d98 __workq_kernreturn + 8
1 libsystem_c.dylib 0x3c823cf6 _pthread_workq_return + 14
2 libsystem_c.dylib 0x3c823a12 _pthread_wqthread + 362
3 libsystem_c.dylib 0x3c8238a0 start_wqthread + 4
Thread 4 name: WebThread
Thread 4:
0 libsystem_kernel.dylib 0x3c8c4eb4 mach_msg_trap + 20
1 libsystem_kernel.dylib 0x3c8c5048 mach_msg + 36
2 CoreFoundation 0x3468f040 __CFRunLoopServiceMachPort + 124
3 CoreFoundation 0x3468dd9e __CFRunLoopRun + 878
4 CoreFoundation 0x34600eb8 CFRunLoopRunSpecific + 352
5 CoreFoundation 0x34600d44 CFRunLoopRunInMode + 100
6 WebCore 0x3a60a500 RunWebThread(void*) + 440
7 libsystem_c.dylib 0x3c82e30e _pthread_start + 306
8 libsystem_c.dylib 0x3c82e1d4 thread_start + 4
Thread 5 name: AURemoteIO::IOThread
Thread 5:
0 libsystem_kernel.dylib 0x3c8c4eb4 mach_msg_trap + 20
1 libsystem_kernel.dylib 0x3c8c5048 mach_msg + 36
2 AudioToolbox 0x3418391c AURemoteIO::IOThread::Run() + 104
3 AudioToolbox 0x34185c84 AURemoteIO::IOThread::Entry(void*) + 4
4 AudioToolbox 0x340c3882 CAPThread::Entry(CAPThread*) + 294
5 libsystem_c.dylib 0x3c82e30e _pthread_start + 306
6 libsystem_c.dylib 0x3c82e1d4 thread_start + 4
Thread 0 crashed with ARM Thread State (32-bit):
r0: 0x1ed49740 r1: 0x1f0807c9 r2: 0x000001cd r3: 0x000001c8
r4: 0x00000004 r5: 0x1ed49740 r6: 0x42480000 r7: 0x2fd4af48
r8: 0xffffffff r9: 0x000001c9 r10: 0x1ed49740 r11: 0x1ed4a8a0
ip: 0x000001c7 sp: 0x2fd4af48 lr: 0x000f9e57 pc: 0x000f971c
cpsr: 0x00000030
Binary Images:
我修改了其他链接器标志以包含-lsqlite3.0和-ObjC(最初它只是-lxml2和-lz)。我的发布版本优化是-Os(最快,最小)。
其他人有这个问题吗?我不知道如何调试这个,因为我无法重复。最后苹果如何批准该应用程序,但它在启动画面后崩溃了?如果我可以猜到它运行的时候它可以运行,也许它会在应用程序批准(不确定)之后扔掉“处理App Store”阶段时被破坏。
谢谢!
答案 0 :(得分:2)
根据你最后的陈述,我的第一反应是Apple声称已解决的'app update bug'尚未完全解决。在更新期间添加的DRM修补程序会在启动时立即崩溃更新的应用程序。 http://www.tuaw.com/2013/03/01/bug-in-latest-evernote-for-ios-update-causes-the-app-to-crash/ https://discussions.apple.com/thread/3389977?start=0&tstart=0 http://www.pcworld.com/article/258827/updated_apps_crashing_heres_what_you_need_to_know.html
有许多与App更新崩溃错误相关的问题。有一些最佳实践或解决方法,Apple没有记录,特别是避免了更新错误。检查一下。如果它不是您的应用程序特定的东西,其中一个可能会为您锻炼。
Updated App Crashing on iPad iPhone app crash immediately after update
答案 1 :(得分:2)
这篇关于CCBReader中EXC_BAD_ACCESS错误的帖子帮助我解决了完全相同的问题: http://www.cocos2d-x.org/boards/6/topics/18183
事实证明,它与CCBReader中的内存未对齐有关,它可以在SIM卡上正常运行,但由于其ARM处理器而在设备上崩溃。
答案 2 :(得分:2)
我知道一种解决方法。编辑方案以构建Debug
而不是Release
,而且似乎没有爆炸。
我也有两次拒绝。特技是我有一个版本(免费)的应用程序传递和另一个(PREMIUM)崩溃。我追了那个差异,并确认了差异。
CCBReader 2.0
调试/发布的副作用可能是优化,正如@ LearnCocos2D所述。
优化解决方法:
为我解决了这个问题。
答案 3 :(得分:0)
我就像“WTF是CCB在那里做什么?” ....无论如何,尝试-O3或根本没有优化。 -Os众所周知会引起微妙的问题,特别是对于cocos2d。有一个原因,为什么-Os不是cocos2d的默认级别(我也相信Xcode模板)。
如果这样可以解决问题,您可以使用此question的答案之一为此文件或函数设置优化级别或禁用优化。
答案 4 :(得分:0)
您正在使用ccbi文件来创建UI,您的游戏会随机崩溃,因为您没有在类的init方法中将引用变量设置为nullptr。
例如我声明了Label * homeLabel;在intorScene.h文件中,在.cpp文件的init方法中,你应该将此变量设置为
homeLabel = nullptr;