2012-06-14 3 views
44

Мы создаем приложение для другой компании. Они держат ключ подписи и не хотят делиться им с нами.Создание приложений iOS с использованием xcodebuild без кодового кода

Должно быть возможно разделить сборку и подпись, но как ее указать в командной строке xcodebuild?

EDIT для тех, кто приезжает сюда из поиска. Принятый ответ правильный - он делает то, что задает вопрос. Однако, общая картинка отделяющая сборка и код (позволяющая разработчику, у которого нет ключа распространения для создания приложения). Более новые версии Xcode предоставляют инструменты для этого. Это не является строго ответом на этот вопрос, поэтому я опубликовал его как сущность: https://gist.github.com/noamtm/5c3aaa0b615477162ccd.

+0

Вы хотите что-то ищите? http://cydia.saurik.com/codesign.html – QED

+0

После изменения настроек, вот как вы проверяете, подписан ли пакет приложений или нет: 'codesign -dv/Applications/AppName.app' – Daniel

ответ

96

Для того, чтобы пропустить код подписи, который можно выполнить ручную сборку из консоли, как это:

xcodebuild clean build CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO 

Используйте дополнительно параметры -configuration, -target и -sdk для того, чтобы определить параметры сборки.

Обратитесь к этому stackoverflow answer, чтобы получить подробное описание о том, как отключить подписание кода внутри Xcode.

+0

Спасибо. Еще не проверял, но это имеет смысл. – noamtm

+5

Это работает, но проблема в том, что невозможно создать необходимые файлы Entitlements и ResourceRules, необходимые для команды 'codesign --entitlements ... --resource-rules ...'. Это особенно важно, если вы собираетесь использовать iCloud. Это не тривиально генерировать эти файлы самостоятельно. См. Также http://stackoverflow.com/questions/9280130/how-to-call-builtin-productpackagingutility-in-commandline. – Alexander

+1

Благодарю вас спасибо THANK YOU – liang

8

К сожалению, может быть сложно создать приложение в режиме выпуска без подписи кода. Вы получите ошибки из системы сборки, такие как это:

CodeSign error: code signing is required for product type 'Application' in SDK 
       'iOS 5.1' 

В этом случае, вы должны настроить вашу цель, чтобы использовать разработчик/команда символ (*) идентичность подписи в режиме выпуска. Приложение будет подписано с этим, когда вы его создадите, и вы можете отправить его своему клиенту, чтобы они могли уйти в отставку. Это то, что делают большинство наших сторонних разработчиков.

После этого вы можете удалить информацию о подписи кода, удалив различные файлы в приложении, например _CodeSignature, и используя инструмент codesign для удаления информации из двоичного файла приложения. Но я не уверен, насколько это легко. Однако это не очень важно. В профиле обеспечения или подписывании информации нет никакой конфиденциальной информации.

+0

Итак, это будет процесс для создания .ipa для отправки заказчику, который использует Citrix/Zenprise для развертывания приложения для своих сотрудников? Можете ли вы прокомментировать мой пост ?: http: // stackoverflow.com/questions/16089918/citrix-receiver-xenapp-xenmobile-zenprise-ipa-provisioning-and-deploying-a – whyoz

3

В Навигаторе проектов выберите свой проект и откройте раздел «Настройки сборки» вашего проекта (а не какая-либо конкретная цель).

В разделе «Подпись кода» найдите «Идентификатор кода», а для режимов «Отладка» и «Сброс» установите «Любой SDK для iOS» на «Не вводить код».

5

Чтобы полностью исключить код подписания с Xcode 7, я использовал все из следующих вариантов:

CODE_SIGN_IDENTITY="" 
CODE_SIGNING_REQUIRED="NO" 
CODE_SIGN_ENTITLEMENTS="" 
CODE_SIGNING_ALLOWED="NO" 

Окончательный вариант, CODE_SIGNING_ALLOWED="NO", казалось, сделать трюк.

+0

Просто хотел сделать то же самое. Спасибо, что поделился. –

+0

Примечание. Я не могу получить права доступа (группы приложений) для работы с архивом, созданным без них, даже если я запускаю код с желаемым файлом прав. –

+0

Обратите внимание, что я не сделал бы этого взлома для архивных сборок. Я просто хочу не запускать код, когда запускаю/тестирую свое приложение в отладке в симуляторе. Обычно для архивирования требуется кодовое обозначение, возможно, его вообще не следует отключать. –