Следуя этим инструкциям (см. Также документацию 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, я добился некоторого прогресса, который я подведу здесь.
- 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 Developer? ) - Но эта команда требует от вас указать файл манифеста .plist. Ответ Развана в распространении файлов для IPA через Интернет по OTA. содержит образец 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» , « Как автоматизировать проверку поля во внедренном.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.)}
- Итак, нам нужно закрыть приложение. 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 устарела, и все приложение должно быть подписано. - Теперь, когда в приложение добавлен 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 такого предупреждения не было. По словам Ритмика Фистмана, можно ли повторно зашифровать внедренный файл.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
что я использовал.