Xcode 6 - Как выбрать сертификат подписи / профиль обеспечения для Ad-Hoc распространения?


143

Чтобы распространять приложение среди наших тестеров, мы используем XCode, который мы делаем следующим образом:

  • Архив приложений
  • Распределить для Ad-Hoc
  • Выберите профиль обеспечения
  • Сохраните .ipa в папку

Но с Xcode 6 этот рабочий процесс был немного изменен. Я все еще могу выбрать вариант рассылки Ad-Hoc, но не могу выбрать нужный профиль обеспечения. Это не дает нам никакого контроля над тем, какой сертификат подписи используется, и конфигурацией профиля обеспечения (мы используем push-уведомления).

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

Итак, мой вопрос:

Есть ли способ в Xcode 6 выбрать профиль обеспечения, используемый с распределением Ad Hoc?

Спасибо!


Кто-нибудь знает, если это было исправлено? Можно ли как-то распространять сборку пользователям iOS 7 для тестирования push-уведомлений?
Хаупман

используя версию Xcode 6 GM, та же проблема ...
Крис Чен

Таким образом, у нас до сих пор нет хорошего решения для этого? Ответы ниже не работают для меня. Можем ли мы использовать профиль обеспечения XC ?? Я не хочу терять неделю в ожидании обзора Apple. Спасибо
Майлз М.

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

1
Шутки в сторону? Мы не можем выбрать файл обеспечения? Я верю, что Йоссариан живет.
Айбраус

Ответы:


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

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

27

Когда вы находитесь в Организаторе

  • Выберите специальную сборку и нажмите «Экспортировать ....»
  • Выберите «Сохранить для специального развертывания» -> Далее.
  • Вместо выбора организации из выпадающего списка выберите «Использовать локальный подписывающий актив» -> Выбрать
  • Экспорт и сохранение .ipa, как и раньше.

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


5
Решил проблему благодаря этому ответу и этому ответу . Профиль обеспечения должен быть связан с явным идентификатором приложения, который использует тот же идентификатор пакета, что и ваше приложение. Подстановочный идентификатор приложения не будет работать. Затем вам нужно выбрать «Использовать локальный актив подписи» при экспорте приложения.
Сара Элан

@SarahElan объединить два ответа и написать новый ... спасибо
YaBoiSandeep

По моему мнению и в отношении моего опыта, я думаю, что это лучший ответ. Спасибо.
Basem Saadawy

17

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

Немного лучший подход: установите желаемый профиль prov в своей цели и используйте командную строку, чтобы построить свой 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 Ad Hoc состоит в том, что они всегда включают в себя все устройства - убирает возможность отключать некоторые устройства, что можно сделать с помощью ручных профилей.
Джонни

Профиль XC Ad Hoc является лишь примером. Вы можете использовать любой профиль, который вам нравится.
Торстен

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

8

Я не мог понять это также - получил немного при отправке в AppStore, где по умолчанию использовался шаблон подстановки.

Я закончил сборку в Xcode 6, а затем вернулся к окну Organizer Xcode 5 для отправки. Таким образом, вам будет предложено выбрать профиль для подписи.


Это обходной путь, который я делаю. Но я действительно хочу избавиться от Xcode 5 сейчас. Я думаю об использовании xcrun и командной строки сейчас.
Legoless

Я попробовал все предложенные мной решения, но это единственное, что действительно работает.
HunTer DRF

8

В Xcode 6 (по крайней мере, 6.1, который я сейчас использую), когда вы выполняете экспорт для ad hoc, xcode 6 будет автоматически сканировать, если какой-либо профиль обеспечения содержит все устройства, зарегистрированные в учетной записи разработчика, и в то же время соответствует идентификатору пакета. , Если нет, он будет использовать профиль обеспечения XC. Поэтому, если вы хотите использовать свой собственный профиль, например, для push-уведомлений, вам нужно будет выбрать все устройства в своем профиле на портале Apple для разработчиков. Я полагаю, что именно поэтому некоторые люди воссоздают профиль, а некоторые - нет.

Кстати, сценарий использования может экспортировать и загружать в testflight, но устройство просто не может его загрузить. наверное где то я ошибся. Если кто-нибудь знает, почему это так, пожалуйста, дайте мне знать. ТКС


Спасибо! Это помогло мне. Я отредактировал профиль, чтобы включить все устройства, повторно заархивировал приложение и альт, он использовал правильный профиль.
Эрик Виллегас

Это именно то, и для меня это звучит как ошибка или то, что теперь, когда Apple представила TestFlight для распространения бета-версий, дистрибутив AdHoc не получил должного внимания. То, что случилось со мной, было именно тем, что описывает @AlexHsieh; Я создал свой профиль обеспечения, как я всегда делал раньше, выбрал только подмножество всех моих зарегистрированных устройств, и когда я попытался сгенерировать IPA, XCode не смог найти какой-либо действительный профиль обеспечения и попытался использовать этот автоматически созданный XC (который тоже не получилось в моем случае). Исправление состояло в том, чтобы добавить все мои зарегистрированные устройства в профиль обеспечения.
jjramos

7

Это сработало для меня:

  1. нажмите «Просмотреть учетные записи ..» в диалоговом окне «..выделить команду разработчиков ..».
  2. нажмите «View Details ...» и найдите профиль обеспечения XC Ad Hoc.
  3. щелкните правой кнопкой мыши по этому профилю и выберите «Показать в Finder».
  4. удалить выбранный профиль.
  5. вернитесь к диалогу в шаге 1.
  6. нажмите «Выбрать».
  7. щелкните стрелку рядом с профилем обеспечения, чтобы открыть каталог профилей предоставления.
  8. снова удалите общий профиль, как в шаге 4.
  9. нажмите кнопку «Назад» в диалоговом окне «Отправить [имя приложения] в Apple:».
  10. снова выберите «Сохранить для специального развертывания»
  11. нажмите еще раз кнопку «выбрать».

Теперь вы должны увидеть правильное имя профиля обеспечения.


Я не пробовал первый. Но этот работал для меня. Спасибо. =]
Глауко Невес

5
Не работал для меня Даже после удаления профилей в шагах 4 и 8, эти профили воссоздаются и автоматически выбираются снова в шаге 11.
Chun

1
У меня не работает, потому что каждый раз, когда мне приходится щелкать по выбору учетной записи (у меня есть несколько учетных записей для доставки приложений моим клиентам), создается профиль XC Generated. ПИТА от Apple.
wuf810

Я хотел бы добавить, что перед выполнением этих действий с XCode 6 следует удалить профили обеспечения XC: * из своей учетной записи разработчика Apple. После шага 4 я вернусь в диалоговое окно View Details и нажму кнопку обновления, чтобы убедиться, что этих профилей XC: * больше нет. Кроме того, используйте настройки сборки Thorsten, чтобы убедиться, что вы выбрали правильный профиль. Работал на меня дважды.
Android Noob

У меня была та же проблема, что и у @Chun и (@) wuf810. Эти проклятые .mobileprovisions продолжают обновляться. Я оставил открытым окно каталога «Provisioning Profiles» и просто продолжал выполнять шаги от (@) user3382891 - удаляя записи .mobileprovision так же быстро, как они создавались заново. В конце концов XCode выбрал мой правильный профиль обеспечения. Теперь я перешел к следующей проблеме ...
Крис

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, выполнив это таким образом, при выборе экспорта показывается правильный профиль, и я может сделать экспорт Ad Hoc с Xcode 6 без использования скрипта. Надеюсь, поможет.


1
Это работает, но только если вы в порядке с профилем инициализации, содержащим все устройства, зарегистрированные в вашей учетной записи разработчика iOS. Чтобы использовать только подмножество устройств в профиле обеспечения, я должен был использовать эту технику: stackoverflow.com/a/26296138/71262
Оран Деннисон

0

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

надеюсь, это кому-нибудь поможет.


0

Почти такая же проблема. После создания архива для распространения (Product> Archive) вы экспортируете архив (нажмите Export ...) и выбираете «Сохранить для развертывания предприятия»; затем «Далее». Затем вы выбираете по умолчанию «Команда разработчиков» (например, название организации) и нажимаете «Выбрать». Наконец, вам будет представлен сводный вид, который также перечисляет профиль обеспечения, который Xcode автоматически нашел (может быть создан на лету) для вас. Это МОЖЕТ быть неправильным профилем обеспечения (обычно это профиль предоставления с подстановочными символами, например «XC: *»), и МОЖЕТ происходить, потому что на портале разработчика уже есть профиль подстановки с использованием подстановочных знаков.

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

Я обнаружил, что решение MrPatol также работает для Enterprise Deployment и решает проблему для нас. Сначала я вошел на портал разработчика и вручную создал профиль обеспечения, подходящий для моего приложения. Затем загрузили и установили новый профиль обеспечения, созданный вручную.


0

В xcode 7 я не смог выбрать adhoc инициализацию через

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

Но я мог выбрать через Организатор -> Экспорт

Отредактировано:

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


0
  1. Я думаю, что это правильный способ указать опцию -exportOptionsPlist после Xcode 7. Он выберет правильные файлы обеспечения, как в экспорте графического интерфейса, независимо от того, что вы указываете в настройках проекта.

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>

app-store, enterprise, ad-hoc, разработка являются альтернативой

  1. Но вы можете встретить другую ошибку после выше.

Ошибка домена = IDEDistributionErrorDomain Code = 14 «Не найдено подходящих устройств». UserInfo = {NSLocalizedDescription = Не найдено подходящих устройств.}

Это проблема с рубином. Попробуйте этот сценарий оболочки,xcbuild-safe.sh

xcbuild-safe.sh xxxxNormalOptionsInXcodebuild bla...
  1. Подожди, еще одна странная ошибка.

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

Что за черт shell_session_update? Позвольте нам обойти это. Просто определите функцию перед реальным xcodebuild cmd, а именно в строке 60 или 61.

function shell_session_update() { :; }

-4

В ответ на ваш конкретный вопрос, нет, нет никакого способа выбрать профиль обеспечения для использования. Что вы пытаетесь сделать? (то есть, что позволяет профиль, который вы хотите выбрать, что автоматически сгенерированный не позволяет?)


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

Скорее всего, есть способ выбрать профиль обеспечения для использования. stackoverflow.com/a/26296138/71262
Оран Деннисон

1
@ Lope Если на клиенте установлено одно из ваших приложений и связанный профиль, они могут установить любое из ваших приложений (даже если профили других приложений не содержат своего устройства). Эта путаница является одной из основных причин, по которой мы хотим отвести разработчиков от ручного указания их профилей и списков устройств. (то есть многие люди, похоже, полагаются на ложное чувство безопасности в качестве основной причины желания вручную указывать профили)
clarkcox3

@ clarkcox3 что еще хуже, я хочу, чтобы клиент не мог видеть приложения друг друга
Lope

@ Lope: я не знаю, как распространять специальные ipa-файлы, которые бы делали все ваши приложения доступными для ваших тестеров. Другими словами, вы должны явно предоставить своим тестировщикам приложение, которое вы хотите, чтобы они тестировали, верно? Это физическое разделение помешало бы им использовать любые другие приложения. (Не похоже, что они могут пойти в магазин и получить их все, да?) Есть ли другой способ, которым ваши тестеры могли бы получить доступ ко всем вашим приложениям без вашего разрешения ???
Линн
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.