Прежде всего, даже если viewDidUnload
не устарел, вам, должно быть, пришлось отменить это уведомление в viewDidUnload
AND dealloc
. Даже до iOS 6, viewDidUnload
НЕ вызывается в большинстве случаев; только в ситуациях с низкой памятью. Поэтому, если бы вы только помещали его в viewDidUnload
, а не dealloc
раньше, он не был бы незарегистрирован, и, вероятно, он был бы разбит, когда он был освобожден и получил уведомление. Поэтому вам, должно быть, пришлось поместить его в dealloc
, чтобы он работал правильно.
Во-вторых, если вы делали это правильно раньше, вам не нужно делать что-либо дополнительное для его работы правильно в iOS 6. Единственное отличие в iOS 6 состоит в том, что представления больше не выгружаются вообще (даже в ситуациях с низкой памятью). Таким образом, это то же самое, что и в iOS 5, когда вы не столкнулись с ситуацией с низкой памятью. Поскольку представления не выгружаются, viewDidLoad
вызывается только один раз, поэтому ваше уведомление будет регистрироваться только один раз. Он будет незарегистрирован в dealloc
, поскольку вы должны положить его для того, чтобы он работал правильно.
Я получил это из .ipa, созданного как артефакт Дженкинса. Проблема для меня заключалась в том, что Дженкинс использовал другой профиль обеспечения.
Я вручную установил Jenkins для использования того же профиля, что и обновленная версия, которую я пытался установить, и он начал работать.
Чтобы исправить это, просто включите «Автоматическое управление подписанием» с общей вкладки настроек проекта.
У меня также возникла проблема с запуском приложения на моем устройстве прямо из xcode 8. Удаление и генерация профиля и сертификата не работал на меня. Но включение «Автоматическое управление подписанием» сработало для меня.
Надеюсь, что это поможет!
Проверьте этот мой вопрос: Xcode 8 показывает ошибку, что профиль подготовки не включает подпись сертификат
У меня была такая же проблема при попытке обновления приложения. И вот что я нашел:
Я проверил права приложения-идентификатора старого приложения и нового приложения. Вы можете сделать это, запустив codesign -d --entitlements :- path/to/AppName.app/AppName
или откройте файл «archived-extended-rights.xcent» по пути «AppName.app/AppName".
Идентификатор приложения старого приложения был« 1234XXX5X6.com. mycompany.myapp ", но в новом приложении это было" 1234XXX5X6.com.mycompany.myapp.develop ".
Обычно я устанавливаю« Bundle Identifier »непосредственно в Info.plist.
Но я не знал, что в настройках сборки проекта есть также свойство «Свойство Bundle Bundle».
Предыдущая версия приложения была построена с Xcode 7.3.1 и имела следующие настройки:
Новая версия была построена с помощью Xcode 8.2.1 и он имел следующие настройки:
Кажется, что новый Xcode имеет другой источник для идентификатора приложения. Поэтому я только что исправил «Идентификатор продукта Bundle», и моя проблема была решена.
Вот одно из решений, если вы хотите обновить существующее приложение App Store без его удаления, но ваше право на идентификатор приложения не соответствует. Загрузите архив своей новой сборки в App Store, а затем используйте TestFlight, чтобы загрузить ее на свое устройство. Это не так быстро, как создание устройства, но оно перезапишет ваше старое приложение вашей новой сборкой, сохранив при этом ваши старые данные. Для (относительно) более быстрого повторного тестирования вашего процесса обновления, когда у вас есть новая сборка, доступная в TestFlight:
Конструкция TestFlight перезаписывает право без удаления старых данных, поэтому Xcode с радостью установит вашу новую сборку поверх сборки TestFlight, но вы все еще проверяете процесс обновления, как если бы вы строили непосредственно поверх версию App Store вашего приложения.
Удалите существующее приложение с устройства и снова запустите.