Ошибка при попытке запустить версию выпуска приложения на другом компьютере с ошибкой "Неверная подпись кода"

Скомпилировал релизную версию моего приложения и скопировал пакет на другой компьютер для тестирования. Сбой с этим:

Dyld Error Message:
  Library not loaded: @rpath/libxxx.dylib
  Referenced from: /Users/USER/Downloads/*/ndncon.app/Contents/MacOS/ndncon
  Reason: no suitable image found.  Did find:
    /Users/remap/Downloads/ndncon2-testing/ndncon.app/Contents/MacOS/../Frameworks/libxxx.dylib: code signature invalid for '/Users/remap/Downloads/ndncon2-testing/ndncon.app/Contents/MacOS/../Frameworks/libxxx.dylib'

Я проверил проверки:

$ codesign -vv --deep-verify /Users/remap/Downloads/ndncon2-testing/ndncon.app 
/Users/remap/Downloads/ndncon2-testing/ndncon.app: valid on disk
/Users/remap/Downloads/ndncon2-testing/ndncon.app: satisfies its Designated Requirement

а также

$ codesign -dvv /Users/remap/Downloads/ndncon2-testing/ndncon.app 
Executable=/Users/remap/Downloads/ndncon2-testing/ndncon.app/Contents/MacOS/ndncon
Identifier=ucla.edu.ndncon
Format=bundle with Mach-O thin (x86_64)
CodeDirectory v=20200 size=8819 flags=0x0(none) hashes=434+3 location=embedded
Signature size=4688
Authority=Mac Developer: g....n@gmail.com (H79XXXX834)
Authority=Apple Worldwide Developer Relations Certification Authority
Authority=Apple Root CA
Signed Time=Dec 1, 2016, 12:51:19 PM
Info.plist entries=26
TeamIdentifier=XXXXXXXXX
Sealed Resources version=2 rules=12 files=44
Internal requirements count=1 size=180

и наконец,

$ sudo spctl --assess -v /Users/remap/Downloads/ndncon2-testing/ndncon.app 
/Users/remap/Downloads/ndncon2-testing/ndncon.app: accepted
override=security disabled

Не уверен, почему он жалуется на 1) внутреннюю динамическую библиотеку и 2) почему он жалуется вообще?

1 ответ

Мы занимались этим последние пару дней и наконец выяснили проблему. Хотя вы не упоминаете об этом в вопросе, я сильно подозреваю, что вы столкнулись с этим на OS X Yosemite 10.10.5

Проблема в том, что вам [вполне вероятно] нужно иметь хэш sha1 в подписи кода на Yosemite, и у вас есть только хеш sha256. Утилита CodeSign проверяет цель развертывания двоичного файла [LC_VERSION_MIN_MACOSX], чтобы определить, нужно ли ему включать sha1 или просто sha256, и соответствующим образом подписывает. По какой-то причине "codeign -vv" на Yosemite неправильно сообщает действительную подпись, когда она явно не работает.

Следует отметить, что это не проблема в более ранних версиях OS X, потому что подписи библиотеки не проверяются до Yosemite.

Другие вопросы по тегам