最近提交后,我遇到了以下错误:
无效签名-嵌套的应用程序包(FooBar.app/Contents/Frameworks/GData.framework)未经签名、签名无效或未使用苹果提交证书进行签名。有关更多信息,请参阅代码签名和应用程序沙箱指南。
无效签名-嵌套的应用程序包(FooBar.app/Contents/Frameworks/Growl.framework)未经签名、签名无效或未使用苹果提交证书进行签名。有关更多信息,请参阅代码签名和应用程序沙箱指南。
无效签名-嵌套的应用程序库libcurl(FooBar.app/Contents/Frameworks/libcurl.framework)未经签名、签名无效或未使用苹果提交证书进行签名。有关更多信息,请参阅代码签名和应用程序沙箱指南。
所以,我按照技术说明2206签署了所有框架包:
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./libcurl.framework/Versions/A/libcurl
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./libcurl.framework/Versions/A/libssh2.1.dylib
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./Growl.framework/Versions/A/Growl
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./GData.framework/Versions/A/GData
Technote 2206表示:
签署框架
由于框架是捆绑包,因此直接签署框架似乎是合乎逻辑的结论。但是,事实并非如此。为了在签署框架时避免问题,请务必签署特定版本而不是整个框架:
# 这是错误的方法:
codesign -s my-signing-identity ../FooBarBaz.framework
# 这是正确的方法:
codesign -s my-signing-identity ../FooBarBaz.framework/Versions/A
当我尝试验证结果时,结果看起来对我来说很好:
% codesign -vvv FooBar.app/Contents/Frameworks/libcurl.framework
FooBar.app/Contents/Frameworks/libcurl.framework: valid on disk
FooBar.app/Contents/Frameworks/libcurl.framework: satisfies its Designated Requirement
% codesign -vvv FooBar.app/Contents/Frameworks/Growl.framework
FooBar.app/Contents/Frameworks/Growl.framework: valid on disk
FooBar.app/Contents/Frameworks/Growl.framework: satisfies its Designated Requirement
为了好玩,我尝试直接签名框架捆绑包,但仍被拒绝。但这正是文档所说不要做的事情。
有没有猜测为什么会被认为是无效的?我正在使用与以前成功代码签名的相同证书。
我唯一的猜测是与现有的 plist(我需要拥有框架 Info.plist 中的标识符吗?)或授权有关 —— 有任何建议吗?