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
Литература: