Подтвердить что ты не робот

Отладка приложения iOS при первом запуске

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

Я не могу запустить приложение с Xcode, потому что он перезапишет существующее приложение и не инициирует обновление.

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

Есть ли какой-то способ снять это, что мне не хватает?

4b9b3361

Ответ 1

Используйте параметр "Подождите, чтобы MyApp.app был запущен".

В Xcode удерживайте клавишу Option и выберите Product- > Run... (эллипсы добавляются, когда вы удерживаете Option down). Это вызовет редактор схемы, если выбрана схема "Выполнить". Нажмите вкладку "Информация", и на появившейся панели "Информация" вы увидите группу радиостанций с надписью "Запуск" с двумя вариантами: "Автоматически" и "Подождите, пока MyApp.app запустится". Если вы выберете второй вариант, Xcode запустит отладчик и дождитесь запуска приложения вручную. Вы можете установить точку останова в начале кода, который вы хотите отлаживать, и отладчик остановится там.

Reset приложение к его предыдущему состоянию.

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

Unit test.

Один отличный способ отладки кода, который имеет дело с состояниями приложений, которые трудно воссоздать, - это писать модульные тесты. В тесте вы можете создать любое состояние, которое вы хотите. Вы даже можете создавать состояния приложений, которые невозможно воссоздать в приложении. И вы можете отлаживать этот код снова и снова. Как и предыдущее решение, для написания кода требуется немного больше времени, но вы сохраните столько времени на каждой итерации цикла отладки, что это стоит того. Еще лучше, вы можете добавить тест в свой процесс сборки, чтобы гарантировать, что функциональность не будет прерываться позже.

Ответ 2

У меня также есть код, который я запускаю только при обновлении, у меня есть этот метод, ниже которого я использую в конце applicationDidFinishLaunching. Я тоже могу отлаживать это:

- (void) determineWhetherToForceSync {
    NSString *currentVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];    
    NSString *savedVersionKey = @"savedVersionKey";
    NSString *savedVersion = [[NSUserDefaults standardUserDefaults] valueForKey:savedVersionKey];
    if (!savedVersion) {
        //This is a fresh install....

    } else {
        //They have a saved version, so check if it the same as current version
        if (![currentVersion isEqualToString:savedVersion]) { //They have done an upgrade            
            //This is an update

        } //.... else they are starting the app on a second attempt
    }

    //Save the current version
    [[NSUserDefaults standardUserDefaults] setObject:currentVersion forKey:savedVersionKey]; 
}

Чтобы повторно протестировать, удалите приложение и переустановите его. Или измените номер своей версии.