ios版本程序真机安装后三天后闪退

ios版本程序真机安装后三天后闪退,头几天运行都正常,三天左右的时候启动闪退。

程序用到了localstorage。

通过查看itune同步到到mac上crash日志,看到:
Thread 0 crashed with ARM Thread State (64-bit):
x0: 0x70d6ae089769856f x1: 0x48d0d74f974658b6 x2: 0x0000000000000008 x3: 0x000000000000000e
x4: 0x000000012e8000c0 x5: 0x0000000000000018 x6: 0x000000016fd3c508 x7: 0x000000000000016e
x8: 0x0000000000000b48 x9: 0x00000001011fbbd0 x10: 0x0000000000000b48 x11: 0x0000000000000008
x12: 0x0000f5000000f500 x13: 0x000000000000f500 x14: 0xffffffffffffc000 x15: 0x0000000000003fff
x16: 0x00000001827bd64c x17: 0x0000000000000000 x18: 0x0000000000000000 x19: 0x0000000000000000
x20: 0x00000001a0c25b80 x21: 0x0000000101c34010 x22: 0x0000000000000000 x23: 0x0000000000000008
x24: 0x00000001a0c27000 x25: 0x00000001a0c27178 x26: 0x000000000000000b x27: 0x000000000000000a
x28: 0x0000000000000002 fp: 0x000000016fd3e140 lr: 0x00000001007aadcc
sp: 0x000000016fd3df70 pc: 0x00000001007aaec8 cpsr: 0x20000000

为什么程序开始几天运行没有错误,运行几天后才报错呢?
这个错误日志看不懂啊,还有什么好的查看手机上运行的app闪退错误的方式么?

symbolicatecrash这个工具可以把日志中的地址替换成代码相应位置。

错误通过symbolicatecrash命令分析如下,好几个ios真机(iphone5s,iphone6,iphone 6plus,ipad)运行了几天后都报这个错误,闪退后,无法启动:
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 mql-mobile 0x00000001007ceec8 std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<void*, js_proxy*>, void*>> std::__1::__hash_table<std::__1::__hash_value_type<void, js_proxy*>, std::__1::__unordered_map_hasher<void*, std::__1::__hash_value_type<void*, js_proxy*>, std::__1::hash<void*>, true>, std::__1::__unordered_map_equal<void*, std::__1::__hash_value_type<void*, js_proxy*>, std::__1::equal_to<void*>, true>, std::__1::allocator<std::__1::__hash_value_type<void*, js_proxy*> > >::find<void*>(void* const&) (__hash_table:2017)
1 mql-mobile 0x00000001007cedcc std::__1::__hash_iterator<std::__1::__hash_node<std::__1::__hash_value_type<void*, js_proxy*>, void*>> std::__1::__hash_table<std::__1::__hash_value_type<void, js_proxy*>, std::__1::__unordered_map_hasher<void*, std::__1::__hash_value_type<void*, js_proxy*>, std::__1::hash<void*>, true>, std::__1::__unordered_map_equal<void*, std::__1::__hash_value_type<void*, js_proxy*>, std::__1::equal_to<void*>, true>, std::__1::allocator<std::__1::__hash_value_type<void*, js_proxy*> > >::find<void*>(void* const&) (__hash_table:2012)
2 mql-mobile 0x00000001007aec04 jsb_get_native_proxy(void*) (ScriptingCore.cpp:2011)
3 mql-mobile 0x00000001007b4b94 ScriptingCore::removeScriptObjectByObject(cocos2d::Ref*) (ScriptingCore.cpp:943)
4 mql-mobile 0x0000000100ea4018 cocos2d::Ref::~Ref() (CCRef.cpp:71)
5 mql-mobile 0x00000001007c46a4 SimpleRunLoop::~SimpleRunLoop() (ScriptingCore.h:51)
6 mql-mobile 0x00000001007c4630 SimpleRunLoop::~SimpleRunLoop() (ScriptingCore.h:51)
7 mql-mobile 0x00000001007c4664 SimpleRunLoop::~SimpleRunLoop() (ScriptingCore.h:51)
8 mql-mobile 0x00000001007b3f64 ScriptingCore::cleanup() (ScriptingCore.cpp:848)
9 mql-mobile 0x00000001007b4574 ScriptingCore::~ScriptingCore() (ScriptingCore.cpp:821)
10 mql-mobile 0x00000001007b465c ScriptingCore::~ScriptingCore() (ScriptingCore.cpp:823)
11 mql-mobile 0x00000001007b4690 ScriptingCore::~ScriptingCore() (ScriptingCore.cpp:820)
12 mql-mobile 0x0000000100e7edb4 cocos2d::ScriptEngineManager::removeScriptEngine() (CCScriptSupport.cpp:145)
13 mql-mobile 0x0000000100e7ed50 cocos2d::ScriptEngineManager::~ScriptEngineManager() (CCScriptSupport.cpp:129)
14 mql-mobile 0x0000000100e7ede8 cocos2d::ScriptEngineManager::~ScriptEngineManager() (CCScriptSupport.cpp:130)
15 mql-mobile 0x0000000100e7ef58 cocos2d::ScriptEngineManager::destroyInstance() (CCScriptSupport.cpp:163)
16 mql-mobile 0x00000001000ea360 AppDelegate::~AppDelegate() (AppDelegate.mm:20)
17 mql-mobile 0x00000001000ea3c0 AppDelegate::~AppDelegate() (AppDelegate.mm:21)
18 libsystem_c.dylib 0x00000001815629f8 __cxa_finalize_ranges + 428
19 libsystem_c.dylib 0x000000018150d364 exit + 24
20 UIKit 0x0000000186c3d338 +[_UIAlertManager hideAlertsForTermination] + 0
21 UIKit 0x0000000186e5bff8 __102-[UIApplication _handleApplicationDeactivationWithScene:shouldForceExit:transitionContext:completion:]_block_invoke2017 + 796
22 UIKit 0x0000000186e5f0c8 _runAfterCACommitDeferredBlocks + 292
23 UIKit 0x0000000186e6ca80 _cleanUpAfterCAFlushAndRunDeferredBlocks + 92
24 UIKit 0x0000000186b9e5a4 _afterCACommitHandler + 96
25 CoreFoundation 0x0000000181a0c728 CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION + 32
26 CoreFoundation 0x0000000181a0a4cc __CFRunLoopDoObservers + 372
27 CoreFoundation 0x0000000181a0a8fc __CFRunLoopRun + 928
28 CoreFoundation 0x0000000181934c50 CFRunLoopRunSpecific + 384
29 GraphicsServices 0x000000018321c088 GSEventRunModal + 180
30 UIKit 0x0000000186c16088 UIApplicationMain + 204
31 mql-mobile 0x00000001000eabdc main (main.m:8)
32 libdyld.dylib 0x00000001814d28b8 start + 4

为什么启动的时候,调用了~AppDelegate

从新安装后能不能正常运行, 如果可以的话, 是不是根证书被revoke了。

原因应该是某个 NSNotification 的 handler 没有被取消导致的,我简单扫了一下,你可以尝试把 frameworks/cocos2d-x/cocos/audio/apple/AudioEngine-inl.mm 中的下面这段代码:

[[NSNotificationCenter defaultCenter] removeObserver:self name:AVAudioSessionInterruptionNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil];

改成:

[[NSNotificationCenter defaultCenter] removeObserver:self];

恩您说的有道理,证书这几天确实revoke过,也想到这了,但之前用的免费的单机安装账号,也报这个错,就没再多想。

感谢大神,我试试看,还得监测几天

如果是证书问题也麻烦在这个帖子里面回复一下

恩呢,我多观察几天,分阶段检测,稳定后回帖子回复:)

应该是apple的development证书invalid的原因。这些天没再发生。