Как исправить "нет допустимой строки права "aps-environment", найденной для приложения " в Xcode 4.3?

Я очень старался создать простое приложение iOS, которое может получать push-уведомления. Моя единственная причина для этого-установить процедуру для некоторых других членов команды, чтобы использовать, и не смогли найти актуальную рабочую версию таких инструкций в другом месте в интернете. Наш магазин довольно новый для iOS dev, я лично совершенно неопытен с iOS dev и Xcode. Я наткнулся на десятки учебников, статей и сообщений о проблемах от Apple и в другом месте, и я чувствую, что я могу быть почти там...

вот где я должен (обратите внимание, что я использую Xcode 4.3 и пытаюсь изначально развернуть только iOS 5.1, и я понимаю, что некоторые вещи, возможно, изменились недавно против более ранних версий Xcode, но снова я новичок во всем этом-и нахожу его полностью запутанным и запутанным):

1) у меня есть профиль подготовки на моем iPhone, который имеет Push enabled

2) в моем тестовом проекте Xcode у меня есть это профиль подготовки, выбранный в качестве идентификатора подписи (в разделе параметры сборки > подпись кода)

enter image description here

3) у меня есть идентификатор пакета в разделе сводка и информация > пользовательские целевые свойства iOS установлены правильно* (я думаю??)

4) у меня есть registerForRemoteNotificationTypes вызывается в моем делегате didFinishLaunchingWithOptions

5) у меня есть didRegisterForRemoteNotificationswithdevicetoken и didFailToRegisterForRemoteNotificationswitherror в моем делегате, настроить для регистрации маркера устройства или ошибки соответственно

6) у меня есть включить права, проверенные в разделе сводка.

7) прямо под этим выбранным файлом прав - Tinker6 (имя моего тестового проекта), который был сгенерирован автоматически, когда я проверил включить права

8) в Tinker6.файл прав у меня есть следующее (который я собрал правильно на основе нескольких различные сообщения по всему интернету, но я не могу найти ничего определенного от самого Apple):

enter image description here

Обновлено

9) Кроме того, я попробовал все это без файла прав и получил по существу тот же результат.

10) мое содержимое файла mobileprovision включает права правильно (я скремблировал номер и домен, но структурно то же самое):

<key>application-identifier</key>
<string>12355456A7.com.whatever.tinker</string>
<key>aps-environment</key>
<string>development</string>
<key>get-task-allow</key>
<true/>
<key>keychain-access-groups</key>
<array>
    <string>12355456A7.*</string>
</array>

/конец update

когда я пытаюсь запустить это на своем устройстве, я получаю следующую ошибку в выводе Xcode:

2012-06-11 12:45:23.762 Tinker6[13332:707] Failed to get token, error: 
Error Domain=NSCocoaErrorDomain Code=3000 "no valid 'aps-environment' 
entitlement string found for application" UserInfo=0x24a3b0 
{NSLocalizedDescription=no valid 'aps-environment' entitlement string 
found for application}

Я попытался установить get-task-allow to NO, aps-environment для производства, все четыре возможные комбинации, то же самое.

Как я могу обойти это? Где окончательная документация по этому вопросу?

-- далее фоновых образом --

*что касается идентификатора пакета, я все еще не понимаю, как это должно быть устанавливается в отношении идентификаторов приложений и профилей в профиле подготовки. На портале подготовки под идентификаторами приложений у меня есть это (опять же, скремблированный номер и домен):

enter image description here

и два места bundle id установлен у меня есть это:

enter image description hereenter image description here

Я совсем не уверен, что они верны или один или оба должны быть установлены в 12355456A7.com.неважно.Тинкер, хотя я пробовал их раньше в процессе без успех...

Примечание я понимаю, что есть много сообщений с похожими названиями, однако все они, похоже, устарели на основе имен файлов и т. д., и тот факт, что ни одно из решений не кажется полезным. Я надеюсь, что больший уровень детализации, который я дал, гарантирует качественный ответ. Я, вероятно, назначу награду как можно скорее, и если вы дадите высококачественный ответ, который приведет к решению, я присужду вам награду, а также продвину ответ через Твиттер и мой блог. Особенно, если вы crosspost post действительно хороший " вот точно 500 шагов вам нужно получить простое приложение push-уведомлений, включая подготовку и все остальное " статья в вашем блоге или что-то еще.

23 ответов


Если вы создали профиль подготовки перед настройкой app ID для push попробуйте восстановить профиль подготовки.

портал подготовки iOS - > подготовка - > Ваш сертификат - > изменить - > сделать изменить - > загрузить новую подготовку

работал для меня. Теперь я могу использовать push.


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

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

вам нужно убедиться, что правильный профиль выбран для Конфигурация" Debug "и, чтобы быть уверенным, что вы выбрали правильный профиль как для" Debug", так и для дочернего узла с надписью"Any iOS SDK":

enter image description here

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

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


Я столкнулся с этой проблемой в Xcode 8. Вы должны включить Target-> capabilities-> push notification. Проверьте скриншот.

enter image description here


самый простой способ сделать это из ваших учетных записей с помощью Xcode:

голова над Xcode - > Настройки - > выберите вкладку Учетные записи - > Просмотр сведений - > Нажмите кнопку Обновить в левом нижнем углу - > готово.

построить снова, и он должен работать.


Ок, я столкнулся с проблемой раньше. Поскольку push-уведомление требует реализации на сервере, для меня воссоздание профиля не было вариантом. Поэтому я нашел это решение без создания нового профиля подготовки.

Xcode неправильно выбирает правильный профиль подготовки, хотя мы выбираем его правильно.

сначала перейдите к органайзеру. На вкладке Устройства в списке библиотека выберите профиль подготовки, который мы пытаемся использовать. Правый клик на нем и далее "раскрыть профиль в Finder".

enter image description here

В открывшемся окне Finder будет выбран правильный профиль. Запомните имя.

enter image description here

Теперь перейдите в Xcode > Log Navigator. Выберите фильтр для "все"и" все сообщения". Теперь на последнем этапе (цель сборки) найдите шаг, называемый "ProcessProductPackaging", разверните его. Обратите внимание на имя профиля подготовки. Они не должны соответствовать, если у вас есть ошибка. enter image description here

теперь в открывшемся окне Finder удалите профиль rogue provisioning, который использует Xcode. Теперь стройте снова. Ошибка должна быть устранена. Если не повторить процесс, чтобы найти другой профиль изгоев, чтобы удалить его.

надеюсь, что это помогает.


ответ был: начните сначала, сделайте все то же самое, но создайте новый профиль подготовки и установите его. Это сработало. Проверка всех деталей (прав в мобильном обеспечении) выглядит ровно то же самое, что и все в моем вопросе здесь. Но теперь это работает. Apple: Ват?

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


удалить старый профиль подготовки из XCode в Organizer.

затем создайте новый профиль подготовки для того же идентификатора пакета на портале подготовки iOS (после включения push).

импортируйте новый профиль подготовки в XCode, установите его в настройках сборки приложения.

Build, run, он работает.

Я просто сделал это.

Мне потребовалось 10 минут от ошибки до успеха.


XCode 6.1.1 и несколько учетных записей разработчиков apple

еще один ответ на этот уже довольно полный микс: я снова столкнулся с этой проблемой сегодня, и на этот раз это было связано с тем, что у меня было несколько учетных записей apple. Мне нужно было сначала добавить учетную запись разработчика 2nd в XCode > Настройки > Учетные Записи > +

убедитесь, что возможность Push-уведомления включена

Далее мне нужно было явно включить In-App Покупка в приложении (мне не нужно было делать это раньше). XCode > (окно приложения) > цели > возможности > In-App Purchase ON (и на этом этапе мне была предоставлена возможность выбрать правильный сертификат)

обратите внимание, что я уже добавил сертификат с поддержкой Push, дважды щелкнув его в Finder.

enter image description here


(Xcode 5) Ну, проведя час, я решил свою проблему. Даже если вы повторно создать файл инициализации в Xcode 5, Вы должны вручную обновить свою учетную запись. Я только изменил файл подготовки на вкладке организатора, который не работал, Xcode сохранил сборку со старым файлом подготовки.

Итак, перейдите в

Xcode > Настройки > Учетные записи > Просмотр сведений (выберите учетную запись)

затем обновите файлы подготовки.


моя проблема заключалась в том, что я подписывался с профилем подготовки подстановочных знаков, управляемым Xcode.

после того, как я создал профиль, специфичный для приложения (и загрузил его, дважды щелкнул его и обеспечил, чтобы Мои настройки сборки ссылались на него), я успешно получил маркер устройства APNS.


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

то, что сработало для меня в конце концов, было

  1. сделайте, как предложено выше, и создайте идентификатор приложения
  2. затем создайте профиль подготовки
  3. не используйте командный подстановочный профиль (управляемый xcode one)в разделе разработки подготовки. Вы должны сделать отдельный, используя этот идентификатор приложения, для которого вы сделали push-уведомление активным. Таким образом, при разработке он будет иметь встроенную функцию push-уведомления.

Я не знаю, можете ли вы включить это для подстановочного приложения, но после попытки по крайней мере 12 различных предложений и потери нескольких дней я надеюсь, что это поможет кому-то


вы упоминаете профиль подготовки, но я не вижу никакого упоминания о профиле Apple Push.

для использования Push вы должны иметь профиль push (есть два, один для разработки и один для выпуска). После того, как вы его создали, вам нужно убедиться, что он содержит соответствующие сертификаты (см. раздел редактирования ниже).

Это отличный учебник, который проведет вас через все шаги:

http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12

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

P. S. Я считаю, вам не нужны права больше, это устаревшая вещь.

изменить: Вы также должны проверить, что у вас есть необходимые профили на устройстве-перейдите в Настройки, затем общие, профили, проверьте, что ваши профили перечислены, особенно, конечно, push-профиль. Вы также можете проверить это в разделе организатор XCode. В Organizer есть два раздела, которые говорят профили предоставления-один в левом верхнем углу библиотеки(это профили в XCode, которые вы используете для подписи и т. д.) Также вы увидите раздел Call Provisioning Profiles для подключенного устройства, это профиль, который установлен на телефонная трубка. Если вы не установили их на телефон, вы можете загрузить их с веб-сайта портала подготовки, затем нажмите кнопку "Добавить" в нижней части окна "организатор".

в то время как на портале подготовки вы также должны проверить, что профиль Apple Push включает сертификаты: - нажмите на Provisioning в меню левой руки - вы увидите список своего профиля, выберите для редактирования профиля Apple push - вы увидите раздел сертификаты, со списком разработчики или тестеры etc. у вас есть в вашем проекте, убедитесь, что флажок установлен для них. - вы также увидите раздел устройства, убедитесь, что устройство, на котором вы тестируете, было добавлено.

Если у вас есть старые профили в XCode или на устройстве, удалите их и загрузите/обновите / установите все новые профили с портала подготовки


столкнулся с этой же проблемой сам. Для меня проблема заключалась в том, что мое имя продукта ($TARGET_NAME) не было капитализировано таким же образом, как в сертификате, предоставленном apple. Например, у меня был ком.companyid.APNDemo в то время как Apple cert использовал com.companyid.апндемо.

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


многие из приведенных выше ответов верны. Однако, по-видимому, существует несколько возможных ошибок при работе с этим.

У меня была проблема с капитализацией с моим идентификатором приложения. Мой идентификатор приложения по какой-то причине не был капитализирован, но мое приложение было. Как только я воссоздал идентификатор приложения с правильной капитализацией, все прошло гладко. Надеюсь, это поможет. Но это чертовски расстраивает.

P. S. Если он все еще не работает, попробуйте изменить подписи кода идентификационных полей вручную с помощью "edit". Измените вторую строку с именем правильного имени профиля подготовки.


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

codesign --display --entitlements :- path/to/MyApp.app

и aps-environment и application-identifier.


эта ошибка может возникнуть, когда срок действия сертификата истек.

решение обновить сертификат и подписать приложение с ним.


вам нужно убедиться, что у вас есть в профилях подготовки (https://developer.apple.com/account/ios/profile/) профиль дистрибутива iOS.

когда вы загружаете из xCode в App Store, убедитесь, что у вас есть APS-среда в правах. Если нет, загрузите их из View Accounts -> View Details -> загрузить все.


У меня была аналогичная проблема. Я прыгал между XCode 7 и 8 по разным причинам. Как только вы используете 8 для сборки, вам нужно будет использовать 8. Я просто использовал Xcode 8 и применил некоторые из предложенных выше изменений, и это сработало.


recreating временные файлы исправлены все мои проблемы.


кажется, что-то причудливое с "автоматическими" правами в Xcode 4.6.

есть права.plist файл для каждого SDK по адресу:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/Entitlements.plist

обходное решение, которое я придумал, состояло в том, чтобы отредактировать этот файл и добавить скрытый ключ APS-environment вручную так:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>application-identifier</key>
    <string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>
    <key>aps-environment</key>
    <string>development</string>
    <key>keychain-access-groups</key>
    <array>
        <string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>
    </array>
</dict>
</plist>

затем Xcode генерирует правильный файл Xcent, который содержит ключ APS-environment по адресу:

/Users/mySelf/Library/Developer/Xcode/DerivedData/myApp-buauvgusocvjyjcwdtpewdzycfmc/Build/Intermediates/myApp.build/Debug-iphoneos/myApp.build/myApp.xcent

вы можете найти, где создается файл Xcent использование навигатора журнала Xcode,
ищите "ProcessProductPackaging".

к сожалению, это единственный способ, которым я нашел это Исправлена проблема.
(и, наконец, в состоянии правильно получить push token сейчас)

просто интересно, если другое более элегантное решение доступно.
Пожалуйста, смотрите мой вопрос SO для более подробной информации об этом:
Xcode 4.6 автоматическое право не работает - "нет действительной aps-среды"


перед удалением и регенерацией AppIDs / Profiles убедитесь, что ваша библиотека и устройство имеют одинаковые (и правильные) профили.

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

проблема заключалась в том (duh), что я не импортировал профили в библиотеку Xcode на новом компьютере (в Organizer/Devices в разделе Library->Provisioning Profiles).

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


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

на Параметры Построения tab, in Право Подписи Кода мой .права файл не был ссылкой для всех разделов. Однажды я добавил его в любой SDK ошибка была устранена.

enter image description here


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

Если вы хотите, чтобы приложение получало удаленные уведомления (push-уведомление), вам нужно использовать явное приложение ID, например com.tutsplus.толкай!--2-->, вместо com.tutsplus.*

пожалуйста, найдите скриншот, enter image description here