Приложение работает в симуляторе и на тестирующем устройстве, но вылетает после загрузки из магазина приложений - PullRequest
1 голос
/ 20 октября 2011

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

Я запустил поток, чтобы найти проблему здесь: Мой сбой приложения после загрузки из appstore Теперь мне нужно решить эту проблему

Проблема, как представляется, заключается в следующем:

10  CoreFoundation  0x3614f4c4 +[NSException raise:format:] + 28
11  Foundation      0x34514e28 -[NSURL(NSURL) initFileURLWithPath:isDirectory:] + 68

Однако проблема в том, что я не использую "initFileURLWithPath" в моей программе, поэтому я не знаю, что искать.Я смотрю на все элементы и т. Д., Но не вижу ничего, что выглядело бы как проблема.

В предыдущей версии я изменил следующие вещи:

  • Добавлена ​​новая фоновая графикаvia xcode
  • Новая функция быстрой игры, которая состоит из новой кнопки и нескольких новых функций.Я проверил их все.

Реальная проблема здесь состоит в том, как найти это, как это только при загрузке из appstore, это проблема.Кстати, я знаю, что он падает, когда я нажимаю "неправильную" кнопку в моем викторине.Это хорошо, но я все еще не могу понять, что не так.

Кто-нибудь, кто может дать мне несколько советов, как решить эту странную проблему, а также объяснить, как что-то работает отлично на тестовом устройстве, а не из appstore?Кстати, как мне это проверить?

Заранее спасибо :-)

=========================================================================

Я думаю, что нашел проблему.Поскольку я новичок, когда произошел сбой, я проверил этот модуль и нашел что-то интересное.Затем я проверил на живом устройстве включение звука, и проблема исчезла.Включение звука привело к сбою.

Код:

if (sound == YES) {
    //==== PLAY THE LOOSING SOUND ====//
    // Form a URL to the sound file, which in init using the Path
    NSBundle *mainBundle = [NSBundle mainBundle];
    NSString *filePath = [mainBundle pathForResource:@"wrong2" ofType:@"wav"];
    NSURL *aFileURL = [NSURL fileURLWithPath:filePath isDirectory:NO];

    // Create a sound ID, 
    SystemSoundID myID;
    // Register the sound
    AudioServicesCreateSystemSoundID((CFURLRef)aFileURL, &myID) ;
    // Play the sound!
    AudioServicesPlaySystemSound(myID);
}

Строка кода:

NSString *filePath = [mainBundle pathForResource:@"wrong2" ofType:@"wav"];

Что я не понимаю, так это то, что«неправильный 2.wav» существует в папке ресурсов, но все еще является проблемой?

===================================================

Я только что обнаружил, что файл "неправильный2.wav" отсутствовал в правильном каталоге, но все ещеПохоже, это было правильно в xcode4.Я скопировал новую версию файла в правильный каталог, удалил файл в xcode и заново скопировал его в xcode.

Просто не знаю, как тестировать.

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

Ответы [ 2 ]

2 голосов
/ 20 октября 2011

Возможно, вы не вызываете напрямую [initFileURLWithPath:], но вы загружаете файлы где-нибудь в вашем приложении, используя другие вызовы методов, которые могут вызывать это (например, [UIImage imageNamed:])? Если это так, изучите скомпилированный релиз IPA (щелкните правой кнопкой мыши по пакету Explore) и убедитесь, что все файлы, которые, по вашему мнению, должны там быть, действительно есть.

Если вы загружаете файлы на открываемое устройство, убедитесь, что они действительно загружаются с сервера (возможно, сим и ваше устройство что-то кешируют).


Следует иметь в виду, что папки / группы в XCode не обязательно отражают структуру папок проекта на вашем жестком диске. Копирование элемента в группу в Xcode не копирует его в эту папку.

Кроме того, во время компиляции вся иерархия папок сглаживается, поэтому в MainBundle все в корне (без папок), так что имейте это в виду при разработке.

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

2 голосов
/ 20 октября 2011

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

Однако я не знаю, что предложить для вашей конкретной ошибки.

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