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

5,487 阅读9分钟


首先需要为Mac App创建App ID

1.选择'App IDs'项 1.选择'App IDs'项

2.选择类型为'App' 2.选择类型为'App'

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

填写的信息 填写的信息

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

有了该App 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”项 选择“Mac Development”项

使用“CertificateSigningRequest.certSigningRequest”证书 使用“CertificateSigningRequest.certSigningRequest”证书

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

创建好“Mac Development”证书 创建好“Mac Development”证书

下载后的“Mac Development”证书:

下载后的“Mac Development”证书

  • 创建“Mac App Distribution”证书——App发布证书

选择“Mac App Distribution”项 选择“Mac App Distribution”项

使用“CertificateSigningRequest.certSigningRequest”证书 使用“CertificateSigningRequest.certSigningRequest”证书

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

创建好“Mac App Distribution”证书

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

下载后的“Mac App Distribution”证书

  • 创建“Mac Installer Distribution”证书——安装包发布证书

选择“Mac Installer Distribution”项 选择“Mac Installer Distribution”项

使用“CertificateSigningRequest.certSigningRequest”证书 使用“CertificateSigningRequest.certSigningRequest”证书

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

创建好“Mac Installer Distribution”证书 创建好“Mac Installer Distribution”证书

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

下载后的“Mac Installer Distribution”证书

  • 创建“Developer ID Installer”证书——开发者ID安装包证书

选择“Developer ID Installer”项 选择“Developer ID Installer”项

使用“CertificateSigningRequest.certSigningRequest”证书 使用“CertificateSigningRequest.certSigningRequest”证书

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

创建好“Developer ID Installer”证书 创建好“Developer ID Installer”证书

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

下载后的“Developer ID Installer”证书

  • 创建“Developer ID Application”证书——开发者ID应用证书

选择“Developer ID Application”项 选择“Developer ID Application”项

使用“CertificateSigningRequest.certSigningRequest”证书 使用“CertificateSigningRequest.certSigningRequest”证书

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

创建好“Developer ID Application”证书 创建好“Developer ID Application”证书

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

下载后的“Developer ID Application”证书

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

开发者账号上所有证书:

所有证书

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

双击要添加的证书:

要添加的证书 要添加的证书

弹出的提示 弹出的提示

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

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

钥匙串中的证书 钥匙串中的证书

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

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

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

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

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

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

导出后的p12文件:

“Developer ID Application”证书\“Developer ID Installer”证书 (P12文件) “Developer ID Application”证书\“Developer ID Installer”证书 (P12文件)

“Mac App Distribution”证书\“Mac Installer Distribution”证书 (P12文件) “Mac App Distribution”证书\“Mac Installer Distribution”证书 (P12文件)

“Mac Development”证书 (P12文件) “Mac Development”证书 (P12文件)

整理后所有P12文件

所有的P12文件 所有的P12文件


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

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

“关于本机”页面 “关于本机”页面

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

获取到Mac电脑的UUID 获取到Mac电脑的UUID

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

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

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

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

添加Mac电脑的UUID并注册完成 添加Mac电脑的UUID并注册完成

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


再继续创建描述文件:

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

选择“macOS App Development”项 选择“macOS App Development”项

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

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

Tips:勾选"Mac Catalyst"项时~

(勾选"Mac Catalyst"支持iPad) (勾选"Mac Catalyst"支持iPad)

选择对应的Mac Development证书

选择对应的Mac Development证书

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

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

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

给描述文件命名,并点击“Generate”

创建好“macOS App Development”描述文件 创建好“macOS App Development”描述文件

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

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

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

点击该文件弹出安装提示

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

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

  • 创建“Mac App Store”描述文件

选择“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”描述文件:

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

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

点击该文件弹出安装提示

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

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

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

“安装描述文件失败”提示 “安装描述文件失败”提示

  • 创建“Developer ID”描述文件

选择“Developer ID”项 选择“Developer ID”项

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

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

选择对应的Developer ID Application证书

选择对应的Developer ID Application证书

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

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

创建好“Developer ID”描述文件 创建好“Developer ID”描述文件

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

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

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

点击该文件弹出安装提示

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

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

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

该描述文件 安装成功 该描述文件 安装成功

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

所有描述文件


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

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

添加App ID(Bundle Identifier) 添加App ID(Bundle Identifier)

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

开发、发布的描述文件 开发、发布的描述文件

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

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


打包后导出及上架

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

已经打包好的IPA包

要对IPA包处理有如下4种

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

  • App Store Connect

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

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

选择"Upload" 选择"Upload"

点击"Next" 点击"Next"

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

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

再点击"Upload"进行上传~

ProjectName.pkg包的信息展示 ProjectName.pkg包的信息展示

ProjectName.pkg包 上传中 ProjectName.pkg包 上传中

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

上传‘App Store Connect’成功

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

该ProjectName.pkg包上传成功后的状态——Uploaded 该ProjectName.pkg包上传成功后的状态——Uploaded
就可以去开发者账号进行上架工作了~


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

选择"Export" 选择"Export"

点击"Next" 点击"Next"

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

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

再点击"Export"进行导出~

ProjectName.pkg包的信息展示 ProjectName.pkg包的信息展示

导出后的ProjectName.pkg包

导出的pkg包

ProjectName.pkg使用:

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

    安装ProjectName.pkg 安装ProjectName.pkg

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

    Transporter

  • Developer ID

选择"Developer ID"项 选择"Developer ID"项

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

选择"Upload"

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

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

再点击"Upload"进行上传~

ProjectName.zip包的信息展示 ProjectName.zip包的信息展示

ProjectName.zip包 上传中 ProjectName.zip包 上传中

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

提示等待公证的通知

收到公证的通知:

公证的通知 公证的通知

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


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

选择"Export"

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

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

再点击"Export"进行导出~

App包的信息展示 App包的信息展示

  • 1.已经成功公证,导出的App包

    提示已经成功公证 提示已经成功公证

    填写项目的名称 填写项目的名称

    公证后导出的Developer ID包:

    公证后导出的Developer ID包

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

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

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

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

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

  • Development

选择"Development"项 选择"Development"项

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

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

再点击"Export"导出App包~

App包的信息展示 App包的信息展示

导出的Development包:

导出的Development包

  • Copy App

选择"Copy App"项 选择"Copy App"项

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

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

导出后的App包:

导出后的App包

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

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

之后上架流程,基本与iOS应用都相同~

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






goyohol's essay




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

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

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 发布的最后 1kmsspai.com/post/40269

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

Code Signing Servicesdeveloper.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 ApplicationDeveloper ID Installer 证书

blog.csdn.net/lovechris00…

www.itread01.com/content/154…

"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




goyohol's essay