我的项目,称为OBI,从Xcode启动时工作正常,但是当我创建.ipa
文件时,它会在提供的日志中崩溃。
在项目中没有名称为Mutex
,DelayedPointerDeletionManager
或MemoryManager
的类,所以我无法理解此异常的位置。
Thread 0 Crashed:
0 libsystem_pthread.dylib 0x396b7046 _pthread_mutex_check_init + 14
1 libsystem_pthread.dylib 0x396b6e32 _pthread_mutex_lock + 22
2 OBI 0x02a74f20 Mutex::Lock() (Mutex.cpp:152)
3 OBI 0x02838930 DelayedPointerDeletionManager::AddPointerToMainThreadDealloc(void*, MemLabelId) (Mutex.h:32)
4 OBI 0x028384a4 MemoryManager::Deallocate(void*, MemLabelId) (MemoryManager.cpp:1082)
5 OBI 0x028384e4 operator delete[](void*) (MemoryManager.cpp:114)
6 OBI 0x01d28010 std::locale::locale<boost::filesystem::detail::utf8_codecvt_facet>(std::locale const&, boost::filesystem::detail::utf8_codecvt_facet*) (locale_classes.h:581)
7 OBI 0x01d281c4 ___lldb_unnamed_function148423$$OBI + 232
8 dyld 0x2be5b59e ImageLoaderMachO::doModInitFunctions(ImageLoader::LinkContext const&) + 174
9 dyld 0x2be5b6ac ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&) + 16
10 dyld 0x2be58d34 ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&) + 356
11 dyld 0x2be58b88 ImageLoader::runInitializers(ImageLoader::LinkContext const&, ImageLoader::InitializerTimingList&) + 36
12 dyld 0x2be4fd38 dyld::initializeMainExecutable() + 164
13 dyld 0x2be52ab4 dyld::_main(macho_header const*, unsigned long, int, char const**, char const**, char const**, unsigned long*) + 1748
14 dyld 0x2be4f22a dyldbootstrap::start(macho_header const*, int, char const**, long, macho_header const*, unsigned long*) + 346
15 dyld 0x2be4f064 _dyld_start + 60
编辑,来自控制台的几行。
Oct 16 14:43:18 Sergiys-iPad kernel[0] <Debug>: launchd[9526] Container: /private/var/mobile/Applications/AA46736B-6348-42BA-A8F0-DD63DC535AF6 (sandbox)
Oct 16 14:43:19 Sergiys-iPad ReportCrash[9527] <Notice>: ReportCrash acting against PID 9526
Oct 16 14:43:19 Sergiys-iPad ReportCrash[9527] <Notice>: Formulating crash report for process OBI[9526]
Oct 16 14:43:19 Sergiys-iPad com.apple.launchd[1] (UIKitApplication:com.mycompany.OBIQA[0x14dc][9526]) <Warning>: (UIKitApplication:com.mycompany.OBIQA[0x14dc]) Job appears to have crashed: Segmentation fault: 11
Oct 16 14:43:19 Sergiys-iPad com.apple.launchd[1] (UIKitApplication:com.mycompany.OBIQA[0x14dc]) <Notice>: (UIKitApplication:com.mycompany.OBIQA[0x14dc]) Throttling respawn: Will start in 2147483647 seconds
Oct 16 14:43:19 Sergiys-iPad backboardd[28] <Warning>: Application 'UIKitApplication:com.mycompany.OBIQA[0x14dc]' exited abnormally with signal 11: Segmentation fault: 11
Oct 16 14:43:19 Sergiys-iPad SpringBoard[33] <Warning>: Application 'com.mycompany.OBIQA' has failed to launch too many times. Not relaunching.
Oct 16 14:43:19 Sergiys-iPad ReportCrash[9527] <Notice>: Saved crashreport to /var/mobile/Library/Logs/CrashReporter/OBI_2013-10-16-144319_Sergiys-iPad.plist using uid: 0 gid: 0, synthetic_euid: 501 egid: 0
我会很乐意为你提供任何帮助或指导
修改
最后我找到了导致此异常的原因。我在构建设置中选择了symbol striping
选项,将其从all symbols
更改为debug symbols
后,一切都会变好。
答案 0 :(得分:4)
当iOS将您的类加载到内存中时,这会在动态加载程序中崩溃。此过程的一部分是在实现该方法的任何类上调用+ load。
一种可能性是你在+加载中做了太多工作,并且正在被“未能及时发布”杀死。提供完整的崩溃日志将显示是否是这种情况。
答案 1 :(得分:0)
ImageLoader链接到代码片段(外部框架,库)的加载。你应该确保你所有人都能看到&#34;可见&#34;你的二进制文件。在XCode中构建可以将所有文件放在同一个文件夹中,这样就没有路径问题了,特别是如果你引用第三方框架,你需要确保它们可以被看到&#34;&#34;由主要可执行文件。控制台吐了什么东西?
答案 2 :(得分:0)
从我所看到的内容(如果你展示一些代码,特别是你的applicationDidFinishLaunching方法会有所帮助)看起来你的应用程序需要很长时间才能启动并被操作系统杀死。
应用程序有一定的时间限制来设置根视图控制器并执行任何基本设置。如果花费太长时间,操作系统认为它没有响应并且会杀死它。从Xcode启动时您不会注意到这个问题,因为在附加调试器的情况下启动时会禁用时间限制:请参阅此处https://developer.apple.com/library/ios/qa/qa1592/_index.html
如果您要在app委托中下载图像,我建议您切换到异步方法,也可能从视图控制器处理图像加载将使用图像
编辑:看起来你从控制台得到的错误与Q&amp; A描述的不同,但没有任何代码,我无法帮助更多