для приложения не найдена допустимая строка прав 'aps-environment'


83

Я пытаюсь настроить свое приложение для поддержки push-уведомлений, но продолжаю получать эту ошибку: не удалось получить токен, ошибка: Error Domain = NSCocoaErrorDomain Code = 3000 "для приложения не найдена допустимая строка прав 'aps-environment'" UserInfo = 0x1f818fc0 { NSLocalizedDescription = для приложения не найдена допустимая строка прав 'aps-environment'}

  • Я разрешил своему приложению поддерживать push-уведомления (на данный момент только для разработки).
  • Я создал профиль обеспечения ПОСЛЕ включения push-уведомлений.
  • Мой идентификатор пакета такой же, как в профиле.
  • В моем профиле есть строка: aps-environment
  • Я убедился, что и в проекте, и в цели в разделе «Идентификация подписи кода» ВСЕ значения выбраны в качестве моего профиля обеспечения.

Есть еще идеи? Благодарю.


Нет представления об этом? Похоже, что многие столкнутся с чем-то ...
bashan

Ответы:


64

В моем случае данные в моем профиле обеспечения:

security cms -D -i ~/Downloads/spolskyDevelop.mobileprovision 
...
<key>application-identifier</key>
<string>P5GM95Q9VV.com.dca.spolsky</string>
<key>aps-environment</key>
<string>development</string>

Отличался от того, что было в самом приложении (вы можете узнать, где оно создано, посмотрев на вкладку Xcode Logs)

codesign -d --entitlements - '/Users/drew/Library/Developer/Xcode/DerivedData/spolsky-bdbtdfjeeywhqzccpmmceqvnhgtm/Build/Products/Debug-iphoneos/spolsky-ios.app'
<dict>
    <key>application-identifier</key>
    <string>Y2X6Z7Z2GR.com.dca.spolsky-ios</string>
    <key>get-task-allow</key>
    <true/>
    <key>keychain-access-groups</key>
    <array>
        <string>Y2X6Z7Z2GR.com.dca.spolsky-ios</string>
    </array>
</dict>

Это было правдой, даже несмотря на то, что текст подсказки «В настоящее время соответствует» в разделе «Идентификация подписи кода» указывал на правильный профиль обеспечения - странно, да? Чтобы сделать странную историю еще более странной, правильный профиль обеспечения был установлен на устройстве, когда я запускал (Настройки-> Общие-> Профили), что заставило меня поверить, что профиль обеспечения был правильным, но он возвращался к идентификатору подстановочного знака когда приложение было фактически запущено .

Подсказкой была разница в выводе этих двух команд:

Y2X6Z7Z2GR .com.dca. spolsky-ios против P5GM95Q9VV .com.dca. Spolsky

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

Я предполагаю, что XCode использовал совпадение в стиле подстановочного знака для моего идентификатора без подстановочного знака. («spolsky», в конце концов, почти «spolsky-ios»), и это объясняет вывод «Current Matches». Но что-то в цепочке сборки более строгое в отношении этого, поэтому во время сборки он возвращается к фактическому идентификатору подстановки .


7
У меня возникла аналогичная проблема: «Параметры сборки» проекта отличались от «Параметры сборки» TARGET ... в моем случае для моих целевых параметров по умолчанию использовались неправильные профили подготовки.
Роб

1
Обнаружив это, я столкнулся с той же проблемой.
Codemonk

1
У одного из моих коллег возникла проблема с подготовкой. Однако я смог выбрать ключ подготовки без подстановочного знака только после того, как зашел в настройки профиля в Xcode и обновил список сертификатов / ключей обеспечения.
cbh2000

1
Мои целевые настройки для «отладки» использовали iOS Developer / Automatic, что приводило к тому, что мой .app выходил с неправильным идентификатором подписи кода. Мне пришлось явно установить настройки моего проекта и цели как для отладки, так и для выпуска, чтобы использовать мой новый идентификатор подписи кода, моя проблема была исправлена. Это не только ваш профиль подготовки, вам нужно также проверить эти идентификаторы подписи кода. Не удалось бы решить эту проблему без этих замечательных команд терминала!
self.name 05

6
Для записи: для работы push-уведомлений необходимо использовать определенный профиль Provisioning Profile с идентификатором пакета приложения, а не с подстановочным знаком * .
mgarciaisaia 04

37

Проблема связана с тем, что текущий профиль обеспечения не содержит информации APNS, поскольку профиль обеспечения создается ДО создания сертификата APNS.

Поэтому для решения проблемы создайте новый профиль обеспечения и выберите профиль обеспечения в Xcode, чтобы устранить ошибку.


У меня это не сработало. Любые другие указатели. пожалуйста, посмотрите на это: stackoverflow.com/questions/25679750/…
Ajeet

29

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

  1. Xcode -> Настройки -> Учетные записи
  2. Просмотр сведений о своей учетной записи разработчика
  3. Просто нажмите «Обновить» для профилей подготовки несколько раз. Я видел эти изменения при каждом обновлении. Продолжайте обновлять, пока они не перестанут меняться.

Как ни странно, у меня это сработало! Я обновлялся, пока он не перестал обновляться, затем очистил папку сборки, а затем перезапустил XCode. Это было после того, как я проверил идентификатор пакета в профиле обеспечения и в созданном приложении (где он совпал в обоих, что еще больше меня озадачило).
Шон Майкл Дориан,

Больше нет кнопки «Обновить» (?)
Джерри

9

я получил эту ошибку и не создал новый профиль обеспечения; создал новый, а затем перезапустил xCode, но теперь работает!


9

Имейте в виду, что идентификатор пакета должен соответствовать профилю подготовки с учетом регистра . У меня было что-то вроде com.FirstLast.appname, хотя должно было быть com.firstlast.appname. Что ж, это занимало меня довольно долго.


У меня была такая же проблема, это исправило ее для меня.
Куба

9

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

Выберите Проект> Цель> Возможности> Включить push-уведомления.

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


3

Если эта проблема возникла внезапно после обновления до Xcode 8, вы можете найти предупреждение на экране возможностей, которое позволит вам исправить это автоматически:

Выберите Проект> Цель> Возможности> Включить push-уведомления.


Вот что спасло меня от головной боли. Благодаря!
jpaljasma

2

Продукт-> Clean сделал это за меня. Надеюсь, это поможет кому-то другому.


я делаю обе чистки. Вторичная очистка с помощью command-option-shift-k также полезна.
нарисовал ..

2

Я столкнулся с этим, возможно, нечасто. Я работаю с Xcode 6 и iOS 8. Я создавал серию совершенно новых проектов приложений и пытался повторно использовать один и тот же идентификатор пакета, чтобы не пришлось заново проходить всю настройку на стороне портала. Это тоже было просто для тестирования в песочнице.

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

Мое решение было:

  1. Удалите связанный профиль обеспечения с устройства.
  2. Удалите связанный профиль обеспечения из Xcode.
  3. Закройте Xcode
  4. Дважды щелкните загруженный .mobileprovisionфайл, чтобы установить его обратно в Xcode.
  5. Откройте проект и разверните его.

Этот подход, кажется, расшатывает любое предыдущее состояние, и я могу зарегистрироваться для PN с новым идентификатором приложения / того же пакета.


2

Для тех, кто получил эту ошибку в ios 10, вы можете попробовать следующие шаги:

1. очистите свой проект.
2. и отметьте Targets -> Capabilities -> Push Notification. Если он выключен, включите его.

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


0

У меня сработал новый профиль обеспечения. Обязательно используйте профиль разработчика, если вы в разработке (не используйте Ad Hoc). После этого все было нормально, понятия не имею, почему старый перестал работать правильно.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.