для програми не знайдено дійсного рядка прав "aps-середовища"


83

Я намагаюся налаштувати свій додаток на підтримку push-сповіщення, але продовжую отримувати цю помилку: Не вдалося отримати маркер, помилка: Помилка Domain = NSCocoaErrorDomain Code = 3000 "для програми" UserInfo = 0x1f818fc0 {не знайдено дійсного рядка прав "aps-середовища" NSLocalizedDescription = для програми не знайдено дійсного рядка прав 'aps-environment'}

  • Я дозволив своєму додатку підтримувати push-сповіщення (лише для розробки на даний момент).
  • Я створив профіль підготовки ПІСЛЯ увімкнення push-сповіщень.
  • Мій ідентифікатор набору збігається з тим, що відображається у профілі.
  • У моєму файлі профілю є рядок: aps-environment
  • Я переконався, що і в проекті, і в цілі в розділі «Ідентифікація підпису коду» ВСІ значення вибрані для мого профілю підготовки.

Ще якісь ідеї? Дякую.


Немає розуміння про це? Схоже на щось, з чим багато людей зіткнуться ...
Башан,

Відповіді:


64

У моєму випадку вміст у моєму профілі забезпечення:

security cms -D -i ~/Downloads/spolskyDevelop.mobileprovision 
...
<key>application-identifier</key>
<string>P5GM95Q9VV.com.dca.spolsky</string>
<key>aps-environment</key>
<string>development</string>

Був іншим, ніж матеріали в додатку, який був фактично створений (ви можете дізнатися, де він створений, переглянувши вкладку Журнали Xcode)

codesign -d --entitlements - '/Users/drew/Library/Developer/Xcode/DerivedData/spolsky-bdbtdfjeeywhqzccpmmceqvnhgtm/Build/Products/Debug-iphoneos/spolsky-ios.app'
<dict>
    <key>application-identifier</key>
    <string>Y2X6Z7Z2GR.com.dca.spolsky-ios</string>
    <key>get-task-allow</key>
    <true/>
    <key>keychain-access-groups</key>
    <array>
        <string>Y2X6Z7Z2GR.com.dca.spolsky-ios</string>
    </array>
</dict>

Це було правдою, навіть незважаючи на те, що текст підказки "На даний момент відповідає" в розділі Identity Code Signing Identity вказував на правильний профіль підготовки - дивно, так? Щоб зробити дивну історію дивнішою, на моєму пристрої на пристрої встановлювався правильний профіль підготовки (Налаштування-> Загальні-> Профілі), що наводило мене на думку, що профіль підготовки був правильним - але він повертався до підстановочного ідентифікатора коли програма фактично була запущена .

Підказкою була різниця у результатах цих двох команд:

Y2X6Z7Z2GR .com.dca. spolsky-ios проти P5GM95Q9VV .com.dca. спольський

Коли я збігав жирну частину, курсив змінився на автоматичну відповідність. Крім того, результати безпеки та кодовий дизайн були узгоджені, і більше не виникало помилок aps-assignment.

Я припускаю, що XCode використовував збіг у стилі підстановки на моєму ідентифікаторі, що не підстановлював. ("spolsky", зрештою, майже майже "spolsky-ios"), і це пояснює результат "На даний момент відповідає". Але щось у ланцюжку збірки щодо цього є більш суворим, тому під час збірки воно повертається до фактичного ідентифікатора підстановки .


7
Я зіткнувся з подібною проблемою: "Налаштування збірки" проекту відрізнялися від "Налаштування збірки" TARGET ... у моєму випадку мої налаштування Target за замовчуванням були неправильними для профілів підготовки.
Роб

1
Реквізит, виявивши це, я зіткнувся з тією ж проблемою.
Codemonk

1
У одного з моїх колег було таке забезпечення. Однак, мені вдалося вибрати непроменевий ключ підготовки, лише зайшовши в налаштування профілю в Xcode та оновивши список сертифікатів / ключів надання.
cbh2000

1
Мої цільові налаштування для `` налагодження '' використовували iOS Developer / Automatic, що призводило до того, що мій .app виходив із неправильним посвідченням коду. Мені довелося чітко встановити параметри мого проекту та цілі як для налагодження, так і для випуску, щоб використовувати мій новий ідентифікатор підпису коду, моя проблема була виправлена. Це не тільки ваш профіль підготовки, ви також повинні перевірити ці ідентифікатори підпису коду. Не міг би це вирішити без цих чудових команд терміналу!
self.name

6
Тільки для запису: для роботи push-сповіщень потрібно використовувати певний Профіль надання, з ідентифікатором пакета програми, а не один із символом * .
mgarciaisaia

37

Проблема пов’язана з тим, що поточний профіль підготовки не містить інформації APNS, оскільки профіль підготовки створюється ДО створенням сертифіката APNS.

Тому, щоб вирішити проблему, створіть новий профіль підготовки та виберіть профіль забезпечення в Xcode, щоб очистити помилку.


У мене це не спрацювало. Будь-які інші вказівники. будь ласка, подивіться на це: stackoverflow.com/questions/25679750/…
Ajeet

29

У мене була така сама проблема після того, як push-сповіщення вже працювали на моєму пристрої. Здавалося, Xcode кешував щось неправильно, тому оновлення вирішило мою проблему:

  1. Xcode -> Налаштування -> Облікові записи
  2. Перегляньте деталі для свого облікового запису розробника
  3. Просто натисніть Оновити для профілів забезпечення кілька разів. Я бачив ці зміни з кожним оновленням. Продовжуйте освіжати, поки вони не перестануть змінюватися.

Як не дивно, але це спрацювало у мене! Я оновлювався, поки воно не припинило оновлення, потім я очистив папку збірки, а потім перезапустив XCode. Це було після того, як я підтвердив ідентифікатор набору в профілі підготовки та вбудованому додатку (де він збігався в обох, що мене ще більше бентежило).
Шон Майкл Доріан

Кнопки «Оновити» (?) Більше немає
Геррі

9

я отримав цю помилку і не створив нового профілю підготовки; створив новий, а потім довелося перезапустити xCode, але працює зараз!


9

Майте на увазі, що ідентифікатор пакета повинен відповідати профілю підготовки з урахуванням регістру . У мене було щось на зразок com.FirstLast.appname, коли це мало бути com.firstlast.appname. Ну, це зайняло мене досить довго.


У мене була та сама проблема, це мені це вирішило.
kuba

9

Я вирішив цю проблему, увімкнувши можливість push-сповіщень.

Виберіть Проект> Ціль> Можливості> Увімкнути push-сповіщення

перевірити зображення


3

Якщо ця проблема сталася раптово після оновлення до Xcode 8, ви можете знайти попередження на екрані можливостей, яке дозволить вам це автоматично виправити:

Виберіть Проект> Ціль> Можливості> Увімкнути push-сповіщення


Саме це врятувало мене від головного болю. Дякую!
jpaljasma

2

Продукт-> Clean зробив це за мене. Сподіваємось, це робиться для когось іншого.


я роблю обидва чистки. Допоміжна також вторинна очистка через command-option-shift-k.
нічия ..

2

Я зіткнувся з цим у, можливо, не частому випадку використання. Я працюю з Xcode 6 і iOS 8. Я створював низку цілком нових проектів додатків і намагався повторно використовувати той самий ідентифікатор пакета, щоб не потрібно було повторно проходити всі налаштування на стороні порталу. Це теж було лише для тестування пісочниці.

Я виявив би, що, хоча налаштування та реєстрація добре працювали б для першої програми, якщо я видалив цю програму з пристрою, встановив той самий ідентифікатор пакета для другої програми, а потім спробував зареєструвати ПН у цій програмі, я отримав би ця помилка.

Моє рішення було:

  1. Видаліть з пристрою пов’язаний профіль підготовки.
  2. Видаліть пов’язаний профіль підготовки із Xcode.
  3. Закрийте Xcode
  4. Двічі клацніть мій завантажений .mobileprovisionфайл, щоб встановити його назад у Xcode
  5. Відкрийте проект і розгорніть його.

Здається, такий підхід втрачає будь-який попередній стан, і я можу зареєструватися для PN з новим ідентифікатором додатка / того самого пакета.


2

Для тих, хто отримав цю помилку в iOS 10, ви можете спробувати виконати такі дії:

1. очистіть свій проект.
2.і перевірте Цілі -> Можливості -> Push-сповіщення. Якщо воно вимкнено, на ньому.

І проблема вирішиться. Наведені вище кроки допомагають мені позбутися цієї проблеми. Сподіваюся, це комусь допоможе.


0

Для мене спрацював новий профіль забезпечення. Обов’язково використовуйте профіль розробника, якщо ви перебуваєте у розробці (не використовуйте Ad Hoc). Після цього було добре, не маючи уявлення, чому старий перестав працювати правильно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.