Приложение iPhone вылетает при запуске из Xcode, но не из iPhone
У меня есть приложение, которое падает на iPhone, но только когда оно запускается через Xcode.
Я вижу в журнале консоли iPhone, что приложение получает предупреждение о памяти, а затем происходят некоторые странные события, подобные этим:
Sun Jul 11 00:03:43 Matts-iPhone com.apple.launchd[1] (UIKitApplication:com.mycom.myapp[0x3f60][5591]) <Notice>: (UIKitApplication:com.mycom.myapp[0x3f60]) Bug: launchd_core_logic.c:3270 (24132):0
Sun Jul 11 00:03:43 Matts-iPhone com.apple.debugserver-48[5590] <Warning>: 1 [15d6/1403]: error: ::read ( 6, 0x3809f4, 1024 ) => -1 err = Bad file descriptor (0x00000009)
Sun Jul 11 00:03:43 Matts-iPhone com.apple.launchd[1] (UIKitApplication:com.mycom.myapp[0x3f60][5591]) <Notice>: (UIKitApplication:com.mycom.myapp[0x3f60]) Bug: launchd_core_logic.c:2688 (24132):10
Sun Jul 11 00:03:43 Matts-iPhone com.apple.launchd[1] (UIKitApplication:com.mycom.myapp[0x3f60][5591]) <Notice>: (UIKitApplication:com.mycom.myapp[0x3f60]) Working around 5020256. Assuming the job crashed.
Sun Jul 11 00:03:43 Matts-iPhone com.apple.launchd[1] (UIKitApplication:com.mycom.myapp[0x3f60][5591]) <Warning>: (UIKitApplication:com.mycom.myapp[0x3f60]) Job appears to have crashed: Segmentation fault
Sun Jul 11 00:03:43 Matts-iPhone SpringBoard[40] <Warning>: Application 'Phone' exited abnormally with signal 9: Killed
Sun Jul 11 00:03:45 Matts-iPhone SpringBoard[40] <Warning>: Application 'myapp' exited abnormally with signal 11: Segmentation fault
Однако, когда я запускаю приложение с телефона (не через Xcode), оно работает как положено. (Во время запуска появляется предупреждение о памяти. Я знаю, что он работает плотно, но восстанавливается и не падает).
Это особенно затрудняет отладку других проблем.
Я наткнулся на какую-то ошибку iOS?
Есть идеи?
4 ответа
В моем случае оказалось, что я забыл, что у меня все еще была установлена переменная окружения "NSZombiesEnabled", которая увеличивала реальное использование памяти (вызывая сбой) при запуске из Xcode. При запуске непосредственно из Springboard эта переменная среды не была установлена, и приложение использовало намного меньше памяти.
Это очень полезно для отладки... пока вы не исчерпаете память и не забудете, что это там:)
У меня также была эта проблема, и она была вызвана установкой Resupported 4 из Cydia. После того, как я удалил это, мое приложение запустилось отлично.
Это случилось со мной и также было связано с установкой NSZombiesEnabled. В моем случае это было сделано в файле ~/.gdbinit, который я забыл существовать. В Xcode флажок NSZombieEnabled был отключен, и в переменных среды схемы ничего не было установлено, поэтому это сводило меня с ума, пытаясь выяснить проблему. Мораль этой истории - убедиться, что она не установлена в.gdbinit, а также в XCode.
Обычно, когда вы видите сбой на симуляторе, но не на устройстве, или наоборот, это указывает на ошибку библиотеки, которая скомпилирована для одного оборудования, а не для другого.
Однако, если у вас недостаточно памяти, вы, вероятно, видите сбой, вызванный тонкими различиями между кодом, скомпилированным для Intel, и кодом, скомпилированным для ARM. Код Intel, вероятно, просто более чувствителен по некоторым причинам. Та же проблема в конечном итоге возникнет на устройстве, если вы оставите его работающим достаточно долго в условиях ограниченной памяти.