Я очень старался создать простое приложение для iOS, которое могло бы получать push-уведомления. Единственная причина, по которой я это делаю, - это установить процедуру, которую могли бы использовать некоторые другие члены команды, и они не смогли найти актуальную, рабочую версию таких инструкций в других местах в Интернете. Наш магазин довольно новый для iOS разработчика, лично я совершенно неопытен с iOS dev и Xcode. Я наткнулся на десятки учебных пособий, статей и сообщений о проблемах от Apple и других стран, и я чувствую, что, возможно, уже почти ...
Вот где я должен (заметьте, что я использую Xcode 4.3 и пытаюсь первоначально развернуть только на iOS 5.1, и я понимаю, что некоторые вещи могли измениться недавно по сравнению с более ранними версиями Xcode, но опять же, я новичок для всех это - и нахожу это совершенно запутанным и запутанным):
1) У меня есть профиль на моем iPhone, на котором включена функция Push
2) В моем тестовом проекте XCode я выбрал этот профиль обеспечения в качестве идентификатора подписи (в Настройках сборки> Подписывание кода)
3) У меня есть идентификатор пакета в разделе «Сводка и информация»> «Пользовательские целевые свойства iOS», установленный правильно * (я думаю ??)
4) У меня есть registerForRemoteNotificationTypes, вызываемый в didFinishLaunchingWithOptions моего делегата
5) У меня есть didRegisterForRemoteNotificationsWithDeviceToken и didFailToRegisterForRemoteNotificationsWithError в моем делегате, настроенный для регистрации токена устройства или ошибки соответственно
6) У меня включена опция Enable Entitlements в разделе Summary.
7) Прямо под этим выбранный файл прав - Tinker6 (название моего тестового проекта), который был сгенерирован автоматически, когда я установил флажок «Включить права».
8) В файле Tinker6.entitlements у меня есть следующее (которое я собрал правильно, основываясь на нескольких разных постах по всему Интернету, но на котором я не могу найти ничего определенного от самой 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 на NO, aps-environment для производства, все четыре возможные комбинации, тоже самое.
Как я могу пройти это? Где полная документация по этому вопросу?
- дальнейшая история следует -
* Что касается идентификатора пакета, мне все еще неясно, как это следует устанавливать в отношении идентификаторов приложений и идентификаторов профилей в профиле Provisioning. На портале Provisioning под идентификаторами приложений у меня есть это (опять же, шифрование номера и домена):
И два комплекта идентификатора пакета установлены, у меня есть это:
Я совсем не уверен, что они верны, или нужно установить один или оба параметра на 12355456A7.com.whwhat.tinker, хотя я пробовал это ранее в процессе, но безуспешно ...
Заметьте, я понимаю, что существует много постов с похожими заголовками, однако все они, похоже, устарели на основании названий файлов и тому подобного, а также того факта, что ни одно из решений не представляется полезным. Я надеюсь, что более высокий уровень детализации, который я дал, гарантирует качественный ответ. Я, вероятно, назначу вознаграждение как можно скорее, и, если вы дадите качественный ответ, который приведет к решению, я назначу вам вознаграждение, а также продвигаю ваш ответ через твиттер и мой блог. Особенно, если вы публикуете действительно хорошую публикацию «вот точные 500 шагов, необходимые для работы простого приложения push-уведомлений, включая подготовку и прочее» в вашем блоге или что-то еще.
Прежде всего, вам не нужен файл разрешений, если вы не добавляете пользовательские пары ключ / значение, которых нет в профиле обеспечения. Когда ваше приложение будет создано, все права из профиля обеспечения будут скопированы в приложение.
Учитывая, что вы все еще видите сообщение об ошибке о пропущенных правах, я могу только предположить, что параметры подписи кода не верны в настройках сборки.
Необходимо убедиться, что для конфигурации «Отладка» выбран правильный профиль, и для безопасности вы выбрали правильный профиль для «Отладки» и дочернего узла с меткой «Любой iOS SDK»:
Несмотря на то, что на этом снимке экрана показан выбранный профиль «Автоматический разработчик», в раскрывающемся списке выберите нужный профиль обеспечения, просто для целей тестирования. Возможно, Xcode автоматически выбирает профиль, отличный от того, который вы хотите.
Также обязательно сделайте чистую сборку, полностью удалите приложение с вашего устройства и т. Д. Это просто для того, чтобы убедиться, что у вас не осталось какого-то старого пуха.
источник
-
до пути:codesign -d --entitlements - /path/to/my.app
. На этом этапе также стоит дважды проверить, что вы находитесь в каталоге Debug-iphoneos, так как «Show In Finder» иногда может привести вас в неправильное место.Я сталкивался с этой проблемой в Xcode 8. Вы должны включить Target - >abilities -> push-уведомления. Проверьте скриншот.
источник
Самый простой способ сделать это из ваших учетных записей с Xcode:
Перейдите через Xcode -> Настройки -> Выберите вкладку Аккаунты -> Просмотр сведений -> Нажмите кнопку обновления внизу слева -> Готово.
Постройте снова, и это должно работать.
источник
Хорошо, я столкнулся с проблемой раньше. Поскольку push-уведомление требует реализации на стороне сервера, для меня воссоздание профиля не было вариантом. Поэтому я нашел это решение БЕЗ создания нового профиля обеспечения.
XCode неправильно выбирает правильный профиль обеспечения, хотя мы выбираем его правильно.
Сначала зайдите в органайзер. На вкладке «Устройства» в разделе «Предоставление профиля из библиотеки» выберите нужный профиль, который мы пытаемся использовать. Щелкните правой кнопкой мыши и выберите «Показать профиль в Finder».
Правильный профиль будет выбран в открывшемся окне Finder. Обратите внимание на имя.
Теперь перейдите в Xcode> Log Navigator. Выберите фильтр для «Все» и «Все сообщения». Теперь на последнем этапе (Build Target) найдите шаг под названием «ProcessProductPackaging», разверните его. Обратите внимание на имя профиля обеспечения. Они НЕ должны совпадать, если у вас есть ошибка.
Теперь в окне Opened Finder удалите мошеннический профиль обеспечения, который использует XCode. Теперь строить снова. Ошибка должна быть устранена. Если нет, повторите процедуру, чтобы найти другой мошеннический профиль, чтобы удалить его.
Надеюсь это поможет.
источник
Ответ был таков: начните все сначала, сделайте все то же самое, но создайте новый профиль обеспечения и установите его. Это сработало. Проверка всех деталей (права на предоставление услуг мобильной связи) выглядит точно так же, как и все в моем вопросе здесь. Но сейчас это работает. Apple: WAT?
Конечно, было бы очевидно сделать это, если бы можно было удалить профили обеспечения. Но так как это невозможно, я не хотел загромождать нашу команду кучей тестовых профилей. Тем не менее, в конце концов потерял терпение и все равно попробовал, и все получилось. Whatevs.
источник
Удалите старый профиль обеспечения из XCode в Организаторе.
Затем сгенерируйте новый профиль обеспечения для того же идентификатора пакета на портале обеспечения iOS (после того, как вы включили push).
Импортируйте новый профиль обеспечения в XCode, установите его в настройках сборки приложения.
Сборка, запуск, все работает.
Я только что это сделал.
От ошибки до успеха у меня ушло 10 минут.
источник
XCode 6.1.1 и несколько учетных записей разработчиков Apple
Еще один ответ на этот и без того всеобъемлющий микс: сегодня я снова столкнулся с этой проблемой, и на этот раз это было связано с тем, что у меня было несколько учетных записей Apple. Мне нужно было сначала добавить 2-ую учетную запись разработчика в XCode> Настройки> Учетные записи> +
Убедитесь, что функция push-уведомлений включена
Затем мне нужно было явно включить встроенную покупку в приложении (мне не нужно было делать это ранее). XCode> (окно приложения)> Targets> Capabilities> In-App Purchase ON (и на этом этапе мне дали возможность выбрать правильный сертификат)
Обратите внимание, что я уже добавил сертификат с поддержкой Push, дважды щелкнув его в Finder.
источник
(Xcode 5) Хорошо, потратив час, я решил свою проблему. Даже если вы повторно сгенерируете файл обеспечения в Xcode 5, вы должны вручную обновить свою учетную запись. Я только изменил файл обеспечения во вкладке Организатора, который не работал, XCode продолжил сборку со старым файлом обеспечения.
Так что иди в
Затем обновите ваши файлы обеспечения.
источник
Моя проблема состояла в том, что я просто подписывался с помощью профиля подстановочного знака, управляемого XCode.
После того, как я создал профиль для конкретного приложения (и загрузил его, дважды щелкнул по нему и убедился, что мои настройки сборки ссылались на него), я успешно получил токен устройства APNS.
источник
У меня была такая же проблема, как и у всех остальных, и попробовал все вышеперечисленные трюки, ничего не получалось. Я даже удалил и начал заново с другой учетной записью разработчика.
Что сработало для меня в конце
Я не знаю, можете ли вы включить это для приложения с подстановочными знаками, но после попытки как минимум 12 различных предложений и потери нескольких дней, я надеюсь, что это кому-то поможет
источник
Вы упоминаете профиль обеспечения, но я не вижу упоминания о Apple Push Profile.
Чтобы использовать Push, у вас должен быть push-профиль (есть два, один для разработки и один для выпуска). После того, как вы его создали, вам нужно убедиться, что он содержит соответствующие сертификаты (см. Раздел РЕДАКТИРОВАТЬ ниже).
Это отличный учебник, который проведет вас через все шаги:
http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12
Мне или кому-то еще потребовались бы часы и часы, чтобы написать подробный подробный ответ, подобный этому учебнику, поэтому я не собираюсь пытаться и не претендовать на награду, когда этот учебник уже существует.
PS Я считаю, что вам больше не нужны права, это наследство.
РЕДАКТИРОВАТЬ: Вы также должны проверить, что у вас есть необходимые профили на устройстве - перейдите в настройки, затем общие, профили, проверьте, перечислены ли ваши профили, особенно, конечно, профиль push. Вы также можете проверить это в разделе «Органайзер» XCode. В Организаторе есть два раздела, в которых говорится о профилях обеспечения - один в левом верхнем углу в библиотеке (это профили в XCode, которые вы используете для подписи и т. Д.). Также вы увидите раздел вызова профилей обеспечения для подключенного устройства это профиль, который установлен на телефоне. Если они не установлены на телефоне, вы можете загрузить их с веб-сайта портала обеспечения, а затем нажать кнопку «Добавить» в нижней части окна «Органайзер».
На портале инициализации вы также должны убедиться, что в Apple Push Profile включены сертификаты: - нажмите Provisioning в левом меню - вы увидите список своего профиля, выберите РЕДАКТИРОВАТЬ Apple Push-профиль - вы увидите В разделе сертификатов со списком разработчиков, тестеров и т. д., которые есть в вашем проекте, убедитесь, что для них установлен флажок. - вы также увидите раздел устройств, убедитесь, что устройство, на котором вы тестируете, было добавлено.
Если у вас есть старые профили в XCode или на устройстве, удалите их и загрузите / обновите / установите все новые профили с портала обеспечения
источник
Столкнулся с этим же вопросом сам. Для меня проблема заключалась в том, что название моего продукта ($ TARGET_NAME) не было написано заглавными буквами, как в сертификате Apple. Например, у меня был com.companyid.APNDemo, тогда как сертификат Apple использовал com.companyid.apndemo.
Я изменил свою цель на строчные, и это сработало. Примечание. Подсказка для меня заключалась в том, что настройка подписи кода в настройках сборки была установлена на мой сертификат разработчика по умолчанию; не профиль обеспечения APNTest.
источник
Многие из приведенных выше ответов являются правильными. Тем не менее, кажется, что есть несколько возможных ошибок при работе с этим.
У меня была проблема с заглавными буквами в моем идентификаторе приложения. Мой идентификатор приложения по какой-то причине не был написан заглавными буквами, но мое приложение было После того, как я воссоздал идентификатор приложения с правильной прописной буквой, все заработало гладко. Надеюсь это поможет. Хотя, чертовски разочаровывает.
PS, если это все еще не работает, попробуйте отредактировать поле идентификатора подписи кода вручную с помощью «edit». Измените вторую строку с именем правильного имени профиля обеспечения.
источник
Мне потребовались часы, чтобы решить это. Учитывая, что кто-то использует собственные сценарии для подписи и упаковки, в то время как другие используют сам xcode, есть только один способ проверить, что закончилось в вашем приложении. Сбросить ваши права с
codesign --display --entitlements :- path/to/MyApp.app
и проверить
aps-environment
иapplication-identifier
.источник
Эта ошибка может произойти, когда ваш сертификат истек.
Решение - обновить сертификат и подписать с ним заявку.
источник
Вы должны убедиться, что в ваших профилях обеспечения ( https://developer.apple.com/account/ios/profile/ ) есть профиль распространения iOS.
Когда вы загружаете из xCode в App Store, убедитесь, что у вас есть aps-среда в разрешениях. Если нет, загрузите их из «Просмотр учетных записей» -> «Просмотр сведений» -> «Загрузить все».
источник
У меня была похожая проблема. Я прыгал между XCode 7 и 8 по разным причинам. Как только вы используете 8 для сборки, вам нужно будет использовать 8. Я просто использовал Xcode 8 и применил некоторые из предложенных выше изменений, и это сработало.
источник
воссоздание предварительных файлов исправило все мои проблемы.
источник
Кажется, что-то странное с «автоматическими» правами в Xcode 4.6.
Существует файл Entitlement.plist для каждого SDK по адресу:
Обходное решение, которое я нашел, состояло в том, чтобы отредактировать этот файл и вручную добавить скрытый ключ aps-environment так:
Затем Xcode генерирует правильный файл Xcent, который содержит ключ aps-environment по адресу:
Вы можете определить местонахождение файла Xcent с помощью Навигатора журналов Xcode,
поищите «ProcessProductPackaging».
К сожалению, это единственный способ, который я нашел, который решает проблему .
(и, наконец, теперь можно правильно получить push-токен)
Просто интересно, есть ли другое более элегантное решение.
Пожалуйста, смотрите мой вопрос SO для более подробной информации об этом:
автоматическое разрешение Xcode 4.6 не работает - «нет действительной среды APS»
источник
Перед удалением и регенерацией AppIDs / Profiles убедитесь, что в вашей библиотеке и устройстве установлены одинаковые (и правильные) профили.
Я начал видеть эту ошибку после перехода на новый компьютер. Push работал правильно до миграции.
Проблема была (не очень) в том, что я не импортировал профили в библиотеку Xcode на новом компьютере (в Organizer / Devices в Library-> Provisioning Profiles).
Заблуждение заключалось в том, что УСТРОЙСТВО уже имело правильные профили, и они отображались, как и ожидалось, в настройках сборки, поэтому там все выглядело правильно, но в БИБЛИОТЕКЕ XCode их не было, поэтому оно подписывало приложение с ... ?? ?
источник
Это было то, что исправило это для меня. (Я уже пытался включить / выключить возможности, воссоздать профиль обеспечения и т. Д.).
В Параметры построения вкладки в Code Signing Возмещений , мой .entitlements файл не был ссылку для всех разделов. Как только я добавил его в раздел Any SDK , ошибка была устранена.
источник
Я опробовал все ответы, перечисленные здесь, но никто не решил мою проблему. В моем случае эта ошибка связана с моей глупой ошибкой в создании Appid. Я использовал Wildcard идентификатор приложение вместо использования Явного App ID вызвал проблему
Если вы хотите, чтобы приложение получало удаленные уведомления (push-уведомления), вам нужно использовать явный идентификатор приложения , например com.tutsplus.push , вместо com.tutsplus. *
Пожалуйста, найдите ScreenShot,
источник