Вышедшее приложение показывает пустой экран, но не в отладчике - PullRequest
3 голосов
/ 05 марта 2012

У меня есть это приложение, изначально написанное для iOS 2.x. Недавно мне нужно было добавить небольшую функцию, и я был вынужден сделать приложение, которое без проблем выдержало бы множество обновлений iOS, совместимо с iOS5. Только после тестирования и отправки приложения я получил отчеты от 300.000+ пользователей, что приложение не работает на iPod Touch второго поколения с iOS 4.2.1. Я тестировал на iPod touch первого поколения, и он работал нормально. Интересно, что теперь, когда я наконец нашел второй iPod, в режиме отладки на устройстве, приложение просто работает нормально. Только когда я синхронизирую AdHoc через iTunes, у меня появляются те же симптомы, что и у тех, кто загружал приложение через App Store: UIImageView загружает изображение, но через несколько секунд изображение просто исчезает, оставляя меня с пустым экраном.

Каков наилучший способ выяснить, где в коде что-то идет не так?

Спасибо за вашу помощь

ОБНОВЛЕНИЕ: Я попросил Apple помочь мне и здесь. Это пока что соответствующая часть корреспонденции:

"Обычно проблемы, которые появляются только в магазине или во время просмотра, вызваны различиями в том, как Xcode сконфигурирован для сборки вашего приложения в Debug vs Release (или конфигурации сборки, используемой для отправки в хранилище).

Чтобы убедиться, что вы тестируете точную сборку приложения, отправляемого в App Store, вы можете создать заархивированную сборку, которую можно тестировать и отправлять. В Xcode 4 Product -> Archive архивирует сборку вашего приложения в окне Organizer.

Вы можете протестировать эту сборку, используя «Совместное использование…» с самим собой в качестве IPA, из окна Organizer в Xcode и затем установив IPA с помощью iTunes.

(Только к вашему сведению: «Поделиться…». Заархивированная сборка, которую вы устанавливаете с помощью iTunes, является предпочтительным способом тестирования приложения. XCode устанавливает приложения немного по-другому, чем App Store. Это хорошо во время разработки, потому что это быстрее. Но для окончательного тестирования установка через iTunes ближе всего к тому, что испытает пользователь.) "

и

«Поэтому я бы посоветовал размещать утверждения в тех местах вашего кода, которые вы« считаете »подозрительными. Поместите несколько операторов NSLog в ваш код, отслеживая прогресс и, возможно, выводя информацию, такую ​​как размер кадра вашего UIImageView и т. Д.» *

Хотя я понимаю, что это, по-видимому, единственный путь, я немного шокирован значением всего этого:

Как разработчик, вы должны владеть и тестировать любую комбинацию устройства и операционной системы или просто бросить ее своим клиентам и посмотреть, что пойдет не так.

Ответы [ 3 ]

1 голос
/ 25 мая 2012

Я только что столкнулся с подобной проблемой. Оказывается, я смешивал и сопоставлял объекты NSManagedObjectContext. Я понятия не имею, почему это работало в отладчике и сломалось, когда я запустился с трамплина.

Мне удалось отладить приложение, которое я запустил в симуляторе, используя «Product-> Attach to Process» в Xcode.

Надеюсь, это поможет кому-то еще.

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

Я не помню где, но я слышал об этой проблеме с UIImageView раньше.Насколько я помню, проблема была в том, что они создавали UIImage в фоновом потоке.Поскольку NSLog() влияет на многопоточность, я могу представить, что в режиме отладки с использованием журналов можно уменьшить любые нежелательные эффекты многопоточности.Однако в режиме выпуска операторы журнала удаляются, может произойти ошибка.

0 голосов
/ 14 января 2013

У меня была похожая проблема: при разработке работает нормально, но ipa-файл Product / Archive / Distribute / Ad Hoc работает неправильно. Благодаря @CornPuff я начал копаться в своем материале CoreData и решил это:

У меня был такой код:

dbMethods * myDbMethods = [[dbMethods alloc] init];
aUser *local_db_user = [myDbMethods getTopRecord];

if (local_db_user != nil) {

    lbl_user_name.text = [NSString stringWithFormat:@"Welcome %@", local_db_user.user_name];

В разработке, которая всегда ставила на этикетку что-то вроде Welcome John Smith. В архивном файле всегда ставьте Welcome (null) в метку. ПРИМЕЧАНИЕ. NSManagedContextObject был создан в методе getTopRecord.

Мне пришлось создать объект NSManagedObjectContext, myDb, в методе, где мне был нужен мой aUser; отправьте это методу, который я сейчас вызвал, getTopRecordSafe

NSManagedObjectContext *myDb = [[[dbManager alloc] init] getManagedObjectContext];
dbMethods * myDbMethods = [[dbMethods alloc] init];
aUser *local_db_user = [myDbMethods getTopRecordSafe: myDb];

if (local_db_user != nil) {
    lbl_user_name.text = [NSString stringWithFormat:@"Welcome %@", local_db_user.user_name];

Наконец, я нашел эту статью полезной для понимания (?), Почему это происходит. Objective-C - это, конечно, язык C.

Если кто-то знает о флажке в XCode, или AppCode Jetbrain, или любой другой iOS IDE, который говорит Создайте и запустите тот же файл, который вы будете отправлять в Apple, здесь в разработке , пожалуйста, дайте мы знаем. :-)

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