Ошибка идентификатора пакета и push-сертификата aps-environment

Я прочитал Откуда xcode берет идентификатор приложения?, Форматирование идентификатора пакета XCode из {PRODUCT_NAME} и загружает больше, но ... .

Я пытаюсь запустить push-уведомления и получаю ужасные

Ошибка «Error Domain = NSCocoaErrorDomain Code = 3000» для приложения не найдена допустимая строка полномочий «aps-environment». «UserInfo = 0x15b200 {NSLocalizedDescription = не найдена допустимая строка полномочий« aps-environment »для приложения}».

Я почти уверен, что правильно выполнил все шаги, в том числе:

  • сделал push-сертификат задолго до предоставления сертификата
  • сделал "Entitlements.plist"
  • добавил логическое значение get-task-allow и установил для него значение true (специальный выпуск)

Единственное, что я не могу понять, это идентификатор пакета.

Сертификат push предназначен для

XXXXXXXXXX.com.julianbaker.pwcnewsuk

Идентификатор пакета в PwCNewUK-Info.plist предназначен для

com.julianbaker.${PRODUCT_NAME:rfc1034identifier}

Если я вручную изменю его на

com.julianbaker.pwcnewsuk

Я получаю сообщение об ошибке несоответствия UDID, поскольку приложение отображается как PwCNewsUK

Когда я погуглил это, похоже, возникла некоторая путаница по этому поводу, но кажется, что они должны совпадать?

ВОПРОС:

Каким должен быть Bundle Indentifer, чтобы соответствовать push-сертификату
XXXXXXXXXX.com.julianbaker.pwcnewsuk?

ВОПРОС:

Нужно ли мне добавлять право «aps-environment» в профиль обеспечения, и если да, то где и как? (См., Среди прочего, http://www.airplaysdk.com/node/3174)

Люблю разработку для iPhone, но, черт возьми, временами это может быть фурор!


person JulianB    schedule 15.04.2011    source источник
comment
Копнув немного глубже, я нашел ОТВЕТ на второй вопрос ... Apple должна включить пару aps-environment в файл mobileprovision, значение должно быть разработка или распространение. По-видимому, существует ошибка, из-за которой эта пара иногда не указывается при создании сертификата. Проверьте, открыв файл в текстовом редакторе   -  person JulianB    schedule 16.04.2011
comment
И похоже, что идентификатор пакета приложения чувствителен к регистру (поле Indentifier на панели свойств окна Target Info)   -  person JulianB    schedule 16.04.2011
comment
ЭТА ПРОБЛЕМА заставляет меня плакать   -  person Kyle Clegg    schedule 20.08.2012


Ответы (19)


Я обнаружил этот вопрос, когда переходил из среды разработки в рабочую для приложения, над которым я работаю. Этот процесс включал создание нового профиля, нового идентификатора приложения и т. Д. Я создал идентификатор приложения и профиль, но агент группы должен был настроить push-уведомления. Я столкнулся с проблемой «не найдена допустимая строка прав 'aps-environment' для приложения», когда я попытался возобновить тестирование с новым профилем (после того, как приложение было настроено для push-уведомлений). Затем я вспомнил, что читал небольшую оговорку в документации:

«Вы должны каким-то образом изменить профиль (например, переключить опцию), чтобы портал сгенерировал новый профиль обеспечения. Если профиль не настолько« загрязнен », вам предоставляется профиль без прав на push. "

Источник: Руководство по программированию локальных и push-уведомлений

Для меня «испачкать» профиль обеспечения и переустановить его - это все, что нужно было для решения проблемы. Согласно документации, это было необходимо, потому что профиль подготовки был создан до того, как приложение было настроено для push-уведомлений. Это может кому-то помочь, а может и не помочь, но это, вероятно, объясняет (и устраняет) необходимость вручную добавлять что-либо в профиль обеспечения.

person J.R. Armstrong    schedule 25.09.2011
comment
Полностью сработало для меня, спасибо! Совершенно недопустимо, чтобы сайт разработчиков Apple работал так плохо. - person diatrevolo; 02.12.2011
comment
Да, у меня это сработало. Каждый раз, когда вы обновляете App-id, обновляйте свои профили подготовки. Вы не получите никаких указаний от Apple об этом. Но ты должен это сделать. Нет необходимости редактировать какие-либо XML или права - person Dhilip; 03.04.2012
comment
Я столкнулся с этой проблемой, когда удалил свое приложение для разработки со своего IPad, а затем попытался запустить его снова. Я выполнил инструкции по загрязнению профиля подготовки, повторно загрузил через органайзер, закрыл и открыл xcode, перестроил и развернул, после чего все заработало. Это хромой обходной путь. - person Paul Fryer; 16.08.2012
comment
Эта проблема все еще присутствует и вызвала у меня многочасовые проблемы с CloudKit. Проверка профиля обеспечения показала, что отсутствует ключ aps-environment. Я регенерировал профили обеспечения, много раз пытался удалить их, но безрезультатно. В конце концов мне удалось испачкать профиль подготовки, изменив контейнеры iCloud, к которым приложение могло получить доступ. Тем не менее, в работающем профиле обеспечения нет ключа aps-environment. - person user2002649; 15.11.2014

Я столкнулся с той же проблемой «не найдена допустимая строка полномочий 'aps-environment' для приложения», но приведенные выше решения не помогли мне.

Мне не удалось найти очень хорошую документацию об этой ошибке или хотя бы о ключевом "aps-environment".

После того, как я немного повозился, вот что решило для меня проблему:

Откройте свой сертификат обеспечения разработки, «Appname.mobileprovision» с помощью текстового редактора, найдите ключ «Entitlements», затем добавьте все значения, найденные здесь, в свой файл Entitlements, на который ссылается ваш параметр Entitlements для подписи кода.

Вот пример того, какие ключи / значения вы найдете внутри:

<key>application-identifier</key>
<string>xyz.com.xyz.xyz</string>
<key>aps-environment</key>
<string>development</string>
<key>com.apple.developer.ubiquity-container-identifiers</key>
<array>
<string>xyz.*</string>
</array>
<key>com.apple.developer.ubiquity-kvstore-identifier</key>
<string>xyz.*</string>
<key>get-task-allow</key>
<true/>
<key>keychain-access-groups</key>
<array>
<string>xyz.*</string>
</array>

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

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

person ozz    schedule 12.09.2011
comment
Это правильный ответ. Решение состоит в том, чтобы просто скопировать значения из файла .mobileprovision в файл с правами. Я бы хотел, чтобы Apple где-нибудь задокументировала это. Если после этого вы продолжаете получать ошибку, перезапустите XCode. Это исправило это для меня. - person Aneil Mallavarapu; 02.02.2012
comment
Мне это тоже помогло. Я был уверен, что у меня одни и те же значения, и пробовал разные их комбинации, но что-то было по-другому, и copypaste решил это. Может быть, важен был просто порядок ключей. - person JaakL; 25.06.2012

Настройка:

Mac OS X 10.8 + Xcode 4.4

Мое простое решение:

  1. Повторно выпустите свой специальный профиль подготовки после того, как вы настроите push-уведомления для своего идентификатора приложения и импортируете их в Xcode.
  2. Загляните в папку .xcodeproj (щелкните правой кнопкой мыши -> Показать содержимое пакета) и удалите папку xcuserdata.
  3. Вот и все ;)

Некоторые подсказки по этому поводу:

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

Apr  1 20:56:10 unknown installd[384] <Error>: entitlement 'keychain-access-groups' has value not permitted by a provisioning profile
Apr  1 20:56:10 unknown installd[384] <Error>: entitlement 'get-task-allow' has value not permitted by a provisioning profile
Apr  1 20:56:10 unknown installd[384] <Error>: entitlement 'application-identifier' has value not permitted by a provisioning profile
Apr  1 20:56:10 unknown installd[384] <Error>: 2ff66000 verify_signer_identity: Could not copy validate signature: -402620394
Apr  1 20:56:11 unknown installd[384] <Error>: 2ff66000 preflight_application_install: Could not verify executable at /var/tmp/install_staging.44jV0O/foo_extracted/Payload/PersonalTrainer-Tester-iPhone.app
Apr  1 20:56:11 unknown com.apple.itunesstored[392] <Notice>: MobileInstallationInstall: failed with -1
Apr  1 20:56:11 unknown installd[384] <Error>: 2ff66000 install_application: Could not preflight application install
Apr  1 20:56:11 unknown installd[384] <Error>: 2ff66000 handle_install: API failed
Apr  1 20:56:11 unknown installd[384] <Error>: 2ff66000 send_message: failed to send mach message of 71 bytes: 10000003
Apr  1 20:56:11 unknown installd[384] <Error>: 2ff66000 send_error: Could not send error response to client

Существует техническое примечание, в котором рекомендуется использовать codesign -d --entitlements - <YourAppName>.app, чтобы проверить, правильно ли подписано ваше приложение. для уведомлений Apple Push. В случае, если в выводе команды codeign не указано, что aps-environment настроена на производство или разработку, есть что-то подозрительное!

Насколько я знал до сих пор, мои приложения, подписанные с помощью специального профиля подготовки, всегда имеют embedded.mobileprovision внутри папки <YourAppName>.app с определенной частью в них, например:

<key>Entitlements</key>
<dict>
    <key>application-identifier</key>
    <string>ABCDEFGH.com.myappname.tester</string>
    <key>aps-environment</key>
    <string>production</string>
    <key>get-task-allow</key>
    <false/>
    <key>keychain-access-groups</key>
    <array>
        <string>ABCDEFGH.*</string>
    </array>
</dict>

После использования кода я понял, что в фактический двоичный файл в <YourAppName>.app также включен некоторый XML, который говорит о чем-то совершенно другом, чем мой файл embedded.mobileprovision:

<!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>ABCDEFGH.com.myappname.tester</string>
    <key>get-task-allow</key>
    <true/>
    <key>keychain-access-groups</key>
    <array>
        <string>ABCDEFGH.com.myappname.tester</string>
    </array>
</dict>
</plist>

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

The executable was signed with invalid entitlements.
The entitlements specified in your application's Code Signing Entitlements
file do not match those specified in your provisioning profile. (0xE8008016).

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

person vinzenzweber    schedule 01.04.2012
comment
Удаление папок xcuserdata устранило проблему для меня! Спасибо! - person Gilimanjaro; 26.07.2012
comment
Xcuserdata исправила это для нас, большое спасибо! Мне нужно было только удалить карту, связанную с пользователем, который раньше контролировал проект. - person nj.; 07.11.2012

По сути, ответ такой же расплывчатый, как говорят все.

  • Убедитесь, что у вас есть добавленный «Entitlements.plist» (новый файл / подпись кода / права)
  • Добавьте "get-task-allow" (логическое значение Выкл.) В Entitlements.plist
  • Добавьте пару «aps-environment» «production» в Entitlements.plist - этот последний шаг может быть ненужным, но это был один из шагов, которые я сделал непосредственно перед тем, как он сработал.
  • Удалите старые файлы mobileprovision с iPhone / iPod (в меню «Настройки» / «Общие»),
  • Удалите старые файлы mobileprovision из XCode Organizer
  • Удалить приложение с iPhone / iPod
  • Выйти из XCode
  • Скачать новую копию Provisioning Certificate
  • Проверьте наличие пары "aps-environment" "production" в сертификате с помощью текстового редактора.
  • Запустить XCode
  • Добавьте новый файл mobileprovision, перетащив его на значок XCode Doc.
  • Убедитесь, что вы переназначили / назначили правильный сертификат в Target Info: Code Signing: Code Signing Identity.
  • Дважды проверьте результаты сборки, чтобы убедиться, что он использует правильный профиль и правильно подписан.

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

person JulianB    schedule 29.04.2011
comment
Так что мне не нужен Entitlements.plist, чтобы это работало ... но мне пришлось переделывать его несколько раз. В основном потому, что старый профиль все время всплывал. Убедитесь, что вы удалили его везде (проект и цель) и продолжайте проверять, чтобы убедиться, что он исчез !!. - person pho0; 21.10.2011
comment
Как вы сказали, не уверен, какая комбинация заставила его работать, но после нескольких дней поиска ваш пост - единственный, который решил эту проблему для меня. Спасибо вам в миллион раз больше! - person AngeloS; 21.11.2011

Используя XCode4 и получив ту же строку «для приложения не найдена допустимая строка полномочий 'aps-environment'», мне пришлось сделать следующее:

  • Удалите старые профили обеспечения с обеих панелей Библиотека + Устройство в Организаторе.
  • Восстановите новый профиль с APN dev, включенным на веб-сайте портала разработчиков.
  • Убедитесь, что новый профиль добавлен в обе панели «Библиотека + устройство» в Организаторе.
  • Вручную удалите мое приложение с устройства (удерживая, пока оно не начнет покачиваться, и нажмите X)
  • CMD + OPT + SHIFT + K (чистая папка сборки) и CMD + SHIFT + K (чистая)
  • Установите правильный профиль в Project> Build Settings> Code Signing.
  • Убедитесь, что в разделе «Цели> Сводка» не установлен флажок «Использовать права».
person Max Ogden    schedule 15.12.2011

В разделе «Проект» -> «Настройки сборки» -> «Подписывание кода» убедитесь, что вы выбрали правильный профиль подготовки (тот, у которого включена принудительная передача).

Это было все, что мне нужно было изменить, чтобы все заработало.

person Steffo    schedule 21.05.2012

У меня ничего из вышеперечисленного не сработало!

  1. Удалите все профили подготовки в Xcode Organizer.
  2. Удалите все сертификаты разработчиков в Связке ключей
  3. Удалите все профили подготовки на устройстве iPhone.
  4. На портале обеспечения iOS удалите профиль обеспечения разработки, который был автоматически создан Xcode.
  5. Создайте новый профиль обеспечения, назначив правильную комбинацию (сертификат / AppID / устройство).
  6. Загрузите новый профиль обеспечения
  7. Импортируйте новый профиль обеспечения в Xcode Organizer.
  8. CMD + Option + Shift + K
  9. CMD + Shift + K
  10. CMD + R
  11. Ура :)
person DeZigny    schedule 31.08.2012

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

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

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

person Will    schedule 17.04.2013

решение для 10.8 Xcode 4.4 - открыть файл appname.entitlements

и если ключ DataProtectionClass имеет значение NSFileProtectionComplete, удалите его!

Удаление этого ключа позволяет мне тестировать приложения из Xcode на устройствах (это не влияло на моделирование).

person Flori    schedule 06.06.2012

У меня такая же проблема. Для меня исправление было таким:

  1. Удалены и перезагружены профили обеспечения из органайзера.
  2. Выбрал мой именованный профиль обеспечения в настройках проекта-> подпись кода. Как-то захотелось использовать тождество blabla. *.

Профиль с подстановочными знаками ([префикс]. *) Не работает, когда вы пытаетесь запустить приложение с поддержкой APN, вам необходимо указать профиль с поддержкой APN.

person Hersker    schedule 20.06.2012

Я понял это только через несколько часов, поэтому в дополнение к тому, что сказал JulianB,

  • Убедитесь, что у вас есть значок приложения. У вас, вероятно, есть один, но я добавил толчок, когда мы были между версиями значков. Я пробовал выделять разные вещи, и в конце концов это было все, что требовалось, так что это могло даже не быть проблемой с сертификатом или настройкой подписи.
  • Я также читал, что поврежденный файл изображения также может быть причиной
  • я не добавил / не увидел ключ aps-environment в моем файле rights.plist
  • очистить все мишени перед постройкой
person katbyte    schedule 25.05.2011

Для меня это сработало после изменения идентификатора пакета на что-то случайное. Убедитесь, что ошибка подписи действительно появляется (удалите все профили обеспечения из органайзера и устройства и выполните чистую сборку CMD + OPT + SHFT + K, затем CMS + SHFT + K, а затем CMD + R), а затем снова измените идентификатор пакета на соответствующий.

person Samyak Bhuta    schedule 27.03.2012

Мое решение заключалось в том, чтобы удалить и снова создать Профиль обеспечения разработки. Он был указан как «Недействительный» - срок действия не истек, а также не удалось продлить (Xcode 4.3.2 и iOS 5.1)

person JOM    schedule 28.03.2012

Убедитесь, что вы выбрали правильный. Профиль обеспечения. Я обнаружил, что пытался использовать профиль Team Provisioning (для идентификатора приложения: *). Далее в списке был правильный профиль для приложения.

person MadNik    schedule 28.05.2012

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

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];

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

Проблема заключалась в том, что новый AppId не был настроен для push-уведомлений, а звонил

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];

создавал ошибку. Когда я настроил push-уведомления, ошибка больше не отображалась.

person Josip B.    schedule 29.06.2012

У меня была эта проблема, сценарий был:

Я установил идентификатор приложения без поддержки push-уведомлений. Я использую Xcode 5.1 + iOS 7.1

Позже отредактировал идентификатор приложения, чтобы добавить push-уведомления в разработку и производство.

Созданы сертификаты APNs для обоих.

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

"Error Domain=NSCocoaErrorDomain Code=3000 "no valid 'aps-environment' entitlement string
 found for application" UserInfo=0x15b200 {NSLocalizedDescription=no valid     
'apsenvironment' entitlement string found for application}" error.

Решение, которое сработало для меня, было:

  1. Удалите профили подготовки для разработки и распространения (Xcode и портал для разработчиков).
  2. Удалите свой идентификатор приложения (портал разработчика).
  3. Создайте новый идентификатор приложения с поддержкой push-уведомлений для разработки и производства.
  4. Создайте новые профили обеспечения, используя НОВЫЙ идентификатор приложения.
  5. Установите их в Xcode.
  6. Тестирование при разработке и выпуске дистрибутива.
person Fabian Guerra Soto    schedule 01.04.2014

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

Сделайте профиль правильным, и это сработает для меня. Надеюсь, это поможет.

person jxdwinter    schedule 11.06.2014

В моем случае решение этой ошибки оказалось простым после нескольких часов работы с сертификатами ...

На вкладке Capabilities конфигурации проекта мне пришлось включить флаг Push Notification, чтобы файлы среды были сгенерированы.

macOS Sierra 10.12 - Xcode 8.1

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

person RWIL    schedule 07.11.2016

На самом деле ваш предварительный профиль удален с сайта разработчика Apple. И вы получаете ошибку для

person dipak dhondge    schedule 21.02.2015