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

当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

macos生成Android平台签名证书_App

macos生成Android平台签名证书_XE4_02


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



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

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


macos生成Android平台签名证书_App_03

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

就可以进行签名了

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

codesign -f -s "

终端对应输出:

检查一下签名是否成功:

spctl --verbose=4 --assess --type execute

如果是签名成功,则返回

如果有问题,则有对应的提示,App中的MacOS目录中有多余的文件

注意:目前看来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 [里面有沙盒权限的设置,

]

第二步:

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