首先需要为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”证书
创建好“Mac Development”证书
下载后的“Mac Development”证书:
- 创建“Mac App Distribution”证书——App发布证书
选择“Mac App Distribution”项
使用“CertificateSigningRequest.certSigningRequest”证书
证书创建好:可点击“Download”下载!
下载后的“Mac App Distribution”证书:
- 创建“Mac Installer Distribution”证书——安装包发布证书
选择“Mac Installer Distribution”项
使用“CertificateSigningRequest.certSigningRequest”证书
证书创建好:可点击“Download”下载!
创建好“Mac Installer Distribution”证书
下载后的“Mac Installer Distribution”证书:
- 创建“Developer ID Installer”证书——开发者ID安装包证书
选择“Developer ID Installer”项
使用“CertificateSigningRequest.certSigningRequest”证书
证书创建好:可点击“Download”下载!
创建好“Developer ID Installer”证书
下载后的“Developer ID Installer”证书:
- 创建“Developer ID Application”证书——开发者ID应用证书
选择“Developer ID Application”项
使用“CertificateSigningRequest.certSigningRequest”证书
证书创建好:可点击“Download”下载!
创建好“Developer ID Application”证书
下载后的“Developer ID Application”证书:
至此,完成所有证书的创建和下载!
开发者账号上所有证书:
将证书都导入到“钥匙串”中:(步骤如下)
双击要添加的证书:
要添加的证书
弹出的提示
点击"添加",完成证书的导入!
钥匙串中的证书
Tips:导出证书的p12文件!(给其他电脑可进行开发工作) 步骤如下~
选择要处理的证书并展开其钥匙,鼠标右键选择**“导出”项**:
为p12文件命名和设置存储路径,再点击"存储"!
为p12文件命名和设置存储路径
需要为p12文件设置保护密码:
为p12文件设置保护密码
“Developer ID Application”证书\“Developer ID Installer”证书 (P12文件)
“Mac App Distribution”证书\“Mac Installer Distribution”证书 (P12文件)
“Mac Development”证书 (P12文件)
所有的P12文件
开始添加测试设备Mac(针对(开发证书)开发版本的):需在开发者账号填入测试设备Mac的UUID
获取Mac电脑的UUID: 点击屏幕上方菜单栏的,选择“关于本机”后再点击“系统报告”
“关于本机”页面
在“系统报告”页面查看系统信息-获取Mac电脑的UUID
获取到Mac电脑的UUID
再在开发者账号上添加Mac电脑的UUID——用作测试机:
添加好Mac电脑的UUID,点击“Register”注册
添加Mac电脑的UUID并注册完成
完成测试设备Mac电脑(UUID)的添加!
再继续创建描述文件:
- 创建“macOS App Development”描述文件
选择“macOS App Development”项
选择对应的App ID,再点击“Continue”
Tips:勾选"Mac Catalyst"项时~
(勾选"Mac Catalyst"支持iPad)
选择对应的Mac Development证书
选择测试设备(Mac电脑的UUID)
给描述文件命名,并点击“Generate”进行创建
创建好“macOS App Development”描述文件
下载后的“macOS App Development”描述文件:
点击该文件弹出安装提示:
再输入电脑账户密码进行安装:
- 创建“Mac App Store”描述文件
选择“Mac App Store”项
选择对应的App ID,再点击“Continue”
选择对应的Mac App Distribution证书
给描述文件命名,并点击“Generate”进行创建
创建好“Mac App Store”描述文件
下载后的“Mac App Store”描述文件:
点击该文件弹出安装提示:
再输入电脑账户密码进行安装:
会弹出“安装描述文件失败”提示:
“安装描述文件失败”提示
- 创建“Developer ID”描述文件
选择“Developer ID”项
选择对应的App ID,再点击“Continue”
选择对应的Developer ID Application证书
给描述文件命名,并点击“Generate”进行创建
创建好“Developer ID”描述文件
下载后的“Developer ID”描述文件:
点击该文件弹出安装提示:
再输入电脑账户密码进行安装:
成功安装上该描述文件:提示'已验证'
该描述文件 安装成功
开发者账号上所有描述文件:
完成了App ID、证书、描述文件的创建,以及测试设备的添加! 就可以配置工程了!
添加 App ID(Bundle Identifie)到工程的TARGET中:
添加App ID(Bundle Identifier)
开发、发布的描述文件
配置好 开发、发布的描述文件
现在就可以进行代码开发工作和版本打包了!
打包后导出及上架
先看一下下面已经打包好的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
再点击"Upload"进行上传~
ProjectName.pkg包的信息展示
ProjectName.pkg包 上传中
ProjectName.pkg上传‘App Store Connect’成功后:
在IPA包列表中,该ProjectName.pkg包上传成功后的状态——Uploaded
该ProjectName.pkg包上传成功后的状态——Uploaded
就可以去开发者账号进行上架工作了~
- 选择"Export",导出为ProjectName.pkg包
选择"Export"
点击"Next"
选择相应的描述文件——Mac_ProjectName_App_Store
再点击"Export"进行导出~
ProjectName.pkg包的信息展示
导出后的ProjectName.pkg包
ProjectName.pkg使用:
1.双击ProjectName.pkg,可进行安装
安装ProjectName.pkg
2.通过"Transporter"软件,上传至‘App Store Connect’(进行上架工作)
Developer ID
选择"Developer ID"项
- 选择"Upload",上传包以供苹果进行公证!
选择相应的描述文件——Mac_ProjectName_Develop_ID
再点击"Upload"进行上传~
ProjectName.zip包的信息展示
ProjectName.zip包 上传中
ProjectName.zip包上传成功后:提示等待公证的通知
收到公证的通知:
公证的通知
公证已经通过!可以兼容macOS Catalina以上的macOS系统!
- 选择"Export",直接导出为App~ (Developer ID包)
选择相应的描述文件——Mac_ProjectName_Develop_ID
再点击"Export"进行导出~
App包的信息展示
1.已经成功公证过后,导出的App包
提示已经成功公证
填写项目的名称
公证后导出的Developer ID包:
2.未成功公证,导出的App包
未成功公证,导出的Developer ID包:
关于 公证 \ macOS Catalina版本的支持
于2019年6月,苹果宣布在Mac App Store以外通过其他途径分发的所有 Mac 软件必须获得Apple的公证后才能默认在macOS Catalina上运行。
《对您的 Mac 软件进行公证以在 macOS Catalina 中运行》
要进行 Mac 软件的公证,需要满足的条件!
所以为了兼容更高版本的系统,最好将Developer ID包进行公证,再导出使用!
Development
选择"Development"项
选择相应的描述文件——Mac_ProjectName_Development
再点击"Export"导出App包~
App包的信息展示
导出的Development包:
Copy App
选择"Copy App"项
直接就可以选择存储路径和文件夹命名:
选择存储路径,文件夹命名
导出后的App包:
常用包的形式: "App Store Connect"(上架/pkg安装包) >> "Developer ID"(直接使用的App) >>> "Development"(针对Mac测试机) >>>>> "Copy App"
-
A.使用(公证过后的Developer ID包)'dmg'形式进行封装!
-
B.上传至App Store Connect后发布到App Store!
之后上架流程,基本与iOS应用都相同~
关于iOS端的账号上操作: 《个人账号 真机测试 》、《 开发者账号 真机测试》 《App上架》
熟悉证书相关配置和打包的流程、书写本文!花了很多时间,也在网上参考很多了资料~
相关资料和总结:(不想详细整理了,不过可参考性是依次下降哈~)
Mac开发参考:
macOS开发 — Xamarin.Mac
证书和标识符:docs.microsoft.com/zh-cn/xamar…
应用的预配配置文件:docs.microsoft.com/zh-cn/xamar…
Mac App Store 捆绑:docs.microsoft.com/zh-cn/xamar…
Mac App 发布的最后 1km:sspai.com/post/40269
Code Signing Services: developer.apple.com/documentati…
Developer ID
Distribute outside the Mac App Store (macOS):help.apple.com/xcode/mac/c…
Developer ID:developer.apple.com/support/dev…
使用“Developer ID”打包
Unable to revoke Mac Certificates stackoverflow.com/questions/2…
macOS 开发 -删除
Developer ID Application
和Developer ID Installer
证书
"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.:blog.csdn.net/lovechris00…
要么使用“Network Extensions”,必须使用‘App Store’类型的证书及描述文件;
使用‘Developer ID’类型的证书及描述文件,仅打包可关闭“Network Extensions”的使用!
打的“MAC App Store”包,直接上传到App Store,能安装但是本地是不能使用的! MAC APP 意外退出 EXC_CRASH (Code Signature Invalid):>www.cocoachina.com/bbs/read.ph…
EXC_CRASH (Code Signature Invalid)
参考 mihail.stoynov.com/2013/04/22/…
参考 Parental Controls after OS X 10.8.2: EXC_CRASH and changes to https handling:tech.kateva.org/2013/05/par…
参考 OS X 10.9 Instant Crash [Fixed in update]:telltale.com/community/d…
无用 Mac OS X app crash with Code Signature Invalid error
无用 OSX Code Signature Invalid Exception when launched from Service on
参考,未尝试 Code Signature Invalid:blog.csdn.net/yuanya/arti…
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)'
stackoverflow.com/questions/4… stackoverflow.com/questions/3…
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