最近提交之后,出现以下错误:
无效的签名-嵌套的应用程序捆绑包(FooBar.app/Contents/Frameworks/GData.framework)未签名,签名无效或未使用Apple提交证书签名。有关更多信息,请参考《代码签名和应用程序沙箱指南》。
无效的签名-嵌套的应用程序捆绑包(FooBar.app/Contents/Frameworks/Growl.framework)未签名,签名无效或未使用Apple提交证书签名。有关更多信息,请参考《代码签名和应用程序沙箱指南》。
无效的签名-嵌套的应用程序捆绑包libcurl(FooBar.app/Contents/Frameworks/libcurl.framework)未签名,签名无效或未使用Apple提交证书签名。有关更多信息,请参考《代码签名和应用程序沙箱指南》。
因此,我按照Technote 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说:
签名框架
既然框架是捆绑销售的,那么可以得出结论,您可以直接签署框架似乎是合乎逻辑的。然而,这种情况并非如此。为避免在签署框架时出现问题,请确保您签署的是特定版本而不是整个框架:
#这是错误的方式:
代码签名-s我的签名身份../FooBarBaz.framework
#这是正确的方法:
代码签名-s我的签名身份../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
为了好玩,我确实尝试直接签署框架包,但仍然被拒绝。但这正是文档所说的不做的事情。
任何猜测为何将其视为无效?我使用了与我的应用进行代码签名相同的证书-过去一直有效。
我唯一的猜测是与现有的plists(我是否需要在框架的Info.plists中拥有标识符?)或权利有关-有什么建议吗?