Я помещаю исполняемый двоичный файл XXX в свое приложение, работающее на MacOS, и подписываю его кодом. Мое приложение будет использовать эту службу через порт.
Исполняемый двоичный файл XXX зарегистрирует службу через файл plist после установки моего приложения, файл plist содержит DYLD_LIBRARY_PATH, который сообщает исполняемому двоичному файлу, где найти dylib для использования.
launchctl load -wF "$ HOME / Библиотека / LaunchAgents / local.plist"
launchctl запускать локально
Вот в чем проблема:
он работал нормально после того, как я создал приложение.
но когда я все это подписал и заверил нотариально, а затем открыл свое приложение для использования, оно получило следующие ошибки:
dyld: Library not loaded: @@HOMEBREW_PREFIX@@/opt/libev/lib/libev.4.dylib
Referenced from: /Users/buffer/Library/Application Support/XXX
Reason: unsafe use of relative rpath @@HOMEBREW_PREFIX@@/opt/libev/lib/libev.4.dylib in /Users/buffer/Library/Application Support/XXX with restricted binary
Он будет использовать путь к dylib по умолчанию (@@ HOMEBREW_PREFIX @@ / opt / libev / lib / libev.4.dylib), который поступает из исполняемого двоичного файла XXX, не из моего пользовательского DYLD_LIBRARY_PATH. Apple ограничила двоичное использование такого небезопасного относительного пути rpath.
Обновлено:
Мое приложение запустит сценарий оболочки для установки исполняемого двоичного файла XXX и dylib, исполняемый двоичный файл XXX зарегистрируется как служба для запуска и остановки через plist, как показано ниже.
launchctl load -wF "$ HOME / Библиотека / LaunchAgents / local.plist"
launchctl запускать локально
Мой исполняемый двоичный путь XXX и DYLD_LIBRARY_PATH оба расположены в / Users / buffer / Library / Application Support / myApp / ***, он запускается отдельно как служба для моего приложения.
Я обнаружил несколько ситуаций ниже:
1. У меня такой же исполняемый двоичный файл XXX, подписанный 25 сентября 2018 г., он работает нормально.
2. И исполняемый двоичный файл XXX, который не был подписан, тоже работал нормально.
3. Но когда я сейчас подписал исполняемый двоичный файл XXX и буду использовать его с dylib, он получит ошибку, указанную выше.
Итак, изменился ли алгоритм подписи яблока и возникает ли эта ошибка? вот моя команда подписи кода на данный момент, как показано ниже:
codeign --force --options runtime --sign "Developer ID Application: ****" XXX
Наконец:
Я обнаружил проблему, Apple требует, чтобы разработчик включил усиленную среду выполнения для каждого приложения, чтобы заблокировать сейчас. если вы включите усиленную среду выполнения, но не укажете права, некоторые разрешения будут отключены по умолчанию.
Мое разрешение на использование переменных среды DYLD отключено по умолчанию
вы можете проверить этот документ ниже
Защищенные права времени выполнения
Если вы настраиваете рабочий процесс подписи кода, как я, вы можете указать права при кодовой подписи, как показано ниже, entity.plist содержит разрешения, которые вы хотите включить.
codesign --force --options runtime --entitlements /Users/buffer/Desktop/entitlements.plist --sign "Developer ID Application: ****" XXX
--options runtime
работал у меня. - person Thanh Dat Nguyen   schedule 02.12.2019