Распространял билд через TestFlight. Специальная сборка отлично работает на iPhone 5, но откроется, а затем вылетит на iPhone 4 и 4s. Если скомпилирован и запущен через Xcode (непосредственно на телефон с профилем подготовки разработчика), сборка будет работать как на iPhone 5, так и на 4s и 4.

Кто-нибудь сталкивался с этим?

1
Eric 8 Фев 2013 в 22:58
Получите логи с телефонов.
 – 
Kevin
8 Фев 2013 в 23:00
Из журнала: не удалось запустить вовремя. Общее затраченное время ЦП (секунды): 22,910 (пользователь 22,910, система 0,000), 57% ЦП Прошедшее время ЦП приложения (секунды): 17,455, 43% ЦП
 – 
Eric
8 Фев 2013 в 23:09
1
Если ваше приложение не запускается (я считаю, что это, по сути, возврат из метода application:DidFinishLaunchingWithOptions:) в течение определенного времени, оно прекращается системой. Либо у вас бесконечный цикл, либо вы слишком много пытаетесь сделать с помощью этого метода. Возможно, у вас есть ошибка, которая влияет только на новые (чистые) установки, попробуйте удалить приложение и повторите попытку на своем телефоне / симуляторе.
 – 
Kevin
8 Фев 2013 в 23:15
Не бесконечен и нормально работает на iPhone 5, кеширует кучу изображений
 – 
Eric
8 Фев 2013 в 23:16
Кеширование кучи изображений, безусловно, могло бы это объяснить. Это займет некоторое время и будет медленнее на старых телефонах. Поместите этот код в отдельный поток (dispatch_async).
 – 
Kevin
8 Фев 2013 в 23:17

1 ответ

Лучший ответ

Первое, что нужно сделать для отладки ошибок testflight (или любых других, если на то пошло), - это получить журнал ошибок, прочитать и понять сообщение об ошибке. В этом случае ошибка:

failed to launch in time

Если ваше приложение не запускается (я считаю, что это, по сути, возврат из метода application:DidFinishLaunchingWithOptions:) в течение определенного времени, оно прекращается системой. Либо у вас бесконечный цикл, либо вы слишком много пытаетесь сделать с помощью этого метода. В этом случае приложение кэширует изображения этим методом, который, очевидно, достаточно быстр, чтобы завершить работу вовремя на iPhone 5, но не раньше. Решение состоит в том, чтобы поставить вызов dispatch_async в очередь (см. Dispatch Queues ), который кэширует изображения в фоновом режиме и быстро возвращается из метода запуска приложения.

1
Kevin 8 Фев 2013 в 23:27
Ваш ответ точен, но в моем конкретном приложении это сложно, потому что мне нужно кэшировать дюжину изображений, которые должны быть доступны немедленно. Я думаю, что HUD нужно заблокировать, чтобы у приложения была возможность полностью запуститься.
 – 
Eric
8 Фев 2013 в 23:32
Откройте экран загрузки и используйте семафор, чтобы дождаться его завершения.
 – 
Kevin
8 Фев 2013 в 23:35
Еще кое-что. Можете ли вы подумать, почему он будет работать напрямую на iPhone 4, а не через TestFLight?
 – 
Eric
9 Фев 2013 в 00:13
Я считаю, что при запуске из XCode тайм-аут увеличивается, чтобы учесть отладчик. Я не думаю, что он совсем отпал, но это возможно.
 – 
Kevin
9 Фев 2013 в 01:32