it-swarm.com.ru

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

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

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

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

2) В моем тестовом проекте XCode я выбрал этот профиль обеспечения в качестве идентификатора подписи (в Настройках сборки> Подписание кода)

enter image description here

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

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

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

6) У меня включен флажок "Включить права" в разделе "Сводка".

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

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-allow на NO, aps-environment для производства, все четыре возможные комбинации, тоже самое.

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

- далее следует история вопроса -

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

enter image description here

И два комплекта идентификатора пакета установлены, у меня есть это:

enter image description hereenter image description here

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

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

151
jwl

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

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

18
jwl

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

портал обеспечения iOS -> Подготовка -> Ваш сертификат -> РЕДАКТИРОВАТЬ -> Внести изменения -> Загрузить новую подготовку

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

94
elp

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

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

Необходимо убедиться, что для конфигурации "Отладка" выбран правильный профиль, и для безопасности вы выбрали правильный профиль для "Отладки" и дочернего узла с меткой "Любой iOS SDK":

enter image description here

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

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

68
Mike Weller

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

enter image description here

63
DipakSonara

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

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

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

47
ooxio

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

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

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

enter image description here

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

enter image description here

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

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

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

19
Max

Удалите старый профиль обеспечения из XCode в Организаторе.

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

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

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

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

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

18
user1006117

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

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

Убедитесь, что функция push-уведомлений включена

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

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

enter image description here

16
kris

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

Так что иди в

Xcode> Настройки> Аккаунты> Просмотр сведений (выберите аккаунт)

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

11
Ömer Faruk Almalı

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

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

7
Graham Perks

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

Что сработало для меня в конце

  1. Сделайте как предложено выше и создайте APP ID
  2. Затем создайте профиль обеспечения
  3. НЕ ИСПОЛЬЗУЙТЕ групповой профиль подстановки (управляемый xcode one) в разделе разработки обеспечения. Вам нужно создать отдельное приложение, используя тот идентификатор приложения, для которого вы сделали активным Push-уведомление. Таким образом, при разработке будет встроена функция push-уведомлений.

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

6
Michael Ellams

Вы упомянули профиль обеспечения, но я не вижу упоминания о Apple Push-профиле.

Для использования Push у вас должен быть профиль Push (есть два, один для разработки и один для выпуска). После того, как вы его создали, вам нужно убедиться, что он содержит соответствующие сертификаты (см. Раздел РЕДАКТИРОВАТЬ ниже).

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

http://www.raywenderlich.com/3443/Apple-Push-notification-services-tutorial-part-12

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

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

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

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

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

3
Gruntcakes

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

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

2
David Carrico

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

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

1
Nadav B

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

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

Постскриптум если это все еще не работает, попробуйте отредактировать поле идентификатора подписи кода вручную с помощью "edit". Измените вторую строку с именем правильного имени профиля обеспечения.

1
matrinox

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

1
Faris Muhammed

Эта ошибка может произойти, когда ваш сертификат истек.

Решение - обновить сертификат и подписать с ним заявку.

1
vahotm

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

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

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

1
dwery

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

1
Brent Brookler

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

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

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

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

0
Rodin Lyasoff

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

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

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

0
AmitP

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

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

Пожалуйста, найдите ScreenShot, enter image description here

0
arunjos007

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

На вкладке (== --- ==) в правах подписи кода мой .entitlements файл не является ссылкой для всех разделов. Как только я добавил его в раздел любого SDK , ошибка была устранена.

enter image description here

0
mogile_oli