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

83

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

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

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

Bashan
источник
Нет представления об этом? Похоже, что многие столкнутся с чем-то ...
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, чтобы устранить ошибку.

Raptor
источник
У меня это не сработало. Любые другие указатели. пожалуйста, посмотрите на это: 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-уведомления.

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

Ошибка 404
источник
3

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

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

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

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

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

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

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

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

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

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

KevinH
источник
2

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

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

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

битту
источник
0

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

user3344717
источник