Mac App手动签名

目前看来不走原生开发就是一条不归路,而且是走的磕磕绊绊。

当XE8风风火火出现的时候,我还在坚守XE4,因为某个历史遗留问题不得不继续在此版本上填坑。


App需要发布,虽然不上架,但是也需要给他签个名,好让其在默认安全级别的Mac OS中运行,否则会因为来自不明身份的开发者而无法打开。


一、先说说XE4开发的Mac App发布到Mac store中的问题

XE4出现的时候,MacOS 基本还是10.8的天下,所以当时一切都相安无事,现在已经是10.10快速普及的时候,而在Mavericks,也就是10.9的时候苹果的发布签名必须要增加一个新的参数--deep,

所以当我们选择Target Platforms中的目标位App Store时,并在MacDeveloper Profile中输入我们对应的证书后(上架app 应该用的是发布证书3rd 开头)编译,就会提示:

code object is not signed at all

Mac App手动签名_第1张图片Mac App手动签名_第2张图片


国外有个解决方法是替换codesign为旧版本即可:http://andydunkel.net/delphi/firemonkey/2014/01/28/code_signing_problems_with_delphi_xe4_and_mavericks.html



2、言归正传,现在讲讲如何手动签名的事情

首先我们需要先花$99申请Mac开发的授权,然后获取Production下面的Developer ID类型的证书



然后把我们的app输出到Mac 中

就可以进行签名了

打开终端,cd到我们app所在的目录中,执行命令

codesign -f -s "Developer ID Application: XXXXXX (XXXXX)" -v "application_name.app" --deep
终端对应输出:

application_name.app: signed bundle with Mach-O thin (i386) [xx.xx.xxx]
检查一下签名是否成功:

spctl --verbose=4 --assess --type execute application_name.app
如果是签名成功,则返回

application_name.app: accepted
source=Developer ID
如果有问题,则有对应的提示,App中的MacOS目录中有多余的文件

application_name: a sealed resource is missing or invalid

注意:目前看来App的包中,MacOS这个目录中不能放一些资源文件,否则是无法签名的,应该统一移到Resources中,这才符合苹果的做法。不然提交到App Store也是会被打回来的参考:http://andydunkel.net/delphi/firemonkey/2014/01/22/signing_delphi_xe_applications_for_osx.html



补充一下上传appstore的手动签名方式:

这个时候需要用到3rd开头的两个证书了,Application用于给app签名的,Installer是用于生成pkg文件的

第一步:

codesign -f -s "3rd Party Mac Developer Application: xxxx" -v --deep "my.app" --entitlements Entitlements.plist [里面有沙盒权限的设置,

参考:http://andydunkel.net/delphi/osx/2015/04/15/code_signing_problems_with_delphi.html]

第二步:

productbuild \
--component my.app /Applications \
--sign "3rd Party Mac Developer Installer: xxxx" \
--product my.app/Contents/info.plist my.pkg


参考:http://www.cocoachina.com/bbs/read.php?tid=97021





注意:

其中遇到的一个问题





在签名是报出了这样的一个错误

网上据说是工程原来的名称和现在的Bundle Identifier的后缀不一致 造成的。

这样需要命令行执行:xattr -rc . 

然后再一次签名就可以了。


你可能感兴趣的:(Mac App手动签名)