Приложение «Мой iPhone» падает при загрузке до завершения AppDelegate Загрузка - PullRequest
4 голосов
/ 27 марта 2012

Итак, у меня есть потрясающее приложение, которое отлично работает на симуляторе или при подключенном устройстве.

И затем, если я создам IPA и разверну его на своем устройстве, или использую TestFlight, илидаже представить в App Store.Приложение будет зависать в большинстве случаев, когда я пытаюсь его запустить.

Отчеты о сбоях, даже если они не символизированы, не дают мне никакой информации.

Я использовал TestFlight, чтобы он могпомогите мне выяснить, где происходит сбой приложения, но приложение вылетает до запуска TestFlight.

Вот мой код (main.m):

#import <UIKit/UIKit.h>
#import "version3contentAppDelegate.h"

int main(int argc, char *argv[]) {

    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([version3contentAppDelegate class]));
    }
}

и начало version3contentAppDelegate.m:

#import "TestFlight.h"
#import "version3contentAppDelegate.h"
#import "RootTableViewController.h"
#import "AppsFeedTableViewController.h"
#import "AboutShmoopModalViewController.h"

@implementation version3contentAppDelegate

@synthesize window, shmoopCoreData, tabBarController;



#pragma mark -
#pragma mark Application lifecycle

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    NSLog(@"applicationDidFinishLaunching");

    [TestFlight takeOff:@"3f3618576288d96d598646d060a4f26a_NzUyMjEyMDEyLTAzLTI2IDE3OjIxOjQzLjgyNzQwNg"];
...

Как видно, код TestFlight находится в начале didFinishLaunching.Это означает, что если после этого произойдет сбой, у меня будет отчет о сбое на TestFlight, которого у меня нет.

Кто-нибудь может понять, почему это происходит?Проект изначально разрабатывался на старом xcode для старого iphone, в настоящее время это проект xcode 3.Но я программирую это на XCode 4.3 с iOS 5.1 на устройствах.

Ответы [ 4 ]

6 голосов
/ 27 марта 2012

Если на вашем устройстве произойдет сбой, у вас будет журнал сбоя.

Во-вторых, по моему опыту, основная причина сбоев в работе приложения: didFinishLaunchingWithOptions: связана с загрузкой ресурсов, загрузка которых занимает слишком много времени.

В iOS есть сторожевой таймер, который наблюдает за приложениями и убивает их, если для выполнения определенных задач требуется слишком много времени. Загрузка, выгрузка и т. Д. Обычно это пара секунд, и если они занимают больше времени, таймер убивает их, предполагая, что они зависли.

Этот таймер отключен по причинам отладки в симуляторе, поэтому эти сбои появляются только во время реального тестирования устройства.

Как только вы получили журнал сбоев с локального устройства, проверьте указанный код, если он равен 0x8badf00d, то это таймер сторожевого устройства, убивающий ваше приложение. Обратите внимание на код ошибки 8-bad-food: -)

Затем вам нужно посмотреть на свой код и переместиться как можно больше в фоновый поток, чтобы метод didFinishLaunchingWithOptions: мог завершиться как можно скорее.

2 голосов
/ 07 сентября 2012

Это может быть сбой в самом запуске TestFlight - я просто потратил довольно много времени, чтобы отследить очень похожую проблему, когда тестовое развертывание AdHoc было случайным, иногда сбой при открытии, и это была, в частности, строка [TestFlight takeOff:...], в которой backtrace показал, что он падает.

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

1 голос
/ 27 марта 2012

Согласно вашему запросу, вот мой комментарий:

Он попадает в didFinishLaunching, если показывает заставку. Я заметил, что вы не используете ARC, хотя. Может быть, вы чего-то переоцениваете? Рефакторинг вашего проекта и посмотреть, поможет ли это

0 голосов
/ 21 апреля 2015

Это проблема с Xcode. Если вы не используете автоматический макет и класс размера, удалите файл Xib запуска. Сбой будет решен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...