Xcode 6 - Як вибрати сертифікат підпису / профіль надання для спеціальної дистрибуції?


143

Для розповсюдження програми нашим тестерам ми використовуємо Xcode, який ми робимо за допомогою наступного процесу:

  • Застосування архіву
  • Поширюйте для спеціальної роботи
  • Виберіть профіль надання
  • Збережіть .ipa у папці

Але з Xcode 6 цей робочий процес трохи змінився. Я все ще можу вибрати варіант спеціального розповсюдження, але не можу вибрати потрібний профіль забезпечення. Це не дає нам контролю над тим, який сертифікат підпису використовується та конфігурація профілю надання (ми використовуємо push-сповіщення).

За замовчуванням iPhone distributionвикористовується ідентифікація підпису та створюється певний XC Ad Hocпрофіль надання, який можна побачити на зображенні нижче: Експорт IPA Якщо натиснути стрілку біля профілю надання, вона відкриє папку з профілями резервування.

Отже, моє питання:

Чи є в Xcode 6 спосіб вибору профілю забезпечення, який використовується при спеціальному розповсюдженні?

Дякую!


Хтось знає, чи це було виправлено? Чи існує можливість розповсюдження збірки для користувачів iOS 7 для тестування push-повідомлень?
haupman

використовуючи версію Xcode 6 GM, той самий випуск ...
Кріс Чен

Тож у нас поки немає хорошого рішення для цього? відповіді нижче не працюють для мене. Чи можемо ми використовувати профіль забезпечення XC ?? Я не хочу втрачати тиждень в очікуванні огляду яблук. Спасибі
Miles M.

2
У мене сьогодні ця проблема, і схоже, що Xcode використовує лише профілі розповсюдження, які використовують усі пристрої, які ви зареєстрували в Інтернеті.
HackingOtter

1
Серйозно? Ми не можемо вибрати файл резервування? Я вірю, що Йоссаріан живе.
ajbraus

Відповіді:


52

Я зіткнувся з тією ж проблемою, вирішеною за допомогою командного рядка сценарію інструмента "xcodebuild", який попередньо встановлений з Xcode 6 (не потрібно було повторно встановлювати Xcode 5).

http://www.thecave.com/2014/09/16/using-xcodebuild-to-export-a-ipa-from-an-archive/

Сценарій у терміналі:

xcodebuild -exportArchive -archivePath $projectname.xcarchive -exportPath $projectname -exportFormat ipa -exportProvisioningProfile 'Provisioning Profile Name'

1
це працює для мене! в інших відповідях за допомогою перемикача xcodebuildне було -exportProvisioningProfile.
bunnyhero

6
Зауважте, що це не працюватиме належним чином, якщо ваш додаток використовує будь-які розширення, вбудовані рамки або бібліотеки.
clarkcox3

4
Це мені допомогло. Дякую! Таким чином, Apple оновлює XCode для створення шалених профілів XC Prov, але забуває про XCodeBuild. Нам цього разу просто пощастило. Ой! Як Apple змушує нас страждати!
kamyFC

1
Я встановлюю це як прийняту відповідь. Відповідь може працювати не у всіх випадках, але за допомогою певних модифікацій xcodebuild може бути використаний для вирішення цієї проблеми (це те, що ми робимо на нашому сервері CI).
Legoless

1
Я хотів би, щоб я дізнався на 3 години раніше, що xcodebuild тепер може також експортувати у формат ipa! Я витратив стільки часу, намагаючись змусити xcrun вставити заданий профіль надання, але він просто не працюватиме на Xcode 6. xcodebuild робить! Дякую.
Оскар Йєро

31

У мене виникли подібні проблеми під час надсилання в App Store. Я створив архів, потім натиснув "надіслати", і Xcode хотів автоматично підписатись за допомогою типового "XC com. *" Профілю надання простий код замість явного профілю, який вже був.

Щоб виправити це, я просто знову створив профіль на порталі розробників Apple:

1) Перейдіть на сторінку developer.apple.com і знайдіть профіль забезпечення розподілу, який ви хочете використовувати.
2) Виберіть його, натисніть "Редагувати", перейменуйте профіль та натисніть "Створити".
3) Завантажте профіль забезпечення на робочий стіл і перетягніть його на піктограму Xcode 6.
4) Перезапустіть Xcode 6.
5) Відкрийте вікно органайзера та натисніть «Надіслати» у створеному архіві. Xcode автоматично вибере ваш явний профіль замість загального.


Привіт, чи є якась офіційна заява про цю зміну?
відвертий

Не те, що я знаю. Я спробував порівняти старі та нові профілі в текстовому редакторі, щоб побачити, чи можу я помітити зміни у форматі, але я не помітив нічого істотного
GingerBreadMane

2
Я був скептично налаштований, але це працювало на мене. Я тільки що перейшов на Xcode 6 і спробував вивести свою першу спеціальну збірку
Newtz

До цього часу я використовував профіль забезпечення розробки. Це все-таки корисно чи мені потрібно створити профіль розповсюдження?
Безліг

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

27

Після того, як ви перебуваєте в Організаторі

  • Виберіть спеціальну збірку та натисніть "Експорт ...."
  • Виберіть "Зберегти для спеціального розгортання" -> Далі
  • Замість вибору організації зі спадного меню виберіть "Використовувати локальний актив" -> Вибрати
  • Експорт і збереження .ipa, як і раніше.

Звичайно, вам потрібно створити, завантажити та встановити профіль спеціального забезпечення.


5
Вирішили проблему завдяки цій відповіді та цій відповіді . Профіль резервування потрібно пов’язати з явним ідентифікатором додатка, який використовує той самий ідентифікатор пакета, що і ваш додаток. Ідентифікатор додаткової програми не працюватиме. Потім вам потрібно вибрати "Використовувати локальний актив підпису" під час експорту програми.
Сара Елан

@SarahElan поєднує дві відповіді та пише нову ... дякую
YaBoiSandeep

На мою думку та щодо мого досвіду, я вважаю, що це найкраща відповідь. Дякую.
Basem Saadawy

17

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

Трохи кращий підхід: встановіть потрібний профіль для вашої цілі та використовуйте командний рядок для створення ipa, який теж працює.

Ось сценарій, який я використовую:

#!/bin/sh

# Current as working as of 2014/09/22
# Xcode 6

OUTPUTDIR="$HOME/build"
APPNAME="your-app"
SCHEME="your-app"
APP_WORKSPACE="$HOME/Path/To/your-app.xcworkspace"

rm "$OUTPUTDIR/$APPNAME.ipa" #deletes previous ipa
xcodebuild -workspace "$APP_WORKSPACE" -scheme "$SCHEME" archive -archivePath "$OUTPUTDIR/$APPNAME.xcarchive"
xcodebuild -exportArchive -exportFormat ipa -archivePath "$OUTPUTDIR/$APPNAME.xcarchive" -exportPath "$OUTPUTDIR/$APPNAME.ipa" 

і мої налаштування:

Налаштування Xcode


Чи є простіший спосіб?
Тимур Бернікович

Я думаю, це тому, що MacOS 10.0. все ще знаходиться в бета-версії.
Тимур Бернікович

1
Проблема використання спеціальних профілів XC полягає в тому, що вони завжди включають усі пристрої - це позбавляє можливості вимкнути деякі пристрої, які можна зробити з ручними профілями.
Jonny

Спеціальний профіль XC - лише приклад. Ви можете використовувати будь-який профіль, який вам подобається.
Торстен

Вам слід видалити розширення '.ipa' з аргументу на -exportPath, оскільки воно вже автоматично додається xcodebuild.
Оскар Йєро

8

Я також не міг цього розібратися - покусав його під час подання в AppStore, де він за замовчуванням вказав профіль підстановки.

Я закінчив будівництво в Xcode 6, потім повернувся до вікна Організатор Xcode 5 для подання. Таким чином він запропонує вам вибрати профіль, з яким ви підпишетесь.


Це рішення, яке я роблю. Але я дуже хочу позбутися Xcode 5 зараз. Я думаю про використання xcrun і командного рядка зараз.
Безголосий

Я спробував усі запропоновані нами рішення, але це єдине, що насправді працює.
HunTer DRF

8

У Xcode 6 (принаймні 6.1, яку я зараз використовую), коли ви робите експорт для ad hoc, xcode 6 автоматично сканує, чи є який-небудь профіль резервування, який містить усі пристрої, зареєстровані в обліковому записі розробника, і при цьому відповідає ідентифікатору пакета . Якщо ні, то він буде використовувати профіль надання XC. Тому, якщо ви хочете використовувати власний профіль, наприклад, для цільового повідомлення, вам потрібно буде вибрати всі пристрої вашого профілю на порталі розробників яблук. Я думаю, це причина, чому деякі люди відтворюють профіль працюватимуть, а деякі ні.

btw, використовуйте скрипт можна експортувати та завантажувати до тестового польоту, але пристрій просто не може його завантажити. певно, десь я помилився. якщо хтось знає, чому це, будь ласка, дайте мені знати. tks


Дякую! Це зробило для мене трюк. Я відредагував профіль, щоб включити всі пристрої, повторно архівував додаток та віолу, він використав правильний профіль.
Ерік Віллегас

Це саме воно, і це звучить як помилка для мене або те, що зараз, коли Apple представила TestFlight для розповсюдження бета-версій, дистрибутив AdHoc не привернув належної уваги. Що сталося зі мною, було саме те, що @AlexHsieh описує; Я створив свій профіль резервування, як це робив раніше, вибрав лише підмножину всіх моїх зареєстрованих пристроїв, і коли я намагався генерувати IPA, Xcode не міг знайти жодного дійсного профілю резервування та спробував використати цей автоматично створений XC один (який також не вдалося в моєму випадку). Виправлення полягало в тому, щоб додати всі мої зареєстровані пристрої до профілю забезпечення.
jjramos

7

Це працювало для мене:

  1. натисніть "Переглянути облікові записи .." у діалоговому вікні "..виберіть команду розвитку ..".
  2. натисніть "Переглянути деталі .." та знайдіть профіль надання спеціальної реклами XC.
  3. клацніть правою кнопкою миші на цьому профілі та вибрав "Показати у Finder".
  4. видалити вибраний профіль.
  5. поверніться до діалогового вікна на кроці 1.
  6. натисніть "Вибрати".
  7. натисніть стрілку біля профілю забезпечення, щоб відкрити каталог профілів резервування.
  8. знову видаліть загальний профіль, як на кроці 4.
  9. натисніть кнопку "Попередній" у діалоговому вікні "Надіслати [ім'я програми] до Apple:".
  10. виберіть знову "Зберегти для спеціальної розгортання"
  11. знову натисніть кнопку "вибрати".

тепер ви повинні побачити правильне ім'я профілю надання.


Я не спробував першого. Але цей працював на мене. Дякую. =]
Глауко Невес

5
Не працювало для мене. Навіть після видалення профілів на кроках 4 та 8, профілі відтворюються та автоматично вибираються знову на кроці 11.
Чон,

1
Для мене це не працює, тому що щоразу, коли мені потрібно натиснути, виберіть обліковий запис (у мене є кілька облікових записів для доставки програм своїм клієнтам), створений XC Generated профіль відтворюється. PITA від Apple.
wuf810

Я хотів би додати, що перш ніж виконувати ці кроки з XCode 6, слід видалити профілі забезпечення XC: * зі свого облікового запису розробника Apple. Після кроку 4 я повернусь до діалогового вікна «Переглянути деталі» і натисніть кнопку оновлення, щоб переконатися, що цих профілів XC: * більше немає. Також використовуйте параметри складання Thorsten, щоб переконатися, що ви вибрали правильний профіль. Працював для мене двічі.
Android Noob

У мене була така сама проблема, як @Chun та (@) wuf810. Ці прокляті .мобільні положення продовжують відтворюватися. Що я зробив, це тримати відкрите вікно каталогу "Надання профілів" і просто продовжувати кроки від (@) user3382891 - видаляючи записи .mobileprovision так само швидко, як вони були відтворені. Врешті Xcode вибрав мій правильний профіль надання. Тепер я вирішую наступну проблему ...
kris

6

У мене є рішення для цього, яке працює для мене.

У мене встановлено і Xcode 6, і Xcode 5.1.1, Xcode 6 - у програмах, а Xcode 5.1.1 - в іншому каталозі. Коли я хочу зробити збірку, я використовую Xcode 6 для створення архіву. Але ви також можете бачити створений Архів у Xcode 5.1.1, тому я використовую Xcode 5.1.1 для розповсюдження Ad Hoc .ipa, використовуючи профіль надання, який я хочу використовувати. Тому будуйте за допомогою Xcode 6, але розподіляйте за допомогою Xcode 5.1.1.


Я не в змозі завантажувати збірку для тестового польоту таким чином.
hardik hadwani

Якщо ви використовуєте один і той же профіль резервування для створення та розповсюдження, ви повинні мати можливість завантажувати свою збірку для тестового польоту таким чином. Переконайтесь, що профіль резервування, який ви використовуєте для створення, такий же, як і той, який ви використовуєте для розповсюдження.
Адам Фріман


3

Відповідь від @MrPatol для мене не працювала. Мій сценарій роботи для Xcode 6.3.2

У центрі учасників -> Профілі надання iOS

  • Видаліть профіль надання, встановлений за замовчуванням, коли ви намагалися створити додаток (наприклад, "XC ..."). Створіть спеціальний профіль забезпечення (не виробництво) з короткою назвою.

У утиліті налаштування iPhone -> Надання профілів

  • Видаліть той же профіль надання (наприклад, "XC ...")

У Xcode -> Органайзер

  • Виберіть спеціальну збірку та натисніть "Експорт ...." Виберіть "Зберегти для спеціального розгортання" -> Далі
  • Виберіть організацію зі спадного меню
  • Перевірте, чи вибрано ваш новий режим спеціального профілю автоматично
  • Експорт і збереження .ipa, як і раніше.

2

Ось два ключові моменти, які вирішили проблему для мене.

  • Коли ви генеруєте профіль надання, його потрібно пов’язати з явним ідентифікатором програми який використовує той самий ідентифікатор пакета, що і ваш додаток. Ідентифікатор додаткової програми не працюватиме.
  • Коли ви експортуєте додаток для тимчасового розгортання, у спадному меню виберіть пункт Використовувати ресурс локального підпису та натисніть кнопку Вибрати.

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


1

Насправді вам потрібно створити новий профіль розподілу, специфічний для спеціального розгортання. Це можна знайти в класичному центрі-члені, але це новий тип сертифіката.

Потім можна вибрати, які пристрої можна використовувати для тестування програми, як це робиться з профілем розробника.

І новостворений сертифікат буде доступний, коли ви експортуєте свій пакет від Організатора звичайним способом.

Крім того, ви можете використовувати рішення TestFlight, що надається Apple з iOS 8, щоб користувач мав доступ до попереднього випуску.

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


Так, але, як ви зазначаєте, це означає лише iOS8. Apple особливо нерозумно змушувала користувачів Testflight лише до iOS8. На хороший час, але найбільшою встановленою базою все одно буде iOS7, тому Apple повинен був дозволити для цього.
wuf810

1

У мене була така ж проблема, нарешті я вирішив її відновлення профілю, який я хотів використовувати в Xcode 6, включаючи всі пристрої, які я зареєстрував у своєму обліковому записі iOS Dev, зробивши це так, при виборі експорту він показує правильний профіль, і я може здійснити спеціальний експорт із Xcode 6 без використання сценарію. Сподіваюся, це допомагає.


1
Це працює, але лише якщо ви добре з профілем резервування, що містить усі пристрої, зареєстровані у вашому обліковому записі розробника iOS. Щоб використовувати лише підмножину пристроїв у профілі забезпечення, мені довелося скористатися цією технікою: stackoverflow.com/a/26296138/71262
Оран Деннісон

0

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

сподіваюся, що це комусь допоможе.


0

Майже така ж проблема. Після створення архіву для розповсюдження (Продукт> Архів) ви експортуєте архів (натисніть Експорт ...) і виберіть "Зберегти для розгортання підприємства"; потім "Далі". Потім вибираєте за замовчуванням "Команда розвитку" (наприклад, назва організації) і натискаєте "Вибрати". Нарешті, вам буде представлений зведений вигляд, який також містить перелік профілів забезпечення, який Xcode автоматично знайшов (можливо, створений під час руху) для вас. Цей MIGHT може бути неправильним профілем надання (як правило, профілем надання wildcard, як-от "XC: *"), і MIGHT може відбуватися тому, що на порталі розробника вже є профіль надання wildcard.

Я використав для цього квиток на підтримку і лише повернув це посилання https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/ConfiguringPushNotifications/ConfiguringPushNotifications.html#//apple_ref/doc/uid/TP40012582 -CH32-SW1 . Насправді не велика допомога.

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


0

У xcode 7 я не зміг вибрати доступ до послуги adhoc

Органайзер -> Завантажити в App Store і Організатор -> Підтвердити

Але я міг вибрати через Органайзер -> Експорт

Відредаговано:

Завантаження програми після експорту для Adhoc у магазин додатків для testFlight спричинило ще одну проблему, яку тут обговорювали . Отже, рішення обох цих проблем одне. Створіть програму AppStore, щоб мати можливість вибирати її через органайзер і використовувати testFlight, завантажуючи в appstore.


0
  1. Я думаю, що це правильний спосіб вказати параметр -exportOptionsPlist після Xcode 7. Він вибере правильні файли надання, наприклад, в експорту GUI, незалежно від того, що ви вказали в налаштуваннях проекту.

xcodebuild -exportArchive -archivePath $ Archive_Path -exportPath $ LOCAL_PACKAGE_DIR -exportOptionsPlist $ Export_Plist_Path

Файл optionPlist такий,

<dict>
  <key>teamID</key>
        <string>MYTEAMID123</string>
        <key> teamID </key>
        <string>app-store</string>
        <key>uploadSymbols</key>
        <true/>
</dict>


<plist>

магазин додатків, підприємство, спеціальна розробка та альтернатива

  1. Але ви можете зустріти ще одну помилку після вище.

Error Domain = IDEDistributionErrorDomain Code = 14 "Не знайдено відповідних пристроїв." UserInfo = {NSLocalizedDescription = Немає відповідних пристроїв.}

Це проблема з рубіном. Спробуйте цей скрипт оболонки,xcbuild-safe.sh

xcbuild-safe.sh xxxxNormalOptionsInXcodebuild bla...
  1. Зачекайте хвилинку, приходить ще одна дивна помилка.

xcbuild-safe.sh: рядок 62: shell_session_update: команда не знайдена

Що за чорт shell_session_update? Давайте попрацюємо над цим. Просто визначте функцію перед реальною xcode buildd cmd, а саме у рядку 60 або 61.

function shell_session_update() { :; }

-4

Відповідаючи на ваше конкретне запитання, немає способу вибрати профіль резервування, який буде використовуватися. Що ви намагаєтеся зробити? (тобто який профіль, який ви бажаєте вибрати, дозволяє автоматично не створювати створений автоматично?)


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

Звичайно, існує спосіб вибору профілю забезпечення, який буде використовуватися. stackoverflow.com/a/26296138/71262
Оран Деннісон

1
@Lope Якщо у клієнта встановлено одне із ваших додатків та пов’язаний з ним профіль, він може встановити будь -які ваші програми (навіть якщо профілі інших програм не містять їх пристрою). Ця плутанина є однією з основних причин того, що ми хочемо відмовити розробників від вручну вказувати їхні профілі та списки пристроїв. (тобто, здається, багато людей покладаються на помилкове почуття безпеки як основну причину бажання вручну вказати профілі)
clarkcox3

@ clarkcox3 добре, що ще гірше, я хочу, щоб клієнт не міг бачити програми один одного
Lope

@Lope: Мені невідомий спосіб розповсюдження спеціальних ipa-файлів, який зробив би всі ваші програми доступними для ваших тестерів. Іншими словами, ви повинні явно надати тестерам додаток, яке ви хочете, щоб вони перевірили, правда? Це фізичне розділення заважає їм використовувати будь-які інші програми. (Це не так, як вони можуть зайти в магазин і отримати їх усі, так?) Чи є інший спосіб, завдяки якому ваші тестери могли отримати доступ до всіх ваших програм без вашого дозволу ???
leanne
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.