XCode 6.3 Проблемы с подписями кода после обновления

Недавно я обновил XCode 6.3 и начал иметь некоторые странные проблемы с подделкой кода. Иногда XCode начинает жаловаться на проблемы с подделкой кода. И у обоих будет проблема вроде:

invalid or unsupported format for signature ... Command /usr/bin/codesign failed with exit code 1

или

... Command /usr/bin/codesign failed with exit code 11

Не удается найти шаблон, но выглядит как проблема с кодовым знаком XCode, поскольку иногда после очистки и перезапуска XCode он будет работать.

Я не изменял никаких настроек в отношении подписи кода. Структура проекта довольно сложная, она ссылается на проекты и контейнеры.

Любая помощь была оценена.

** Обновление **

Это не помогло мне удалить производные данные или перезапустить XCode. Но это сработало, если я удалил проект и загрузил его из git. Это удаленные файлы XCode, которые не привязаны к git.

Снова после очистки он перестает работать. И в консольных журналах у меня есть что-то вроде этого:

codesign[4111]: Internal error unloading bundle CFBundle 0x7fb44a40adc0 <(null)> (framework, not loaded)

** Другое обновление **

Нашел в твиттере кого-то, у кого такая же проблема. Похоже, проблема вызвана опцией -deep при подписании кода.

https://github.com/atom/atom-shell/issues/1396

Решение заключается не в том, что приложение и фреймворки с кодовым знаком внутри - с -deep.. Но скорее код подписывает каждую структуру отдельно.

http://furbo.org/2013/10/17/code-signing-and-mavericks/

Ответ 1

Просто это случилось со мной, а также после последнего обновления X-Code. Но X-Code советовал мне обновить настройки моего проекта на некоторое время, я просто не обходил его. Ссылка, которую вы предоставляете, хорошо объясняет.

Фактически это проявляется как проблема в навигаторе, и X-Code предложит исправить его автоматически, когда вы выберете проблему. Вам просто нужно удалить параметр --deep из собственных настроек сборки.

Это работало с моими 2 сторонними фреймворками, Sparkle и Siphon.

Ответ 2

Проблема была вызвана опцией подписи кода -deep и правами.

Чтобы решить эту проблему, мне пришлось вручную подписать фреймворки. Для этого потребовалось добавить новую фазу сборки script и запустить script, аналогичный этому:

IDENTITY="HEX_IDENTITY"

export CODESIGN_ALLOCATE="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate"

FRAMEWORKS_LOCATION="${BUILT_PRODUCTS_DIR}"/"${FRAMEWORKS_FOLDER_PATH}"
EXECUTABLES_LOCATION="${BUILT_PRODUCTS_DIR}"/"${EXECUTABLE_FOLDER_PATH}"

codesign --verbose --force --deep --verify --sign "$IDENTITY" "$EXECUTABLES_LOCATION/MY_HELPER_APP.app"
codesign --verbose --force --deep --verify --sign "$IDENTITY" "$FRAMEWORKS_LOCATION/MY_FRAMEWORK/Versions/A"

HEX_IDENTITY можно получить с помощью команды оболочки:

security find-identity 

Это отобразит список подписи идентификаторов с шестнадцатеричными номерами.

После экспорта приложения в приложение я проверил подписание кода с помощью команды:

codesign --verify --verbose --deep MyApp.app
spctl --verbose --assess --type execute MyApp.app

Литература: