Приложение iPhone не может правильно скопировать Файл базы данных ТОЛЬКО с рассылкой ad-hoc или app-store и НЕ в режиме разработки - PullRequest
1 голос
/ 13 февраля 2010

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

РЕЗЮМЕ: мое приложение iphone аварийно завершает работу при загрузке из магазина приложений iTunes или из специального дистрибутива, но не «вылетает» при запуске в режиме отладки на симуляторе или при включении мой iPod

ДЕТАЛИ: Приложение содержит довольно большой файл базы данных sqlite (~ 180 мегабайт без сжатия, 56 мегабайт сжатый). Это может быть актуально.

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

Это все работает правильно, когда я запускаю приложение в симуляторе iPhone , а также , когда я запускаю приложение в режиме отладки на моем iPod .

Приложение было одобрено Apple. Однако когда пользователи начали загружать приложение через iTunes, я начал получать электронные письма, в которых говорилось, что в UITableView не было никакой информации. Чтобы исследовать, я загрузил копию приложения из магазина приложений и увидел похожий результат (то есть, отображается UITableView, но строки пусты).

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

Специальный дистрибутив ведет себя аналогично (то есть не показывает строк в UITableView) с загрузкой из магазина приложений. В частности, я сделал следующее несколько раз (я удаляю и переустанавливаю приложение каждый раз).

  1. добавить мою специальную подготовку сертификат для iTunes
  2. добавить сборку моего специального приложения в iTunes
  3. синхронизировать мой iPod Touch с iTunes
  4. запустить мое специальное приложение
  5. Приложение, кажется, всегда падает при первом запуске (т.е. на секунду появляется заставка, а затем я вижу домашний экран моего iPod Touch)
  6. секунда и последующие запуски специального приложения не дают сбоя, но UITableView пуст.
  7. Ничего подобного не происходит, когда я запускаю приложение на симуляторе или когда я развертываю в режиме разработки / отладки на том же iPod.

Я пытался просмотреть журналы сбоев, связанные с первоначальным сбоем приложения (см. Шаг 5 выше), но в этот момент журнал сбоев не создавался. ОДНАКО, журнал сбоев создается , когда я синхронизирую iTunes с iPod Touch, но он также может быть написан на польском языке.

Таким образом, создается впечатление, что рецензенты из магазина приложений, которые одобрили мое приложение, изучали только поведение приложения с помощью симулятора и / или в режиме разработки / отладки. Возможно, проблема связана с большим размером файла базы данных, но это полная спекуляция с моей стороны. Насколько я понимаю, не должно быть ограничений на размер приложения или размер базы данных около 180 мегабайт. Это также не обязательно объясняет, почему приложение работает в режиме отладки / разработки.

Кто-нибудь видел что-нибудь подобное?

1 Ответ

2 голосов
/ 13 февраля 2010

Кажется, я понял это (еще не проверял) ...

Оказывается, весь журнал сбоев написан не по-польски.

Есть часть, которая говорит, что «приложение не запустилось вовремя»

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

, чтобы процитировать яблоко: *** iPhone OS использует сторожевой таймер при запуске приложений. Если приложение занимает слишком много времени для завершения своего первоначального запуска, операционная система завершает приложение. Приложения, прерванные по этой причине, будут иметь код исключения 0x8badf00d и соответствующую информацию, указанную в соответствующем отчете о сбое: *

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

...