Идентификатор пакета и отправка сертификата ... ошибка разрешения aps-environment - PullRequest
68 голосов
/ 15 апреля 2011

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

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

"Error Domain = NSCocoaErrorDomain Code = 3000" не найдена допустимая строка прав доступа "aps-environment" для приложения "UserInfo = 0x15b200 {NSLocalizedDescription =не найдена допустимая строка прав доступа 'aps-environment' для приложения} "error.

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

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

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

Push-сертификат предназначен для

XXXXXXXXXX.com.julianbaker.pwcnewsuk

идентификатора пакета в PwCNewUK-Info.plist is for

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, но иногда она может быть просто ужасной!

Ответы [ 19 ]

88 голосов
/ 25 сентября 2011

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

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

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

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

20 голосов
/ 12 сентября 2011

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

Я не смог найти очень хорошую документацию об этой ошибке или даже просто ключ "aps-environment".

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

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

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

<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, но они, конечно, не были сгенерированы для меня в моем проекте.

6 голосов
/ 02 апреля 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-среды, настроенной на производство или разработку, есть что-то подозрительное!

Насколько я знаю, мои приложения, подписанные с помощью профиля обеспечения adhoc, всегда имеют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>

После использования codeign я понял, что в настоящий бинарный файл в <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 есть какая-то ошибка, которая препятствует обновлению настроек в вашем списке в ваших схемахчто приводит к тому, что ваше приложение будет подписано с неправильным профилем обеспечения в конце.Таким образом, удаляя папку xcuserdata, вы удаляете все схемы.Поэтому Xcode воссоздает их в следующий раз с правильными настройками, и вы снова счастливы.

5 голосов
/ 16 декабря 2011

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

  • Удаление старых профилей обеспечения с обеих панелей «Библиотека + устройство» в Организаторе
  • Восстановление нового профиля с включенным APN dev с сайта портала разработчика.
  • Убедитесь, что новый профиль добавлен на обе панели Library + Device в Organizer
  • Вручную удалите мое приложение с моего устройства (удерживая, пока оно не покачивается и не нажимая X)
  • CMD + OPT + SHIFT + K (очистить папку сборки) и CMD + SHIFT + K (очистить)
  • Установите соответствующий профиль в Project> Настройки сборки> Code Signing
  • Убедитесь, что «Использовать права доступа» не отмечены в разделе «Цели»> «Сводка»
5 голосов
/ 29 апреля 2011

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

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

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

3 голосов
/ 21 мая 2012

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

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

3 голосов
/ 01 сентября 2012

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

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

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

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

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

1 голос
/ 20 июня 2012

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

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

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

1 голос
/ 06 июня 2012

решение для 10.8 Xcode 4.4 состоит в том, чтобы открыть файл appname.entitlements

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...