目前看来不走原生开发就是一条不归路,而且是走的磕磕绊绊。
当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
国外有个解决方法是替换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 .
然后再一次签名就可以了。