У нас есть мультиплатформенный набор исполняемых файлов и библиотек командной строки, которые мы портировали на Mac. Формат файла был
- / Applications /
- (папка компании) /
- (наш пользовательский интерфейс) .app
- (название продукта) /
- bin /
- lib /
- (прочее) /...
Поставлено вDMG, который был подписан под кодом, как и приложение. Это работало нормально до Catalina.
Теперь на Catalina мы подписали все исполняемые файлы, dylibs, приложения (включая вложенные в каркас приложения верхнего уровня), каркасы и сам DM. Когда мы заверяем это, полученный журнал JSON не содержит проблем. Однако, когда я запускаю любой из наших исполняемых файлов , который зависит от одного из наших dylibs , я получаю всплывающее окно, в котором говорится, что «разработчик не может быть идентифицирован». Даже если он был подписан и заверен нотариально. Запуск кодового знака с опцией -dvvv включает в себя следующее:
- Выбор хэша SHA-256
- список записей полномочий, оканчивающихся в Apple Root CA
- Запись TeamIdentifier
- Метка времени
- Время выполнения: 10.13.0
Вопрос Как я могу это исправить или, по крайней мере, заставить Gatekeeper сказать мне почему он не принимает этот файл? Может быть, журнал или эквивалент spctl --assess для файлов, а не приложений?
Наблюдения
- Это происходит только тогда, когда
- ОС - Catalina
- он находится в папке / Applications
- вне / Applications (например, в папке на рабочем столе), это происходит только иногда (и иногда он утверждает, что dylib не может быть загружен с первой попытки, а затем успешноесли попытается через мгновение)
- исполняемый файл зависит от одного или нескольких наших dylibs (автономные запускаются нормально)
- исполняемый файл имеет набор com.apple.quarantine xattr
- Я попытался смешать и сравнить между чистыми и загруженными (то есть файлами, помещенными в карантин xattr), и проблема возникает, только если исполняемый файл помещен в карантин;не имеет значения, загружает ли исполняемый файл, не помещенный в карантин, карантина dylib
- Операция подписания выполнялась с помощью кодового знака с аргументами "--deep --strict --timestamp --options runtime ", а затем проверено
- РЕДАКТИРОВАТЬ: С тех пор я обновил это, чтобы включить некоторые разрешения Hardened Runtime для решения другой проблемы сборки, но это не помогло с этим
- Исполняемые файлы зависят от dylibs через @rpath (как сообщает otool -L)
- EDIT: я пытался заменить @rpath на @executable_path /../ libв каждом случае, и это не помогло