2009-11-06 2 views
4

В нашей среде мы делим ресурсы на несколько проектов и платформ. При создании для iPhone требуется только часть этих ресурсов. Поскольку это подмножество по-прежнему значительным, у нас есть файл манифеста, в котором перечисляется то, что происходит, что ограничивает копию. У нас есть собственный скрипт Python, который выполняет копию, обновляя только те файлы, которые изменились.Принудительное обновление подписи кода в Xcode

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

Поскольку мы используем отдельный файл манифеста, моя сценарий запуска сценария не может указывать какой-либо файл ввода/вывода в графическом интерфейсе Xcode: он варьируется в зависимости от того, что содержится в каталогах в то время. Побочным эффектом этого является то, что Xcode не знает, какие файлы будут скопированы (например, события «под крышкой»).

Проблема заключается в том, что если я только модифицирую файлы ресурсов между сборками, восстановление моего приложения правильно вызовет мой скрипт, который копирует соответствующие файлы, только Xcode не перезапустит шаг подписи кода и не будет повторно -копируйте мое приложение на свое устройство.

Я нашел это странным, учитывая, что мои файлы ресурсов действительно перечислены в файле <app_bundle>/_CodeSignature/CodeResources, но похоже, что Xcode определяет независимые от него требования к перестройке (скорее всего, только файлы, перечисленные в файле проекта), что понятно.

Я пробовал играть в трюки, прикоснувшись к каталогу своего приложения или самому двоичному файлу приложения, но он не совсем работает. Прикосновение к каталогу пакетов приложения не похоже на то, что прикосновение к двоичному файлу будет работать, но НЕ ДЛЯ ТЕКУЩЕГО СТРОЕНИЯ, только последующее (поскольку ни один входной файл не требует перекомпиляции, Xcode не сообщает, что новый бинарный файл не генерируется, а следующий времени, он действительно обнаружит, что двоичный код был затронут, и повторите как подписание кода, так и в).

Тем не менее, это весьма несовершенны обходной путь, потому что:

  • Имея в два раза построить ошибка склонными
  • Мой файл dSYM будет понапрасну получить регенерировать

Кто-нибудь знает какой-либо способ принудительно выполнить шаг подписи кода в Xcode (из сценария запуска или в другом месте)?

ответ

0

Вы можете вызывать коды непосредственно из командной строки или сценария оболочки, например.

codesign -f -s "iPhone Distribution" --entitlements Entitlements.xcent -vv location/MyApp.app/MyApp 

Запустить man codesign, чтобы узнать об использовании.

Вы можете обнаружить все внутренние команды, запущенные, просмотрев подробный вывод сборки в Xcode. Перейдите на вкладку «Сборка», затем щелкните маленький значок в левом нижнем углу окна окна - тот, который выглядит как текст (рядом с значком предупреждения). Это покажет полный вывод сборки в новой области в Xcode.

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

Это оказалось очень сложным, поскольку Xcode делает некоторые тонкие вещи как часть своих внутренних процессов сборки (один пример: Xcode включает в себя профиль обеспечения в результирующем бинарном приложении, но в процессе изменения некоторых его значений, например настройка get-task-allow). Это означало, что я должен был написать инструмент для создания подходящего.xcent из профиля обеспечения, в зависимости от того, выполняется ли сборка Development/Distribution/App Store. Надеюсь, ничто из этого не повлияет на вас ...

+0

Спасибо. Оно работает! – jhoule

+0

я в конечном итоге делает что-то эквивалентное: – jhoule

+0

'экспорта CODESIGN_ALLOCATE = "$ {PLATFORM_DEVLOPER_BIN_DIR}/codesign_allocate"' ' – jhoule

Смежные вопросы