尝试在“代码签名无效”错误的另一台计算机上运行应用程序发行版时失败

问题描述:

编译我的应用程序的发行版并将该软件包复制到另一台计算机进行测试。崩溃与此:尝试在“代码签名无效”错误的另一台计算机上运行应用程序发行版时失败

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: [email protected] (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)为什么它抱怨所有?

过去几天我们一直在处理这个问题,最后找出问题所在。虽然你没有在问题中提到它我强烈怀疑你正在运行到这个上运行OS X Yosemite 10.10.5

的问题是,你[很可能]需要有一个SHA1哈希在你的代码签名在优胜美地,你只有一个sha256散列。 codeign实用程序将检查二进制文件的部署目标[LC_VERSION_MIN_MACOSX],以检测它是否需要包含sha1或sha256并进行适当标记。无论出于何种原因,优胜美地的“codesign -vv”在明显失败时都会错误地报告有效签名。

值得注意的是 - 这在OS X的早期版本中不是问题,因为直到优胜美地之前,库签名才被验证。

+0

感谢您的洞察!即使我的版本是El Captain 10.11.6,我认为这可能是问题。我会检查这个。那么你是如何解决它的? – peetonn

+0

重建指定较早的部署目标。一个简单的方法可能是在较早版本的OS X上重新构建库并复制它。 – hemancuso

+0

试图重建为10.10和10.9 - 没有帮助。该库是使用GNU autotools构建的,你知道它是否将库与特定的macOS版本联系起来? – peetonn