@Rookie
2020-04-01T02:11:45.000000Z
字数 3055
阅读 1278
iOS开发
前因, 群里面一位大佬用 nwjs 开发了 mac App, 因为签名问题分发给客户因为Gatekeeper 机制, 导致用户安装 APP 体验过程不好.苹果官方也有介绍「OS X:关于 Gatekeeper」
Gatekeeper 是苹果的一种反恶意软件的功能,于2012年7月被推出,旨在阻止不可信的、存在问题的应用程序的运行,使Mac OS X系统免受恶意软件的影响。需要手动关闭 SIP 功能后才可以运行软件。「关闭 Mac 的 SIP 安全设置功能教程」或者 「打开任何来源,解决Mac提示文件“已损坏”的问题」
macOS 中的“门禁”会检查在 Mac App Store 以外地方的 app 中是否配有 Developer ID 证书,避免用户下载和安装恶意软件。在分发任何 app、插件或安装器软件包之前,请务必对它们进行签名,以便让“门禁”知道安装这些内容是安全的。现在,您可以将在 macOS Mojave 上运行的 app 提交到 Apple 进行公证,从而进一步提高用户对您 app 的信心。「苹果官方说明」

Developer Certificate
Mac Development:这个只用来开发,Debug,不是正式发布的版本
Production Certificate
Developer ID Application:这个用于开发者使用开发者帐号签名,导出一个线下发布版本的.app文件,脱离了苹果的Mac App Store。
Developer ID Installer:用于开发者打包,同时加上开发者帐号签名,打包工具在下面介绍。
Mac App Distribution:这个用于Xcode自己把.app文件上传到Mac App Store
Mac Installer Distribution:这个没用过,但可以肯定的,也是上传Mac App Store用的
Mac App Store
Developer ID
我们主要需要的就是「Developer ID Application」这个类型的证书,「Mac Development」只是用于开发的,而前者可以供分发,也就是签名后,别人下载安装,就是来自「被认证的开发者」的应用啦。
Developer ID Application证书制作
Mac App 发布的最后 1km
$ codesign -f -s "Developer ID Application: XXXXX (4J45KSVBG8)" ST.app
如果出现
resource fork, finder information, or similar detritus not allowed错误,可以参数运行xattr -rc FutuNiuniu.app, 相关说明看这里
# Do not forget to update the above vars# IDENTITY is the string you have saved in the "Requesting certificates" stepexport IDENTITY=LK12345678export PARENT_PLIST=/path/to/parent.plistexport CHILD_PLIST=/path/to/child.plistexport APP_PATH=/path/to/yourapp/YourApp.appcodesign --deep -s $IDENTITY --entitlements $CHILD_PLIST $APP_PATH"/Contents/Versions/CHROMIUMVERSIONHERE/nwjs Helper.app" -fcodesign --deep -s $IDENTITY --entitlements $PARENT_PLIST $APP_PATH -f
我们可以从应用程序目录随便挑几个App试试,使用参数➜ codesign -v FutuNiuniu.app 如果App已签名,什么都不会打印,如果App未签名,则会打印 FutuNiuniu.app code object is not signed at all
对于已签名的App,使用参数-vvv会有略详细的输出结果,如果使用参数-dvvv会有非常详细的签名情况
yan% codesign -dvvv /Users/yuanren/Desktop/xfish.appExecutable=/Users/yuanren/Desktop/xfish.app/Contents/MacOS/nwjsIdentifier=io.nwjs.nwjsFormat=app bundle with Mach-O thin (x86_64)CodeDirectory v=20200 size=268 flags=0x0(none) hashes=3+3 location=embeddedHash type=sha256 size=32CandidateCDHash sha1=c268d10248265aacfad95d0da3df9ba969526591CandidateCDHash sha256=fbc07c23d5f9b6ccdebcd9d4e2f3a3c5ce23bcc2Hash choices=sha1,sha256CDHash=fbc07c23d5f9b6ccdebcd9d4e2f3a3c5ce23bcc2Signature size=9051Authority=Developer ID Application: yafang liu (3259YVRKR7)Authority=Developer ID Certification AuthorityAuthority=Apple Root CATimestamp=Mar 31, 2020 at 4:56:44 PMInfo.plist entries=32TeamIdentifier=3259YVRKR7Sealed Resources version=2 rules=13 files=11995Internal requirements count=1 size=172