Виконуючи ці вказівки (див. Також документацію для розробників 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 я досяг певного прогресу, який я підсумую тут.
- XCode створить архів (Product -> Archive), але він не дозволяє експортувати архів у файл .ipa для спеціального розповсюдження без підписки на платний рівень облікового запису ADP.
- Немає проблем , хоча, тому що Xcode інструмент командного рядка робить створення .ipa виконуваного файлу, навіть при відсутності платного АДФ рахунку. Використовуйте таку команду, як
xcodebuild -exportArchive -archivePath Provenance-Release\ 11-20-15\,\ 22.24.xcarchive/ -exportOptionsPlist ~/manifest.plist -exportPath ~/Provenance
(див. Відповідь Хавара у розділі Як створити ipa в xcode 6 без облікового запису розробника Apple? ) - Але ця команда вимагає вказати файл маніфесту .plist. Відповідь Развана в розповсюдженні IPA-файлів iOS IPA Over The Air (OTA) iOS? містить зразок manifest.plist, а також інструкції щодо формату гіперпосилання, необхідного для надання посилання для завантаження, який повинен розміщуватися на веб-сторінці SSL. Можливо, URL-адреса SSL повинна відповідати ідентифікатору пакета програми, я не впевнений.
- Але вищезазначене працює лише в тому випадку, якщо додаток передбачено для пристрою, який завантажує його, і пристрій вже встановив сертифікат розробника. Так, наприклад, пристрій, який раніше був підключений через USB до мого Xcode, тепер може завантажувати додаток по повітрю, що чудово. Це прогрес. Але для чистих пристроїв я отримую помилку
Could not install embedded profile: 0xe8008012 (This provisioning profile cannot be installed on this device.)
(як на консолі пристрою, яку можна переглядати в Xcode -> Window -> Devices або іншому в додатку Apple Configurator). - Щоб програма була призначена для пристрою, вона повинна містити 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.)}
- Гаразд, тому нам потрібно подати у відставку додаток. 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 застарілий, і весь додаток повинен бути підписаний. - Тепер, коли додаток додав 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? - Я спробував експортувати свій сертифікат розробника iPhone з Keychain Access і надіслати його електронною поштою на пристрій. Пристрій зміг встановити сертифікат, але він відображався з червоним попередженням про те, що він не був підписаний, тоді як при встановленні сертифікату через Xcode / USB такого попередження не було. На думку Rhythmic Fistman at можна повторно зашифрувати вбудований файл .mobileprovision ? , профіль повинен бути підписаний Apple для роботи. Це може бути крапкою. Apple підпише ваш сертифікат лише у випадку, якщо у вас є платний рахунок ADP.
- Ця публікація в блозі про надання Шоном Гебером була дуже ілюструючою щодо загальної теорії сертифікатів розробників та профілів надання резервів (разом з Кольбахом вони повинні бути прочитані обома). Він містить цей параграф:
Причина, що все це працює і є безпечною, полягає в тому, що 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
я використовував.