macOS开发 证书等配置/打包后导出及上架



首先需要为Mac App创建App ID

1.选择'App IDs'项
2.选择类型为'App'

填写信息如下—Description为"ProjectNameForMac"、Bundle ID为"com.CompanyName.ProjectName"!

填写的信息

创建成功后:该App ID的名称为“ProjectNameForMac”、Identifier为“com.CompanyName.ProjectName”(App的Bundle ID)

有了该App ID



接下来为App创建证书

Mac证书类型:

  • Mac Development——开发证书(证书名称:Mac Developer: TeamMemberName
    Sign development versions of your Mac app.
    签署Mac应用程序的开发版本

  • Mac App Distribution——App发布证书(证书名称:3rd Party Mac Developer Application: TeamName
    This certificate is used to code sign your app and configure a Distribution Provisioning Profile for submission to the Mac App Store.
    此证书用于对你的App进行代码签名,并为提交Mac App Store配置分发配置文件。

  • Mac Installer Distribution——安装包发布证书(证书名称:3rd Party Mac Developer Installer: TeamName
    This certificate is used to sign your app's Installer Package for submission to the Mac App Store.
    此证书用于名的你的应用程序安装包提交Mac App Store

  • Developer ID Installer——开发者ID安装包证书(证书名称:Developer ID Installer: TeamName
    This certificate is used to sign your app's Installer Package for distribution outside of the Mac App Store.
    此证书用于对你应用程序安装包进行签名,以在Mac App Store之外可以分发

  • Developer ID Application——开发者ID应用证书(证书名称:Developer ID Application: Team Name
    This certificate is used to code sign your app for distribution outside of the Mac App Store.
    此证书用于对您的应用程序进行代码签名,以在Mac App Store之外可以分发


  • 创建“Mac Development”证书——开发证书
选择“Mac Development”项
使用“CertificateSigningRequest.certSigningRequest”证书

证书创建好:可点击“Download”下载!

创建好“Mac Development”证书

下载后的“Mac Development”证书:

下载后的“Mac Development”证书


  • 创建“Mac App Distribution”证书——App发布证书
选择“Mac App Distribution”项
使用“CertificateSigningRequest.certSigningRequest”证书

证书创建好:可点击“Download”下载!

创建好“Mac App Distribution”证书

下载后的“Mac App Distribution”证书:

下载后的“Mac App Distribution”证书


  • 创建“Mac Installer Distribution”证书——安装包发布证书
选择“Mac Installer Distribution”项
使用“CertificateSigningRequest.certSigningRequest”证书

证书创建好:可点击“Download”下载!

创建好“Mac Installer Distribution”证书

下载后的“Mac Installer Distribution”证书:

下载后的“Mac Installer Distribution”证书


  • 创建“Developer ID Installer”证书——开发者ID安装包证书
选择“Developer ID Installer”项
使用“CertificateSigningRequest.certSigningRequest”证书

证书创建好:可点击“Download”下载!

创建好“Developer ID Installer”证书

下载后的“Developer ID Installer”证书:

下载后的“Developer ID Installer”证书


  • 创建“Developer ID Application”证书——开发者ID应用证书
选择“Developer ID Application”项
使用“CertificateSigningRequest.certSigningRequest”证书

证书创建好:可点击“Download”下载!

创建好“Developer ID Application”证书

下载后的“Developer ID Application”证书:

下载后的“Developer ID Application”证书

至此,完成所有证书的创建和下载!

开发者账号上所有证书:

所有证书


证书导入到“钥匙串”中:(步骤如下)

双击要添加的证书:

要添加的证书
弹出的提示

点击"添加",完成证书导入


重复上面步骤,将所有的证书导入到“钥匙串”中,如下:

钥匙串中的证书


Tips导出证书的p12文件!(给其他电脑可进行开发工作)
步骤如下~

选择要处理的证书并展开钥匙,鼠标右键选择“导出”项

为p12文件命名设置存储路径,再点击"存储"!

为p12文件命名和设置存储路径

需要为p12文件设置保护密码

为p12文件设置保护密码


导出后的p12文件:

“Developer ID Application”证书\“Developer ID Installer”证书 (P12文件)
“Mac App Distribution”证书\“Mac Installer Distribution”证书 (P12文件)
“Mac Development”证书 (P12文件)


整理后所有P12文件

所有的P12文件



开始添加测试设备Mac(针对(开发证书)开发版本的):需在开发者账号填入测试设备Mac的UUID

获取Mac电脑的UUID:
点击屏幕上方菜单栏的,选择“关于本机”后再点击“系统报告”

“关于本机”页面

在“系统报告”页面查看系统信息-获取Mac电脑的UUID

获取到Mac电脑的UUID

再在开发者账号上添加Mac电脑的UUID——用作测试机:

在开发者账号上添加Mac电脑的UUID

添加好Mac电脑的UUID,点击“Register”注册

添加好Mac电脑的UUID,点击“Register”注册
添加Mac电脑的UUID并注册完成

完成测试设备Mac电脑(UUID)的添加!



再继续创建描述文件:

  • 创建“macOS App Development”描述文件
选择“macOS App Development”项

选择对应的App ID,再点击“Continue”

选择对应的App ID,再点击“Continue”

Tips:勾选"Mac Catalyst"项时~

(勾选"Mac Catalyst"支持iPad)

选择对应的Mac Development证书

选择对应的Mac Development证书

选择测试设备(Mac电脑的UUID)

选择测试设备(Mac电脑的UUID)

给描述文件命名,并点击“Generate”进行创建

给描述文件命名,并点击“Generate”
创建好“macOS App Development”描述文件

下载后的“macOS App Development”描述文件:

下载后的“macOS App Development”描述文件

点击该文件弹出安装提示:

点击该文件弹出安装提示

再输入电脑账户密码进行安装:

输入电脑账户密码进行安装
  • 创建“Mac App Store”描述文件
选择“Mac App Store”项

选择对应的App ID,再点击“Continue”

选择对应的App ID,点击“Continue”

选择对应的Mac App Distribution证书

选择对应的Mac App Distribution证书

给描述文件命名,并点击“Generate”进行创建

给描述文件命名,并点击“Generate”
创建好“Mac App Store”描述文件

下载后的“Mac App Store”描述文件:

下载后的“Mac App Store”描述文件

点击该文件弹出安装提示:

点击该文件弹出安装提示

再输入电脑账户密码进行安装:

输入电脑账户密码进行安装

会弹出“安装描述文件失败”提示:

“安装描述文件失败”提示
  • 创建“Developer ID”描述文件
选择“Developer ID”项

选择对应的App ID,再点击“Continue”

选择对应的App ID,再点击“Continue”

选择对应的Developer ID Application证书

选择对应的Developer ID Application证书

给描述文件命名,并点击“Generate”进行创建

给描述文件命名,并点击“Generate”进行创建
创建好“Developer ID”描述文件

下载后的“Developer ID”描述文件:

下载后的“Developer ID”描述文件

点击该文件弹出安装提示:

点击该文件弹出安装提示

再输入电脑账户密码进行安装:

输入电脑账户密码进行安装

成功安装上该描述文件:提示'已验证'

该描述文件 安装成功

开发者账号上所有描述文件:

所有描述文件



完成了App ID、证书、描述文件的创建,以及测试设备的添加!
就可以配置工程了!

添加 App ID(Bundle Identifie)到工程的TARGET中:

添加App ID(Bundle Identifier)


选择并配置开发发布描述文件

开发、发布的描述文件
配置好 开发、发布的描述文件

现在就可以进行代码开发工作和版本打包了!




打包后导出及上架

先看一下下面已经打包好IPA包

已经打包好的IPA包

要对IPA包处理有如下4种

  • App Store Connect
  • Developer ID
  • Development
  • Copy App

  • App Store Connect
选择"App Store Connect"项


  • 选择"Upload",上传包至‘App Store Connect’~
选择"Upload"
点击"Next"

选择相应的描述文件——Mac_ProjectName_App_Store

选择相应的描述文件——Mac_ProjectName_App_Store

再点击"Upload"进行上传~

ProjectName.pkg包的信息展示
ProjectName.pkg包 上传中

ProjectName.pkg上传‘App Store Connect’成功后:

上传‘App Store Connect’成功

在IPA包列表中,该ProjectName.pkg包上传成功后的状态——Uploaded

该ProjectName.pkg包上传成功后的状态——Uploaded

就可以去开发者账号进行上架工作了~



  • 选择"Export",导出为ProjectName.pkg包
选择"Export"
点击"Next"

选择相应的描述文件——Mac_ProjectName_App_Store

选择相应的描述文件——Mac_ProjectName_App_Store

再点击"Export"进行导出~

ProjectName.pkg包的信息展示

导出后的ProjectName.pkg包

导出的pkg包

ProjectName.pkg使用:

  • 1.双击ProjectName.pkg,可进行安装

    安装ProjectName.pkg
  • 2.通过"Transporter"软件,上传至‘App Store Connect’(进行上架工作)

    Transporter


  • Developer ID
选择"Developer ID"项


  • 选择"Upload",上传包以供苹果进行公证
选择"Upload"

选择相应的描述文件——Mac_ProjectName_Develop_ID

选择相应的描述文件——Mac_ProjectName_Develop_ID

再点击"Upload"进行上传~

ProjectName.zip包的信息展示
ProjectName.zip包 上传中

ProjectName.zip包上传成功后:提示等待公证的通知

提示等待公证的通知

收到公证的通知:

公证的通知

公证已经通过!可以兼容macOS Catalina以上macOS系统



  • 选择"Export",直接导出为App~ (Developer ID包)
选择"Export"

选择相应的描述文件——Mac_ProjectName_Develop_ID

选择相应的描述文件——Mac_ProjectName_Develop_ID

再点击"Export"进行导出~

App包的信息展示
  • 1.已经成功公证,导出的App包

    提示已经成功公证
    填写项目的名称

    公证后导出的Developer ID包:

    公证后导出的Developer ID包


  • 2.未成功公证,导出的App包
    未成功公证,导出的Developer ID包:

    未成功公证,导出的App包Developer ID包



关于 公证 \ macOS Catalina版本的支持

所以为了兼容更高版本的系统,最好将Developer ID包进行公证再导出使用!


  • Development
选择"Development"项

选择相应的描述文件——Mac_ProjectName_Development

选择相应的描述文件——Mac_ProjectName_Development

再点击"Export"导出App包~

App包的信息展示

导出的Development包:

导出的Development包


  • Copy App
选择"Copy App"项

直接就可以选择存储路径文件夹命名

选择存储路径,文件夹命名

导出后的App包:

导出后的App包


常用包的形式:
"App Store Connect"(上架/pkg安装包) >> "Developer ID"(直接使用App) >>> "Development"(针对Mac测试机) >>>>> "Copy App"


应用包处理使用——参考
我们公司采用了如下两个方案:






goyohol's essay



熟悉证书相关配置和打包的流程、书写本文!花了很多时间,也在网上参考很多了资料~




相关资料和总结:(不想详细整理了,不过可参考性依次下降哈~)


Mac开发参考:

macOS开发 — Xamarin.Mac


证书和标识符:https://docs.microsoft.com/zh-cn/xamarin/mac/deploy-test/publishing-to-the-app-store/certificates-identifiers
应用的预配配置文件:https://docs.microsoft.com/zh-cn/xamarin/mac/deploy-test/publishing-to-the-app-store/profiles
Mac App Store 捆绑:https://docs.microsoft.com/zh-cn/xamarin/mac/deploy-test/publishing-to-the-app-store/bundling

Mac App 发布的最后 1kmhttps://sspai.com/post/40269


Mac OS平台下应用程序安装包制作工具Packages的使用介绍


Code Signing Services
https://developer.apple.com/documentation/security/code_signing_services?language=objc


Developer ID

Distribute outside the Mac App Store (macOS):https://help.apple.com/xcode/mac/current/#/dev033e997ca
Developer ID:https://developer.apple.com/support/developer-id/

使用“Developer ID”打包


Unable to revoke Mac Certificates
https://stackoverflow.com/questions/25005194/unable-to-revoke-mac-certificates

macOS 开发 -删除 Developer ID ApplicationDeveloper ID Installer 证书
https://blog.csdn.net/lovechris00/article/details/82765479
https://www.itread01.com/content/1541032563.html


"App Store Connect"包 - 只能上传APP Store! 不能本地使用(可安装),使用报错“Code Signature Invalid”!

"Developer ID"包 - 直接安装!不支持“Network Extensions”/“Push Notifications”等功能

"Development"包 - 只能安装在填写了UUID的电脑使用!



️️
打的“MAC App Store”包,上传APP Store报错:

macOS 开发 - Provisioning profile "xxx" doesn't support the Network Extensions capability.:https://blog.csdn.net/lovechris00/article/details/84028722

要么使用“Network Extensions”,必须使用‘App Store’类型的证书及描述文件;
使用‘Developer ID’类型的证书及描述文件,仅打包可关闭“Network Extensions”的使用!


打的“MAC App Store”包,直接上传到App Store,能安装但是本地是不能使用的!
MAC APP 意外退出 EXC_CRASH (Code Signature Invalid):>http://www.cocoachina.com/bbs/read.php?tid=307799

EXC_CRASH (Code Signature Invalid)

参考 https://mihail.stoynov.com/2013/04/22/force-boot-camp-into-using-an-iso-image-of-windows-to-create-the-usb-flash-drive-for-mountain-lion-with-updated-boot-camp/
参考 Parental Controls after OS X 10.8.2: EXC_CRASH and changes to https handling:http://tech.kateva.org/2013/05/parental-controls-after-os-x-1082.html
参考 OS X 10.9 Instant Crash [Fixed in update]:https://telltale.com/community/discussion/comment/869053/

无用 Mac OS X app crash with Code Signature Invalid error
无用 OSX Code Signature Invalid Exception when launched from Service on

参考,未尝试 Code Signature Invalid:https://blog.csdn.net/yuanya/article/details/51057709


ERROR ITMS-90242: "The product archive is invalid. The Info.plist must contain a LSApplicationCategoryType key, whose value is the UTI for a valid category. For more details, see "Submitting your Mac apps to the App Store"."

plist文件:

<key>LSApplicationCategoryType</key>
  <string>public.app-category.video</string>


ERROR ITMS-90277: "Invalid Bundle Identifier. The application bundle contains a tool or framework $(PRODUCT_NAME) [com.CompanyName.ProjectName.pkg/Payload/ProjectName.app/Contents] using the bundle identifier '$(PRODUCT_BUNDLE_IDENTIFIER)', which is not a valid bundle identifier."


'$(PRODUCT_BUNDLE_IDENTIFIER)'
https://stackoverflow.com/questions/41944407/xcode-itunes-submit-error-itms-90277?noredirect=1
https://stackoverflow.com/questions/30110757/xcode-error-when-uploading-to-app-store-no-suitable-application-records-were-f


ERROR ITMS-90261: "Bad CFBundleExecutable. Cannot find executable file that matches the value of CFBundleExecutable in the nested bundle $(PRODUCT_NAME) [com.CompanyName.ProjectName.pkg/Payload/ProjectName.app/Contents] property list file."


ERROR ITMS-90280: "The CFBundleExecutable of two bundles may not point to the same file. The following shared bundle path have been found: ProjectName.app/Contents."


工程里生成的app文件 对应路径:
/Users/用户名/Library/Developer/Xcode/DerivedData/工程名-dumfvwoomgbbhjffzxipgzhhjvbw/Build/Products/Debug






关于iOS端账号操作
个人账号 真机测试 》、《 开发者账号 真机测试
App上架











goyohol's essay

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容