Віддалено поширювати додаток для iOS, зібране в Xcode 7, без App Store, підрозділу програми для розробників чи джейлбрейка?


10

Виконуючи ці вказівки (див. Також документацію для розробників Apple та відповідь BoltClock на тест додатка iOS на пристрої без програми для розробника яблук чи джейлбрейка ), я зміг скласти додаток для iOS (у цьому випадку походження , емулятор консолі відеоігор, який не робить відповідати вказівкам Apple і ніколи не буде дозволено в Apple Store App) в Xcode 7, підпишіть його з моїм особистим обліковим записом iCloud, завантажте його на мій iPhone (підключивши його до свого Mac через USB та вибравши свій iPhone в меню xcode -> Продукт -> Пункт призначення) та дозвольте моєму телефону виконувати його, "довіряючи" програмам із цим підписом у Налаштуваннях -> Загальне -> Профіль, який встановлює на пристрій сертифікат, пов’язаний з моїм обліковим записом icloud.

Я хотів би повторити ці кроки із завантаженням у прямому ефірі. Чи можу я отримати Xcode для створення виконуваного файлу, яким я можу поділитися зі своїм братом, який має iPhone, але не має доступу до Mac з Xcode?

Мережа StackExchange здійснила щось подібне, мабуть, для бета-програми програми для iOS, використовуючи корпоративну дистрибуцію Apple через управління мобільними пристроями, про що йдеться у цьому питанні . Існує також BuildStore ( http://builds.io/ ), який за 10 доларів на рік також дозволяє цю функціональність, очевидно, додаючи користувачів до "команди розробників", пов'язаної з платним обліковим записом програми розробника Apple (див. Документи розробника Apple ) . Чи можна з Xcode 7 зробити таку річ без підприємства або навіть регулярного платного облікового запису розробника?

update: Завдяки допомозі Stacksza я досяг певного прогресу, який я підсумую тут.

  1. XCode створить архів (Product -> Archive), але він не дозволяє експортувати архів у файл .ipa для спеціального розповсюдження без підписки на платний рівень облікового запису ADP.
  2. Немає проблем , хоча, тому що Xcode інструмент командного рядка робить створення .ipa виконуваного файлу, навіть при відсутності платного АДФ рахунку. Використовуйте таку команду, як xcodebuild -exportArchive -archivePath Provenance-Release\ 11-20-15\,\ 22.24.xcarchive/ -exportOptionsPlist ~/manifest.plist -exportPath ~/Provenance(див. Відповідь Хавара у розділі Як створити ipa в xcode 6 без облікового запису розробника Apple? )
  3. Але ця команда вимагає вказати файл маніфесту .plist. Відповідь Развана в розповсюдженні IPA-файлів iOS IPA Over The Air (OTA) iOS? містить зразок manifest.plist, а також інструкції щодо формату гіперпосилання, необхідного для надання посилання для завантаження, який повинен розміщуватися на веб-сторінці SSL. Можливо, URL-адреса SSL повинна відповідати ідентифікатору пакета програми, я не впевнений.
  4. Але вищезазначене працює лише в тому випадку, якщо додаток передбачено для пристрою, який завантажує його, і пристрій вже встановив сертифікат розробника. Так, наприклад, пристрій, який раніше був підключений через USB до мого Xcode, тепер може завантажувати додаток по повітрю, що чудово. Це прогрес. Але для чистих пристроїв я отримую помилку Could not install embedded profile: 0xe8008012 (This provisioning profile cannot be installed on this device.)(як на консолі пристрою, яку можна переглядати в Xcode -> Window -> Devices або іншому в додатку Apple Configurator).
  5. Щоб програма була призначена для пристрою, вона повинна містити UDID пристрою у embedded.mobileprovisionфайлі, див. Як ви вставляєте профіль надання у програму iOS , як автоматизувати перевірку поля у вбудованому мобільному забезпеченні ipa? , Як дізнатися, який профіль використовувався для створення файлу * .ipa? , і чи є спосіб побачити, які UDID включені в збірку? . Однак ви не можете просто відредагувати цей файл, щоб додати UDID, оскільки тоді КОДЕЗНАЧЕННЯ програми не збігається, і пристрій повідомить про помилкуFailed to verify code signature of /private/var/mobile/Library/Caches/com.apple.mobile.installd.staging/temp.7jBjpk‌​/extracted/Payload/Provenance.app : 0xe8008017 (A signed resource has been added, modified, or deleted.)}
  6. Гаразд, тому нам потрібно подати у відставку додаток. Xcode надає інструмент командного рядка, званий codesignякий може це зробити. Вказівки наведено в розділі Як повторно підписати файл ipa? і повторно підпишіть IPA (iPhone) та подайте заявку на додаток для iPhone, вставте новий ідентифікатор пакета та надішліть до Організатора Xcode для завантаження та Як вручну переписати IPA за допомогою нового профілю надання . Мені довелося вказати свій сертифікат розробника, точне ім'я якого можна знайти в Keychain Access, на вкладці Сертифікати, і виглядає як "Розробник iPhone: ім'я користувача@mac.com (ABCDEFGHIJ)". Тоді команда подібна codesign -f -s "iPhone Developer: username@mac.com (ABCDEFGHIJ)" Payload/Provenance.app. Приклад команд в інструкціях вище включав прапор, який називається--resource-rules, але я не знайшов такого файлу в зібраному додатку, тому я видалив цей прапор. Цікаво, що це робить, і чи потрібно. Редагувати: Відмінна публікація в блозі " Підпис під кодом" від Томаса Кольбаха пояснює, що --resource-rulesпрапор використовувався для того, щоб вказати, які частини програми повинні бути підписані, але оскільки iOS8 застарілий, і весь додаток повинен бути підписаний.
  7. Тепер, коли додаток додав UDID і підписаний, завантаження його на свіжий пристрій видає помилки Could not install embedded profile: 0xe8008003 (This provisioning profile is malformedі A valid provisioning profile for this executable was not found. Напевно, проблема в тому, що пристрій досі не встановив сертифікат розробника. Під час завантаження через Xcode, перед тим, як застосувати додаток, потрібно знайти встановлений сертифікат у Налаштуваннях -> Загальне -> Профіль, вибрати сертифікат і натиснути "довірити". Однак ця опція не з’являється після завантаження спеціального додатку в прямому ефірі, тому я не знаю, як діяти далі. Я думаю, що мені потрібен спосіб встановити сертифікат розробника на пристрій. Відповідно до Встановлення профілю забезпечення на iOS 8.0.2, це було можливо, просто надіславши електронною поштою сертифікат на пристрій, але це більше не працює як на iOS 8. Я не намагався підтвердити це. Як я можу віддалено встановити свій сертифікат розробника на пристрій iOS?
  8. Я спробував експортувати свій сертифікат розробника iPhone з Keychain Access і надіслати його електронною поштою на пристрій. Пристрій зміг встановити сертифікат, але він відображався з червоним попередженням про те, що він не був підписаний, тоді як при встановленні сертифікату через Xcode / USB такого попередження не було. На думку Rhythmic Fistman at можна повторно зашифрувати вбудований файл .mobileprovision ? , профіль повинен бути підписаний Apple для роботи. Це може бути крапкою. Apple підпише ваш сертифікат лише у випадку, якщо у вас є платний рахунок ADP.
  9. Ця публікація в блозі про надання Шоном Гебером була дуже ілюструючою щодо загальної теорії сертифікатів розробників та профілів надання резервів (разом з Кольбахом вони повинні бути прочитані обома). Він містить цей параграф:

    Причина, що все це працює і є безпечною, полягає в тому, що Apple генерує профілі резервування на порталі, а потім підписує їх своїми приватними ключами, перш ніж доставляти їх вам. Підписання профілів резервування - це лише те, що може зробити Apple. Тому завантажений файл не може бути підроблений, не зробивши його недійсним. Недійсний профіль надання не буде прийнятий iOS, і тому Apple може контролювати саме те, що може, а що не може бути передбачено розробником, просто обмеживши доступ до підписання профілю забезпечення тим, що портал розробників дає вам змогу налаштувати в першій. місце - навіть незважаючи на те, що профілі забезпечення можуть підтримувати будь-яку кількість інших дивовижних варіантів, які ви не можете використовувати без ув'язнення. Ось чому вам потрібно зареєструвати тестові пристрої на порталі, додайте ваші сертифікати на портал тощо - лише речі на порталі (і, таким чином, кількість яких Apple може контролювати та обмежувати довільно), можуть бути включені до створеного та правильно підписаного профілю надання. На порталі фактично застосовуються політики щодо забезпечення та обмежень щодо забезпечення резервами Apple.

Це, здається, остаточно відповість на моє запитання (чи можу я примусити програму працювати без платного акаунта ADP) з "ні". Хоча ця стаття передує Xcode 7. Мабуть, Xcode 7 надішле UDID пристрою на портал Apple і отримає у відповідь профіль резервування, підписаний Apple, що містить цей UDID. Xcode 7 робить це лише тоді, коли пристрій підключено через USB та розпізнає Xcode, але виникає питання, чи можна було створити запит Xcode вручну на Apple? Це заглиблюється в реверсивні технічні речі Apple, ніж мені подобається, і, ймовірно, порушує ToS або будь-що інше, тому я думаю, що я задоволений відповіддю "ні".

За інформацією на сторінці about для BuildStore , вони керують чимось подібним по електронній пошті, тому це можливо.

Xcode “Build and Archive” з командного рядка досить старий (приблизно xcode 3), але пропонує використовувати xcrunзамість цього xcodebuildя використовував.


1
Подумайте, як це розділити. Питання повинно бути коротким простим і зрозумілим. Вся відповідь / процес, як ви потрапили на свою відповідь та допис у блозі, має бути у розділі відповідей.
bmike

Відповіді:


2

Відповідь майже ТАК!

Мені вдалося встановити нові версії того самого додатка на пристрої через Fabric.io без підписки на Apple Dev. (Я думаю, ви також можете поширити їх за допомогою iTunes. Відправити ipa на тестер, і він повинен мати можливість встановити його через iTunes.)

Єдиним недоліком є ​​те, що вам потрібно принаймні один раз підключити пристрій до Xcode . Тоді ви можете віддалено встановити нові версії. (Я не знайшов способу це зробити вручну, знаючи удид)

Коли ви підключите "невідомий" пристрій до xcode 7, є fix issueкнопка в Target general settings. Виправте проблему, і Xcode створить новий профіль надання із цим пристроєм. (ви можете знайти його ~/Library/MobileDevice/Provisioning Profiles)

Тоді ви можете використовувати цей профіль надання для розповсюдження програм через Fabric.io

  1. Зареєструйтесь на Fabric.io
  2. Тканина налаштування для вашого проекту (є покрокове керівництво)
  3. Переконайтеся, що xcode використовує правильну версію. профіль, щоб підписати його. Automaticпрацював на мене.
  4. Xcode> проект> архів
  5. Помічник з тканини виявить складання, і ви зможете поширити його.

Вибачте, хлопці, які недостатньо володіють Xcode, я не маю багато часу, щоб додати менше схильних до помилок посібників, але сподіваюся, що ця відповідь допоможе комусь із ідеями.

ПОРАДА: використовуйте цей плагін швидкого перегляду, щоб побачити всередині ipas та prov. профілі!


1
Так, ця відповідь відповідає тому, що я з’ясував під час тестування. Мені все ще цікаво, чи можна було б обійти це "підключення пристрою до коду хоч раз на крок", підробляючи повідомлення, яке Xcode надсилає на сервери Apple з новим пристроєм UDID
ziggurism

2

Оскільки в деяких версіях iOS 9.x випущена з моменту, коли моя відповідь була опублікована, це вже не є навіть можливим. Зараз Apple обмежує завантаження OTA на невільні акаунти, як показано помилками в журналах пристроїв після відмови установки.

Я перевірив це широко, тому що це було б дивним і для моїх додатків.

Чи можу я розповсюджувати свої програми OTA без членства в програмі розробника (коштує гроші)?

Ви можете створити та підписати IPA та створити файл Manifest для нього, але він не вдасться встановити на пристрої. Причиною цього є те, що Xcode повинен налаштувати IPA для цього пристрою (нібито його правильно підписати за допомогою UDID). Ви навіть можете побачити це, якщо спробувати підключити новий пристрій до Mac та запустити додаток через Xcode на ньому. Коротка відповідь - ні.

Що я можу зробити, щоб зробити цю роботу?

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

Це дійсно для безпеки, оскільки ціновий бар'єр, як правило, не дозволяє розповсюджувати шкідливі програми через Інтернет. Не кажучи вже про збереження більшості завантажень додатків у App Store.

Я підписався на програму для розробників? Як я зараз його розповсюджую?

У вас повинен бути веб-сервер HTTPS (і сертифікат SSL, для якого ви можете зробити власний корінь). Ви також повинні додати їх UDID у свій профіль розробника (я не зовсім впевнений, як це зробити). Щоб створити IPA (продукт> Архів> Експорт> Зберегти для тимчасового розгортання> Увійти за допомогою Apple ID> Дотримуйтесь інструкцій), ви повинні використовувати Xcode, і ви отримаєте Plist та IPA-файл. Поставте їх і на ваш сервер, і змініть значення у файлі Plist, щоб вони відповідали URL-адресам HTTPS на вашому сервері. Потім ви використовуєте спеціальне посилання для посилання на маніфест Plist, і воно з’явиться з проханням користувача встановити ваш додаток. Якщо все піде правильно, у користувача з’явиться ваш додаток. Ви також повинні кодувати свій власний метод оновлення, якщо ви цього хочете.

Якщо це додаток, яке ви хочете розповсюдити в цей момент, може бути більше сенсу розмістити його в App Store, або якщо це для бета-тестування, використовуйте TestFlight. Якщо у вас є обліковий запис розробника, ви можете використовувати TestFlight і пропустити всі ці матеріали для тестування додатків. Все, що вам потрібно, - це їх електронна адреса та змусити їх встановити додаток TestFlight з App Store. Управлінням TestFlight можна за допомогою iTunes Connect.


І як тільки ви підписалися на розробника, як ви поширюєте додаток?
зигуризм

Оновив мій пост з інструкціями.
AppleBetas

Дякую, саме це я шукав. Я знаю, ви сказали, що потрібно мати платний рахунок для розробників та надання UDID, але я хотів би спробувати цей метод без попереднього. Я звітую про результати.
ziggurism

Виконуючи ваші вказівки щодо створення архіву, але таким чином кнопки «Завантажити в магазин додатків», «Валідація» та «Експорт» були позначені сірим кольором, посилання внизу прописано «Поширення вимагає зарахування до програми для розробників Apple». мене на веб-сторінку, щоб зареєструвати ADP. Отже, з одного боку, це так, як ви пообіцяли: підписка на програму розробників Apple в розмірі 99 доларів США, здається, потрібна, навіть якщо ви хочете лише спеціально розповсюджувати додаток у прямому ефірі (OTA). Gui XCode не створить IPA та профіль надання.
ziggurism

З іншого боку, при stackoverflow.com/questions/26928721 / ... користувача претензій Хавара , що це може бути зроблено без АДФА підрозділів , використовуючи xcodebuildкомандний рядок , яка буде створювати архів .ipa, а також знак і надання додаток , якщо ви використовуєте -exportProvisioningProfileпрапор (див. коментар Панкай Ратхор).
ziggurism

1

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

Якщо ви покладаєтесь на підписання iOS 9, який не розробник, за допомогою будь-якого старого Apple ID, то для запуску програми тестерам потрібно ввійти за допомогою свого ідентифікатора Apple.

Ви можете заплатити Apple за обробку рахунків та підписання, заплативши за рік облікових записів розробників. Тоді ви можете надіслати електронною поштою, передати додаток на будь-який сервер, використовувати TestFlight або простіші для вас інші способи, крім того, щоб роздати свій Apple ID вашим тестерам / користувачам програми.

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

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


Де тестерам потрібно ввійти до свого Apple ID, щоб запустити програми, не підписані розробником?
ziggurism

У Xcode використовувати ваш Mac найпростіше. Я б
змусив

Так, установка з Xcode через USB чудово працює. Моє запитання стосувалося можливості віддаленого розповсюдження / встановлення. StackExchange зробив це для своєї бета-програми. Я теж хочу це зробити.
ziggurism

@ziggurism SE оплатив сертифікат підприємства. Для цього вам знадобиться трохи юридичної документації. Плюс кілька сотень доларів на рік. TestFlight - дешевший варіант і менше сірої зони. Те, що зробив SE, швидше за все, "не за книгою", згідно ліцензії на сертифікати, якими вони користувалися, але я не юрист ...
bmike
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.