关于dmg文件是什么,和为什么要进行公证?
简单说下,dmg文件就是一个可直接在mac上安装的安装包,我自己的理解是就像windows上的exe安装包一样;
公证是将app传到苹果商店去做认证,如果不认证的话,安装的时候会提示该软件是不可信任软件。https://developer.apple.com/cn/news/?id=09032019a
官网描述如下:
1.打包
我们先定义几个要用到的变量,如下:
project_name=LBCast #你的工程名,即后缀为xcodeproj的那个文件的名字
app_name=LBCast #你的app的名字,即对应的scheme
ios_type=Release #包类型,是Debug包还是Release包
你的目录结构如下,至少要有这两个文件夹:
LBCast
LBCast.xcodeproj
命令如下:
xcodebuild clean -project ${project_name}.xcodeproj -scheme ${app_name} -configuration $ios_type #clean 清理
xcodebuild build -project ${project_name}.xcodeproj -scheme ${app_name} -configuration $ios_type #build构建打包
操作结束后,会得到一个${app_name}.app,即LBCast.app
2.签名
(1)这里是解锁钥匙串,否则会出现报错“errSecInternalComponent”,详情参考文末“报错1”
security unlock-keychain -p "1234567890" ~/Library/Keychains/login.keychain
(2)获取证书文件,只需要带“Developer ID Application”这一条即可
security find-identity -v > info_file #这里会检索出已有的所有的证书文件
cert_file=`cat info_file |grep "Developer ID Application" |awk -F "\"" ‘{print $2}‘` #检索出需要的证书,只要后面的证书名即可
echo cert_file=$cert_file
(3)用证书文件签名上面打包生成的app,即LBCast.app
codesign -f -s "$cert_file" -v LBCast.app --deep
(4)检查签名是否成功
spctl --verbose=4 --assess --type execute LBCast.app
如果出现“accepted”,说明签名成功,参考如下:
3.公证
这里需要几个参数,如下:
p_bundle_id=“www.letest.com” #这是app的bundle id, 开发有,或者开发在代码里写了,问开发要即可
u_name="test@163.com" #这是开发者登陆账号
u_passwd="ldlv-aoos-asza-qawe" #注意,这不是开发者的登陆密码,是需要重新生成的,详情看文末“公证密码”
asc_provider="7R34852FKA" #通过命令获取providershortname : xcrun altool --list-providers -u "my apple id" -p "app password"
关于这几个参数的描述,如下:
(1)将app生成zip或者pkg格式的文件,因为.app格式是不支持上传公证的,我下面用的是生成zip的格式,pkg格式的,请自行百度下吧
ditto -c -k --keepParent LBCast.app signed_LBCast.zip
(2)上传zip进行公证,大概需要一两分钟(斜杠是用来分行的,更加好看点~)
xcrun altool --notarize-app \
--primary-bundle-id "$p_bundle_id" \
--username "$u_name" \
--password "$u_passwd" \
--asc-provider "$asc_provider" \
--file signed_LBCast.zip > info_file
成功的话,会返回一个RequestUUID,如下:
No errors uploading ‘LBCast.zip‘.
RequestUUID = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
(3)用上面生成的uuid去查询公证状态,公证过程要一两分钟,所有我等待了120s后才查询
n_uuid=`cat info_notarize |grep -rn "RequestUUID" |awk -F " = " ‘{print $2}‘ `
echo n_uuid=$n_uuid
echo sleep 120s to wait notarize....
sleep 120
xcrun altool --notarization-info "$n_uuid" --username "$u_name" --password "$u_passwd"
成功的话,会返回如下字段:
如果返回了“Status: in progress”,说明还在进行中,你可以将sleep时间设置长一点
(4)公证通过后,给zip添加票据即可,只需要对zip添加票据即可,没必要单独再对app处理
xcrun stapler staple -v signed_LBCast.zip #对app添加票据
rm -rf LBCast.app #删除原始的app
unzip -q signed_LBCast.zip #解压公证过的zip
#xcrun stapler staple -v $dapp_name.app #have no need staple again
spctl -a -v LBCast.app #查看是否公证成功
显示如下表示公证成功了,有Notarized字段
LBCast.app: accepted source=Notarized Developer ID
4.生成dmg
需要的文件:下午再写。。。。
命令如下:
appdmg appdmg.json LBCast.dmg
公证密码:
参考:https://blog.csdn.net/lovechris00/article/details/102309757
报错1:出现报错“errSecInternalComponent”
https://www.cnblogs.com/wjw-blog/p/10683759.html
https://www.cnblogs.com/ficow/p/7861989.html
关于苹果公证(Apple Notarizition)机制的一些总结: https://blog.csdn.net/ftpleopard/article/details/102721138
https://developer.apple.com/cn/developer-id/
原文:https://www.cnblogs.com/zndxall/p/12072353.html