2013-04-02 3 views
1

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

Когда я создаю и запускаю его в режиме отладки (на мой iPhone 5), все работает отлично.

Однако, когда я архивирую его и загружаю его в TestFlight, а затем загружаю и устанавливаю на тот же iPhone 5, то часть синхронизации не работает.

Это не сбой или что-то еще, он просто не запускает эту часть синхронизации.

Глупо, что это строка кода внутри одной функции, которая не работает. Все остальное в этой функции запускается.

Я понятия не имею, с чего начать искать это.

EDIT

С помощью Миндовга я нашел, почему и какой бит кода не был запущен.

Функция ...

- (void)uploadData 
{ 
    NSLog(@"pushing photos"); 
    for (StoredImage *storedImage in self.recordArray) { 
     NSURL *url = [self urlForImageUpload:storedImage]; 

     if (url == nil) { 
      continue; 
     } 

     ImageUploadOperation *uploader = [[OJFImageUploadOperation alloc] init]; 
     uploader.image = storedImage.image; 
     uploader.url = url; 
     [self.recordQueue addOperation:uploader]; 
    } 
} 

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

Когда он входит, я вижу, что в массиве есть один объект и он входит в цикл. Но затем он полностью пропускает первую строку NSURL *url = [self urlForImageUpload:storedImage]; и идет до конца. Таким образом, загрузка никогда не начинается и переходит на следующий элемент.

+0

Моя единственная мысль - если вызов внутри метода NSAssert, то он превратится в no-op. – borrrden

+0

У вас есть привилегия для выполнения такой операции? –

+0

Я не использую NSAssert в этот момент. Я просто добавляю некоторые контрольные точки TestFlight, чтобы узнать, какой именно бит не запускается. – Fogmeister

ответ

9

релиза конфигурации по умолчанию использует различные оптимизации коды, чем конфигурации отладки, поэтому некоторые строки кода могут быть оптимизированы и пропускается

Вы можете проверить/изменить конфигурацию на Target -> Build Settings -> Поиск уровня оптимизации

+0

Спасибо! Теперь я смог реплицировать его, изменив уровень оптимизации отладки на «Самый быстрый». Однако я понятия не имею, почему это имеет эффект? – Fogmeister

+0

Для чего нужна оптимизация. Если компилятор считает, что определенная строка кодов не производит никакого вывода и не имеет никакого влияния на другие части, она пропускает это. Я думаю, что другие могут подробно остановиться на этой теме. – Mindaugas

+0

А, еще раз спасибо. Хорошо, у меня был более глубокий взгляд, и теперь я знаю (с вашей помощью), какой бит не запускается. Я добавлю к вопросу. – Fogmeister

Смежные вопросы