@Rookie
2020-04-01T10:11:45.000000Z
字数 3055
阅读 966
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" step
export IDENTITY=LK12345678
export PARENT_PLIST=/path/to/parent.plist
export CHILD_PLIST=/path/to/child.plist
export APP_PATH=/path/to/yourapp/YourApp.app
codesign --deep -s $IDENTITY --entitlements $CHILD_PLIST $APP_PATH"/Contents/Versions/CHROMIUMVERSIONHERE/nwjs Helper.app" -f
codesign --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.app
Executable=/Users/yuanren/Desktop/xfish.app/Contents/MacOS/nwjs
Identifier=io.nwjs.nwjs
Format=app bundle with Mach-O thin (x86_64)
CodeDirectory v=20200 size=268 flags=0x0(none) hashes=3+3 location=embedded
Hash type=sha256 size=32
CandidateCDHash sha1=c268d10248265aacfad95d0da3df9ba969526591
CandidateCDHash sha256=fbc07c23d5f9b6ccdebcd9d4e2f3a3c5ce23bcc2
Hash choices=sha1,sha256
CDHash=fbc07c23d5f9b6ccdebcd9d4e2f3a3c5ce23bcc2
Signature size=9051
Authority=Developer ID Application: yafang liu (3259YVRKR7)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=Mar 31, 2020 at 4:56:44 PM
Info.plist entries=32
TeamIdentifier=3259YVRKR7
Sealed Resources version=2 rules=13 files=11995
Internal requirements count=1 size=172