Как исправить "нет допустимой строки права "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 у меня есть это профиль подготовки, выбранный в качестве удостоверения подписи (в разделе параметры сборки > подпись кода)

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

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

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

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

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

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

Обновлено

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>

/завершение обновления

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

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

--далее следует фон--

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

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

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

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

23 148

23 ответа:

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

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

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

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

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

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

enter image description here

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

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

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

enter image description here

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

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

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

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

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

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

enter image description here

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

enter image description here

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

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

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

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

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

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

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

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

сборка, запуск, работает.

Я только что сделал это.

Это заняло у меня 10 минут от ошибок к успеху.

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

еще один ответ на этот уже довольно полный микс: я снова столкнулся с этой проблемой сегодня, и на этот раз это было связано с тем, что у меня было несколько учетных записей apple. Мне нужно было сначала добавить 2-й аккаунт разработчика в 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. не используйте подстановочный профиль team (управляемый xcode one) в разделе разработки подготовки. Вам нужно сделать отдельный с помощью этот идентификатор приложения, для которого вы активировали push-уведомление. Таким образом, когда вы разрабатываете его будет иметь функцию уведомления толчка встроенный.

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

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

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

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

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

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

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

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

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

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

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

Я изменил свою цель, чтобы быть в нижнем регистре, и это сработало. Примечание: ключ для меня был параметр 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 в магазин приложений убедитесь, что у вас есть aps-среда в правах. Если нет, загрузите их из представления учетные записи - > Просмотр сведений - > загрузить все.

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

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

там, кажется, что-то причудливое с "автоматическими" правами в 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".

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

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

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

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

проблема была (duh), что я не импортировал профили в библиотеку Xcode на новой машине (в органайзере/устройствах в разделе Библиотека->профили подготовки).

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

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

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

enter image description here

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

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

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