Приложение для iPhone умерло под iOS 4.1. Без изменений кода - PullRequest
4 голосов
/ 09 сентября 2010

Я установил iOS 4.1, только что выпущенную сегодня.

Я загрузил свое приложение на телефон из AppStore и запустил, и оно не может получить местоположение GPS.

Я загружаю новый XCode и 4.1 SDK и перекомпилирую под 4.1, и приложение отлично работает на iPhone 4.1.

Код не был изменен.

Почему приложение, скомпилированное под 4.0, не работает под 4.1.

BASE SDK был 4.0

ЦЕЛЬ IOS РАЗВЕРТЫВАНИЯ: iOS 4.0

НОВЫЕ настройки

BASE SDK составил 4,1

ЦЕЛЬ IOS РАЗВЕРТЫВАНИЯ: iOS 4.0

Немного досадно, мне нужно повторно подать заявку, хотя я ничего не менял ... еще одна неделя подачи заявки в черную дыру!


После 3 попыток развертывания в App Store и большого разбора файла проекта я обнаружил следующее:

Цель развертывания отличалась для BUILD и TARGET А базовый sdk устанавливается только в Debug в Target

Я получил Debug / Release для работы на моем телефоне, поэтому предполагалось, что в приложениях Releaselase и Distribution одинаковые настройки должны работать в App Store.

Но даже после его установки и повторного развертывания в магазине приложений он не работал (приложение загружено и нет GPS).

Я попытался удалить профиль обеспечения, но не сработал.

Ночью телефон потерял питание, и при перезапуске приложение работало.

, поэтому не уверен, что это была странная комбинация всех 3.

iOs Deployment Target (IPHONEOS_DEPLOYMENT_TARGET = 4.0;): iOS 4.0
BASE SDK(SDKROOT = iphoneos4.1;): iOS 4.1
for BUILD (Debug/Release/Distribution) (Right click on top level in tree YourApp >> Info menu)
and TARGET (Debug/Release/Distribution) (Right click on Target >> YourApp >> Info menu)

Выпустите приложение на 4.0 в магазин приложений. 4.1 выпущен Обновил мое приложение, чтобы проверить это. Приложение работает нормально, но не может получить GPS на нескольких экранах. Перекомпилировал его под 4.1, НЕТ ИЗМЕНЕНИЙ КОДА, выпущенный для хранения, все равно не будет работать.

Отладочная версия работала нормально на 4.1

Релиз не

Версии дистрибутива (версия из магазина приложений) нет. Не удалось получить GPS.

Отрезал файл проекта, чтобы увидеть, в чем разница.

Обнаружил, что

Настройки Target и Build были не идентичны.

IPHONEOS_DEPLOYMENT_TARGET = 4.0;

Был установлен для BUILD для отладки / выпуска и распространения

но

для TARGET для DEBUG было установлено значение

IPHONEOS_DEPLOYMENT_TARGET = 3,0;

и НЕ устанавливается в RELEASE и DEBUG

Я удалил каталог сборки и установил

IPHONEOS_DEPLOYMENT_TARGET = 4.0;
for BUILD (Debug/Release/Distribution) (Right click on top level in tree YourApp >> Info menu)
and TARGET (Debug/Release/Distribution) (Right click on Target >> YourApp >> Info menu)

Rebuilt Релизная версия теперь работает, поэтому надо было надеяться, что настройка в Distribution будет работать. Выпущен в магазин приложений. Был одобрен через 2 дня оба раза. Попробовал это. Приложение работает, но нет GPS. Пытался удалить профиль инициализации, не повезло. Ночью телефон потерял питание, так что перезагрузил Попробовал приложение и все заработало. Так что, может быть,

Чтобы проверить это самостоятельно. Скопируйте YourApp.xcodeproj в безопасное место. Переименовать так расширение больше не .xcodeproj Это становится папкой. Откройте и он будет иметь 3 файла Настройки сборки находятся в project.pbxproj

Прокрутите вниз: Ищу / * Начать раздел XCConfigurationList * /

Обратите внимание на два раздела для сборки и один для цели

/* Build configuration list for PBXNativeTarget 

...

/* Build configuration list for PBXProject 

Если вы выполнили сборку дистрибутива, каждая из них будет иметь настройки Debug / Release и Distribution

  1D6058940D05DD3E006BFB54 /* Debug */,
  1D6058950D05DD3E006BFB54 /* Release */,
  C55BCF5811ADCA470050ABDB /* Distribution */,

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

только отличия TARGET (отладка, выпуск и распространение)

1D6058940D05DD3E006BFB54 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
....
IPHONEOS_DEPLOYMENT_TARGET = 3.0;
....
};
name = Debug;
};

не задано для выпуска / распространения

BUILD (набор для отладки / выпуска / распространения)

IPHONEOS_DEPLOYMENT_TARGET = 4.0;
SDKROOT = iphoneos4.1;

Ответы [ 5 ]

1 голос
/ 05 октября 2010

Apple, наконец, признала свою проблему в 4.1

https://devforums.apple.com/message/307257#307257 Некоторая информация, которая может оказаться полезной для этой проблемы:

Эта проблема затрагивает приложения только после удаления приложенияи впоследствии переустановлен.Это не относится к распространению через App Store по сравнению с вашими собственными сборками устройства.Перезагрузка устройства решит проблему.Эта проблема исправлена ​​в iOS 4.2.

https://devforums.apple.com/thread/70688?tstart=0

1 голос
/ 15 сентября 2010

разработчики, использующие службы определения местоположения, отмечают проблемы на 4.1

https://devforums.apple.com/message/294717#294717

0 голосов
/ 01 октября 2010

Проверьте ваш список прав (для нас ent.plist). У нас раньше были некоторые упоминания об услугах определения местоположения, а теперь нет! Хотя понятия не имею, как это произошло.

0 голосов
/ 21 сентября 2010

Эй, это снова я. Я отвечаю вам на нескольких форумах.

Вы случайно не используете этот устаревший метод getDistanceFrom: ? Это может быть причиной, хотя вы ожидаете, что он будет работать или не работать согласованно между XCode и Appstore:

https://developer.apple.com/library/ios/prerelease/#documentation/CoreLocation/Reference/CLLocation_Class/DeprecationAppendix/AppendixADeprecatedAPI.html#//apple_ref/occ/instm/CLLocation/getDistanceFrom:

ОБНОВЛЕНИЕ: удаление этого устаревшего метода не решило проблему для меня: - (

0 голосов
/ 10 сентября 2010

Когда вы нажали «Информация», чтобы получить доступ к конфигурации сборки для SDK4.1, у вас было выделено название проекта или Цель?Кажется, есть два набора конфигураций сборки.У меня была такая же проблема с GPS, как и у вас.Я также думал, что использую SDK4.1, но на самом деле это не так.

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