Xcode 8 «право на aps-environment отсутствует в подписи приложения» при отправке

118

У меня есть приложение, для которого мы отправили десятки версий за последние 6 месяцев, и мы действительно используем APNS. Я получил следующее письмо от Apple после обновления до Xcode 8

Уважаемый разработчик,

Мы обнаружили одну или несколько проблем с вашей недавней доставкой для APP_NAME. Ваша доставка прошла успешно, но при следующей доставке вы можете исправить следующие проблемы:

Отсутствует право на push-уведомления - ваше приложение включает API для службы push-уведомлений Apple, но в подписи приложения отсутствует право на aps-environment. Чтобы решить эту проблему, убедитесь, что ваш идентификатор приложения включен для push-уведомлений на портале Provisioning Portal. Затем подпишите свое приложение с профилем обеспечения распространения, который включает право на aps-environment. Это создаст правильную подпись, и вы сможете повторно отправить свое приложение. См. «Provisioning and Development» в Руководстве по программированию локальных и push-уведомлений для получения дополнительной информации. Если ваше приложение не использует службу Apple Push Notification, никаких действий не требуется. Вы можете удалить API из будущих представлений, чтобы это предупреждение не отображалось. Если вы используете сторонний фреймворк,

После исправления проблем вы можете использовать Xcode или Application Loader для загрузки нового двоичного файла в iTunes Connect.

С Уважением,

Команда App Store

Что странно, я пошел на developer.apple.com -> Certificates, Identifiers & Profiles, и в моем AppId все еще включены Push-уведомления. Я не делаю ничего другого, чем когда-либо делал, поэтому мне любопытно, сломало ли что-то обновление Xcode 8. Любые идеи?

Кстати: ссылка, которую они поместили на Руководство по программированию push-уведомлений, была неработоспособна в электронном письме, так что это плохой знак.

Unome
источник

Ответы:

156

На самом деле очень просто. По какой-то причине он был отключен в Xcode 8, но перейдите в Targets -> Capabilities и убедитесь, что Push-уведомления правильны в этом представлении. Для меня это было «Fix Me», я должен был нажать, и вуаля.

Unome
источник
4
Странность этой проблемы заключалась не в решении, а в том, что в Xcode 7 это было включено, а после обновления отключено.
Unome
2
Мне также пришлось зайти в файл прав и изменить значение среды APS на «производство», потому что при создании по умолчанию было установлено значение «разработка».
Bek
61
Должно быть, в Apple недавно были наняты какие-то безмозглые люди ... Почему они теряют время разработчиков, отключая что-то по умолчанию и неявно устанавливая несоответствующие значения без какого-либо предупреждения об этом. Я потерял один день на создание профилей, сертификатов, отладку и другие неприятные вещи ..
Христо Атанасов
3
В заключение! Это смешно, так сложно заставить это работать. Я удалял и воссоздавал сертификаты / профили почти 5 часов. Хорошо то, что я могу сказать, что теперь полностью понимаю, что это за сертификаты / профили / идентификаторы :) Спасибо за подсказку.
Камил Рыковски
4
@bek учтите, что вам, вероятно, следует оставить это как разработку. При загрузке в iTunes Connect он автоматически переходит в рабочий режим.
Montdidier
84

У меня тоже такая же проблема, и я уверен, что push-уведомления отключены по умолчанию в Xcode8. Я этого не заметил. Будьте осторожны с этим.

возможность

Брюс Цай
источник
Можете ли вы сказать мне, почему в моем аккаунте нет раздела push-уведомлений?
Anuj
28

В Xcode 8 произошло изменение, в котором ваши права больше не исходят из идентификаторов приложений, а из возможностей, выбранных в целевом приложении. Итак, как сказал Unome (OP), вы должны убедиться, что Push-уведомления включены.

Для меня это не была кнопка «Исправить меня», но у меня было два файла прав (один для разработки и один для распространения). Включение возможности push-уведомлений добавит aps-environmentключ со значением developmentв файл прав на разработку, но не добавит его в файл прав на распространение. Копирование того же ключа в дистрибутив помогло избавиться от электронного письма с предупреждением при загрузке в iTunes Connect.

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

timgcarlson
источник
Это моя лодка, за исключением того, что независимо от того, что я указываю в моем .entitlementsфайле для текущей конфигурации / схемы, он всегда используется в productionкачестве файла aps-environment.
Альберт Бори
переключение push Notificaition в Capabilities приводит к сбою моего Xcode 8 !!
djay
2
@AlbertBori Странно, я смог заставить его показать только разработку, и это было нормально, потому что когда он был заархивирован, он выглядел как production.
timgcarlson
6
@meteors Это должно быть нормально, если значение равно development. Он будет изменен в ipa при архивировании проекта.
timgcarlson
2
@timgcarlson На самом деле этого не происходит во время архивирования. Это происходит при отправке или при экспорте. Также некоторая полезная информация для проверки правильности настройки здесь: developer.apple.com/library/content/qa/qa1798/_index.html
Марк Леонард
27

Из примечаний к выпуску Xcode :

Xcode 8 не копирует автоматически полномочия aps-environment из профилей подготовки во время сборки. Это намеренное поведение. Чтобы использовать это право, либо включите Push-уведомления на панели «Возможности» редактора проекта, либо вручную добавьте разрешение в свой файл полномочий. (28076333)

Это большое изменение, так как всегда было довольно странно, что право на aps-environment не требовало plist, в отличие от многих других.

Для тех из вас, кто не хочет просто вслепую нажимать «Исправить меня» и в настоящее время не имеет файла с правами, это просто файл plist, на который есть ссылка в настройках сборки вашего проекта в разделе «Права на подписание кода»

mattyohe
источник
1
Я не смог найти эту цитату в связанных заметках!
Юлиан Онофрей
Я не знаю, кто поддержал мой комментарий и что было не так, но теперь я тоже могу его найти.
Юлиан
13

После дня борьбы с Xcode 8 мы не могли понять, почему aps-environmentразработка НЕ ​​была добавлена ​​в наши отладочные сборки. Он отсутствовал в разделе прав во встроенном приложении для тестирования отладки ... даже несмотря на то, что мы ВКЛЮЧИЛИ новые возможности и существовал файл прав. Проблема в том, что файл прав должен быть установлен для ЛЮБОГО SDK в настройках сборки Xcode для прав отладки.

Скриншот

Джеймс Л. Харрис
источник
Я не думаю, что есть разница между установкой значения для Debugключа и установкой его для Debug> Any SDK, поскольку последнее используется для переопределения значения для конкретного SDK.
Юлиан Онофрей
Это решение для меня
Химант
Я боролся с этим все утро, и у меня возникла такая же проблема. Переключение возможностей, создание профилей инициализации, ничего из этого не сработало. Это сработало.
Дэйв С.
в некоторых случаях это все еще
дан
Хотел бы я проголосовать за это миллион раз. Я боролся неделю, и это было решением. Просто ввести путь к файлу в поле «Права подписи кода» вверху было недостаточно, это также нужно было сделать в части «Любой SDK». Это было для меня ключом к ее решению.
Роберт Бентли
7

Я получил такое же письмо от Apple, используя XCode 7.3.1. Что я сделал для решения проблемы:

  1. В разделе Возможности> Установите PUSH-уведомление, как указано в ответе @Bruce Tsai.
  2. В разделе Build-Settings> Code Signing> Code Signing Identity установите сертификат разработчика для отладки и сертификат распространения для выпуска, как показано на изображении:

введите описание изображения здесь введите описание изображения здесь

Ruben
источник
Привет, в возможностях я не получаю возможности> Установить уведомление PUSH
Анудж
@Anuj, я добавил снимок экрана там, где он должен быть в вашем Xcode.
Рубен
5

Если вы используете фреймворки Firebase и не используете push-уведомления, есть два решения: 1. Просто смиритесь с сообщением «проблема», которое отправляется всей вашей команде каждый раз при загрузке двоичного файла. Приложение по-прежнему будет принято как отправка, пока вы на самом деле не используете уведомления, вы можете игнорировать предупреждение. или 2. сделайте это: https://stackoverflow.com/a/46802075/7529450 . Это удалит надоедливое уведомление по электронной почте, а также будет принято как отправка.

Аарон Халворсен
источник
4

Для меня отключено автоматическое управление подпиской

Автоматическое управление подпиской было отключено для меня, я проверил, и у меня все работает нормально.

Шемер М. Али
источник
3

Включено использование push-уведомлений Xcode 9.

Я попытался отключить / снова включить push-уведомление . (не сработало)

Я попытался отключить / снова включить Автоматическое управление подписью . (не сработало)

Оказывается, мне пришлось удалить и заново добавить свои профили подготовки. ( см. здесь, как это сделать ) Возможно, вам придется отключить / снова включить Автоматическое управление подписью после опеки.

Aldracor
источник
2

Для меня проблема заключалась в том, что было два файла с правами: Entitlements-Debug.plistиEntitlements-Release.plist . И только один из них (Debug) имеет необходимые настройки.

Изменение нескольких значений параметров сборки> Подписание>MyAppName/MyAppName.entitlements Права на подписание кода на одно, а затем повторное включение возможностей> Push-уведомления мне.

Надеюсь, поможет.

Александр Зинчук
источник
0

Еще один сработавший вариант: копирование-вставка источника AppName/Entitlements-Debug.plistв AppName/Entitlements-Release.plist.

Александр Зинчук
источник