Удаленно распространять приложение iOS, скомпилированное в Xcode 7, без App Store, подпрограммы разработчика или джейлбрейка?


10

Следуя этим инструкциям (см. Также документацию Apple для разработчиков и ответ BoltClock на приложение Test iOS на устройстве без программы Apple для разработчиков или джейлбрейка ), я смог скомпилировать приложение для iOS (в данном случае провенанс - приложение-эмулятор консоли видеоигры, которое не соответствовать правилам Apple и никогда не будет разрешено в Apple App Store) в Xcode 7, подпишите его с моей личной учетной записью iCloud, загрузите его на мой iPhone (подключив его к моему Mac через USB и выбрав мой iPhone в меню xcode -> Продукт -> Назначение) и разрешить моему телефону выполнять его, «доверяя» приложениям с этой подписью в меню «Настройки» -> «Общие» -> «Профиль», который устанавливает сертификат, связанный с моей учетной записью icloud, на устройство.

Я хотел бы повторить эти шаги по беспроводной загрузке. Могу ли я заставить Xcode создать исполняемый файл, которым я могу поделиться с моим братом, у которого есть iPhone, но нет доступа к Mac с Xcode?

Сеть StackExchange достигла чего-то подобного, очевидно, для своей бета-программы для iOS, используя корпоративный дистрибутив Apple с помощью Mobile Device Management, как упоминалось в этом вопросе . Существует также BuildStore ( http://builds.io/ ), который за 10 долларов США / год также включает эту функцию, очевидно, добавляя пользователей в «команду разработчиков», связанную с платным аккаунтом программы Apple Developer Program (см. Документацию Apple dev ). , С Xcode 7 возможно ли сделать это без предприятия или даже регулярной платной учетной записи разработчика?

обновление: благодаря помощи 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 Developer? )
  3. Но эта команда требует от вас указать файл манифеста .plist. Ответ Развана в распространении файлов для IPA через Интернет по OTA. содержит образец 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» , « Как автоматизировать проверку поля во внедренном.mobileprovision ipa»? , Как узнать , что профиль используется для создания * .ipa файл? и есть ли способ увидеть, какие UDID включены в сборку? , Однако вы не можете просто отредактировать этот файл, чтобы добавить UDID, потому что тогда CODESIGNATURE приложения не совпадает, и устройство сообщит об ошибке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? и Resign IPA (iPhone) и уйти в отставку в iPhone App, вставка нового Bundle ID и отправить Xcode Organizer для загрузки и Как вручную повторно подписать АПИ с новым профилем инициализации . Мне пришлось указать свой сертификат разработчика, точное имя которого можно найти в Keychain Access, на вкладке «Сертификаты», и выглядит как «Разработчик iPhone: username@mac.com (ABCDEFGHIJ)». Тогда команда похожа codesign -f -s "iPhone Developer: username@mac.com (ABCDEFGHIJ)" Payload/Provenance.app. Команды примера в инструкциях выше включали флаг--resource-rules, но я не нашел такого файла в моем скомпилированном приложении, поэтому убрал этот флаг. Интересно, что он делает и нужно ли это. Редактирование: Отличная запись в блоге « Inside Code Signing » Томаса Коллбаха объясняет, что этот --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 такого предупреждения не было. По словам Ритмика Фистмана, можно ли повторно зашифровать внедренный файл.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 хотя бы один раз . Затем вы можете удаленно устанавливать новые версии. (Я не нашел способ сделать это вручную, зная udid)

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

Чем вы можете использовать этот профиль обеспечения для распространения приложений через Fabric.io

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

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

СОВЕТ: используйте этот плагин быстрого просмотра, чтобы увидеть внутри ipas и prov. профили!


1
Да, этот ответ согласуется с тем, что я узнал во время тестирования. Мне все еще интересно, можно ли обойти это «подключить устройство к xcode хотя бы один раз», подделав сообщение, которое 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, для которого вы можете создать свой собственный root). Вы также должны были добавить их UDID в свой профиль разработчика (я не совсем уверен, как это сделать). Вы должны использовать XCode для создания IPA («Продукт»> «Архив»> «Экспорт»> «Сохранить для специального развертывания»> «Войти через Apple ID> Следуйте инструкциям»), и вы получите Plist и файл IPA. Поместите их на свой сервер и измените значения в файле Plist, чтобы они соответствовали URL-адресам HTTPS на вашем сервере. Затем вы используете специальную ссылку для ссылки на манифест Plist, и он появится, предлагая пользователю установить ваше приложение. Если все пойдет хорошо, у пользователя будет ваше приложение. Вы также должны написать свой собственный метод обновления, если хотите.

Если это приложение, которое вы хотите распространять на данном этапе, возможно, имеет смысл поместить его в App Store, или, если это для бета-тестирования, используйте TestFlight. Если у вас есть учетная запись разработчика, вы можете использовать TestFlight и пропустить все эти вещи для тестирования приложения. Все, что вам нужно, это их электронная почта и заставить их установить приложение TestFlight из App Store. TestFlight можно управлять из iTunes Connect.


И как только вы зарегистрировались в Developer, как вы распространяете приложение?
Зиггуризм

Обновил мой пост с инструкцией.
AppleBetas

Спасибо, это то, что я искал. Я знаю, что вы сказали, что необходимо иметь платную учетную запись dev и предоставлять UDID, но я хотел бы попробовать этот метод без предварительного. Я сообщу результаты.
Зиггуризм

Следуя инструкциям по созданию архива, но кнопки «Загрузить в магазин приложений», «Подтвердить» и «Экспорт» были выделены серым цветом со ссылкой ниже, которая гласила «Распространение требует регистрации в Программе разработчика Apple», что выкинуло меня на веб-страницу, чтобы подписаться на ADP. Так что, с одной стороны, это, как вы и обещали: подписка на программу Apple Developer Program на 99 долларов, по-видимому, необходима, даже если вы хотите только через эфир (OTA) раздельно распространять свое приложение. Графический интерфейс XCode не будет создавать IPA и профиль обеспечения.
Зиггуризм

С другой стороны, на stackoverflow.com/questions/26928721/… пользователь Khawar утверждает, что это может быть сделано без подпрограммы ADP с помощью xcodebuildкомандной строки, которая создаст архив .ipa, а также подпишет и предоставит приложение, если вы используете -exportProvisioningProfileфлаг (см. комментарий Панкаджа Ратора).
Зиггуризм

1

По сути, кто-то должен подписать приложение. Вы можете получить файл IPA, но он не будет работать на произвольных устройствах. Сосредоточьтесь на этом, и вы быстро решите, хотите ли вы переносить трудности каждого человека, использующего XCode, или имеет смысл платить Apple за подпись ваших приложений.

Если вы полагаетесь на то, что iOS 9 не подписывает подписку со старым Apple ID, все ваши тестеры должны войти в систему с вашим Apple ID, чтобы запустить приложение.

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

Вы всегда можете отправить исходный код своему брату, если у него есть Xcode, но вы упомянули, что это было причиной того, что у кого-то не было Mac, чтобы установить и подписать приложение.

Взломать тюрьму проще, чем подделать цепочку сертификатов Apple, но я этого не рекомендую.


Где тестеры должны войти в систему с моим Apple ID, чтобы запускать приложения без подписи разработчика?
Зиггуризм

В Xcode использовать ваш Mac проще всего. Я бы
попросил

Да, установка из Xcode через USB работает отлично. Мой вопрос был о возможности удаленного распространения / установки. StackExchange сделал это для своего бета-приложения. Я тоже хочу это сделать.
Зиггуризм

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