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

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

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

1) У меня есть профиль обеспечения на моем iPhone, который имеет Push включен

2) В моем тестовом проекте Xcode у меня есть профиль профилей, выбранный как идентификатор подписи (в настройках сборки > Подпись кода)

enter image description here

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

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

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

6) У меня есть Enable Enitlements, проверенная в разделе Summary.

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

8) В файле Tinker6.entitlements у меня есть следующее (которое я собрал правильно, основываясь на нескольких разных сообщениях по всему Интернету, но я не могу найти ничего определенного от самого 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>

/окончательное обновление

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

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

- следует следующий фон -

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

enter image description here

И установлен идентификатор пакета двух мест:

enter image description hereenter image description here

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

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

Ответ 1

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

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

Ответ 2

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

Портал обеспечения безопасности iOS → Предоставление → Ваш сертификат → EDIT → Make Изменить → Загрузить новое обеспечение

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

Ответ 3

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

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

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

enter image description here

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

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

Ответ 4

Я столкнулся с этой проблемой в Xcode 8. Вам необходимо включить функцию Target- > capability- > push. Проверьте скриншот.

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

Ответ 5

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

Голова над Xcode → Настройки → Выберите вкладку "Учетные записи" → Подробнее... → Нажмите кнопку обновления в левом нижнем углу → Готово.

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

Ответ 6

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

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

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

enter image description here

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

enter image description here

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

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

Надеюсь, что это поможет.

Ответ 7

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

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

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

Построить, запустить, он работает.

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

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

Ответ 8

XCode 6.1.1 и несколько аккаунтов разработчиков Apple

Еще один ответ для этого уже довольно всеобъемлющего сочетания: я снова столкнулся с этой проблемой сегодня, и на этот раз это произошло из-за того, что у меня было несколько учетных записей Apple. Мне нужно было сначала добавить вторую учетную запись разработчика в XCode > Предпочтения > Учетные записи > +

Убедитесь, что функция Push Notification включена (ON)

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

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

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

Ответ 9

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

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

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

Затем обновите файлы обеспечения.

Ответ 10

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

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

Ответ 11

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

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

  • Сделайте так, как было предложено выше, и создайте идентификатор APP
  • Затем создайте профиль подготовки
  • НЕ используйте профиль групповой подстановки (управляемый xcode one) в разделе разработки обеспечения. Вам нужно сделать отдельный, используя этот идентификатор приложения, для которого вы активировали push-уведомление. Таким образом, когда вы его разработаете, будет встроена функция push-уведомления.

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

Ответ 12

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

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

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

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

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

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

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

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

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

Ответ 13

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

Я изменил свою цель на нижний регистр, и она сработала. Примечание. Ключом для меня был параметр "Кодировка" в настройках Build был установлен в мой сертификат разработчика по умолчанию; а не профиль предоставления APNTest.

Ответ 14

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

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

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

Ответ 15

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

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

и проверьте aps-environment и application-identifier.

Ответ 16

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

Решение заключается в обновлении сертификата и подписывании приложения с ним.

Ответ 17

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

Когда вы загружаетесь из xCode в App Store, убедитесь, что у вас есть aps-environment в правах. Если нет, загрузите их из учетных записей просмотра → Просмотреть сведения → Загрузить все.

Ответ 18

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

Ответ 19

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

Ответ 20

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

Существует файл Entitlement.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 Log Navigator,
найдите "ProcessProductPackaging".

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

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

Ответ 21

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

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

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

Запутанная часть заключалась в том, что у УСТРОЙСТВА уже были правильные профили, и они появились, как ожидалось, в настройках сборки, поэтому все выглядело там корректно, но в XCode LIBRARY их не было, поэтому он подписал приложение с помощью..???

Ответ 22

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

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

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

Ответ 23

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

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

Пожалуйста, найдите ScreenShot, введите описание изображения здесь