再谈IOS开发环境配置(2023-09-01 新)

        关于IOS的开发,需要配置证书、密钥、管理标识符、功能配置等等,很是繁杂,以前也配置过,这次因为重新购买了新的M1笔记本,准备重新配置下,顺便记录,以便查询。

        如果要开发IOS,首先需要在苹果开发者官网申请注册账户,付费后才可以,每年大概688元,关于注册账户等,不在本文讨论范围。

        官方帮助文档

一、证书类型

类型

用途

Apple 开发

用于 Xcode 11 及更高版本。

在设备上运行 iOS、macOS、Apple tvOS 或 watchOS App,并在开发过程中使用特定的 App 服务。

Apple 分发

用于 Xcode 11 及更高版本。

向指定设备分发你的 iOS、macOS、Apple tvOS 或 watchOS App 以进行测试或将其提交到 App Store。

APNs 授权密钥

生成服务器端令牌来代替通知请求的证书。

Apple 推送服务

在你的通知服务与 APNs 之间建立连接,以向你的 App 发送远程通知。

iOS 开发

在设备上运行 iOS、Apple tvOS 或 watchOS App,并在开发过程中使用特定的 App 服务。

iOS 分发

向指定设备分发你的 iOS、Apple tvOS 或 watchOS App 以进行测试或将其提交到 App Store。

Mac 开发

在开发和测试期间为 Mac App 启用特定的 App 服务。

Mac App 分发

在将 Mac App 提交到 Mac App Store 之前对其进行签名。

Mac 安装器分发

对包含你已签名 App 的 Mac 安装器软件包进行签名,并提交到 Mac App Store。

Developer ID App

在 Mac App Store 以外分发 Mac App 前,对其进行签名。

Developer ID 安装器

对包含你已签名 App 的 Mac 安装器软件包进行签名并在 Mac App Store 之外分发。

Apple Pay

解密 Apple 向商家/开发者发送的 App 交易数据。

商家身份

向 Apple Pay 服务器验证你的身份。

Pass Type ID

对“钱包”内的凭证进行签名和发送凭证更新。

Swift 签名

用于 Swift Package Manager 版本 5.9 或更高版本。

对 Swift 软件包和软件包集合进行签名,以便分发。

VoIP 服务

在你的通知服务器与 APNs 之间建立连接,以向后台 VoIP App 通知有传入活动。

WatchKit 服务

在你的通知服务器与 APNs 之间建立连接,以更新 ClockKit 的复杂功能数据。

网站推送 ID

对网站更新进行签名和发送网站更新。

登录到账户后看到的创建新证书界面:

二、创建证书

        在 App 开发期间,对应不同的环境,你将创建不同的证书类型。iOS、Apple tvOS 和 watchOS App 使用同一套证书,而 macOS App 使用另一套证书。如果你使用的是 Xcode 11 或更高版本,则可以为所有平台创建统一的开发和分发证书。有了开发证书,你就可以在设备上运行你的 App 以及使用 App 功能;而有了分发证书,就可以分发你的 App 进行测试,并将 App 上传到 App Store Connect。

        开发证书属于个人。你总共可以创建两个 iOS 开发证书和两个 Mac 开发证书。在你的开发者账户中,电脑名称会追加到开发证书名称后面 (例如,Gita Kumar (Work Mac),其中 Work Mac 是电脑名称),便于你识别证书。

        分发证书属于团队,每个团队只能有一种类型的分发证书 (Developer ID 证书除外)。只有账户持有人或管理角色可以创建分发证书 (如果你以个人身份注册,你即为账户持有人)。

        可以使用 Xcode 或开发者账户创建和撤销证书。

在正式创建证书前,首先需要创建证书签名请求()certSigningRequest创建证书签名请求()。

1. 创建证书签名请求(本地电脑上): .certSigningRequest 文件

打开应用程序中的钥匙串

  1. 选取“钥匙串访问”>“证书助理”>“从证书颁发机构请求证书”。

  2. 在“证书助理”对话框中,在“用户电子邮件地址”栏位中输入电子邮件地址。

  3. 在“常用名称”栏位中,输入密钥的名称 (例如,Gita Kumar Dev Key)。

  4. 将“CA 电子邮件地址”栏位留空。

  5. 选取“存储到磁盘”,然后点按“继续”。

注意:

        用户电子邮件地址:就是注册苹果账户时的邮件地址。

Key文件存储在桌面,文件名称为:CertificateSigningRequest.certSigningRequest

2. 创建证书(在苹果开发者网站上操作)

选择Apple Development:

继续后,选择上一步生成的CertificateSigningRequest.certSigningRequest 文件(桌面上)。

依次可以创建开发和生产的证书,结果如下:

三、创建标识符(Identifiers)

App ID

App ID 是由两部分构成的字符串,在预置描述文件中用于标识来自某一开发团队的一个或多个 App。App ID 有两种类型:一种是精确 App ID (用于单个 App);另一种是通配符 App ID (用于一组 App)。

精确 App ID 包含套装 ID 的完整路径。通配符 App ID 包含一个星号,以作为相应套装 ID 搜索字符串的最后一个部分。注:需要指定精确 App ID,才能将你的 App 提交至 App Store 并使用特定服务。

        App ID 可识别预置描述文件中的 App。它是一个由两部分组成的字符串,用于标识来自某一开发团队的一个或多个 App。App ID 共有两类:适用于单个 App 的精确 App ID,以及适用于一组 App 的通配符 App ID。在一个 App ID 中启用的 App 功能将作为一个允许列表,为一个或多个 App 提供可用功能。你可以在创建 App ID 时启用 App 功能,也可以稍后修改这些设置。精确 App ID 将默认启用“App 内购买项目”功能。自 Xcode 11.4 起,可以使用同一 App ID 来构建 iOS、macOS、Apple tvOS 和 watchOS App。

1. 创建新的Identifiers

选择 APP IDs

选择App

完成后:

四、描述文件(Profiles)

        Profiles用于将 Certificates、Identifiers、Devices结合起来,形成一个描述证书、标识符的描述统一文件。

1. 创建一个开发描述文件

继续后:

选择上一步创建的标识符继续

选择前面创建好的证书继续

选择好需要连接的手机,继续

输入描述文件名称,然后生成

2. 创建一个生产(上架)描述文件

继续,操作方法和生成开发描述文件一致!

五、本地安装证书文件

将第一步创建证书中创建的证书文件下载到本地。将证书下载到 Mac,然后双击 .cer 文件安装到钥匙串访问中。确保将私钥和公钥的备份副本保存在安全的地方。

下载下来的文件按为:development.cer,双击 .cer 文件安装到钥匙串访问中。

安装时出现这样的错误 -25294:

经过查询资料发现需要安装Apple全球开发者关系认证中间证书WWDRCA*.cer。

Apple证书列表:Apple PKI - Apple

红色部分为我们需要的证书:

我们可以下载G3,有效期到2030-02-20。下载下来后点击安装。安装完成后在继续安装distribution.cer 和 development.cer 证书,最后安装成功

注意:

经过测试,下载G6时不可以的,G3是可以的,不知道为什么,这里注意下。

六、Xcode配置

1.  创建账号:

打开XCode(我的版本: 14.3.1),选择settings

然后选择增加账号:

2. 管理证书(Manage Certificates)

        选择admin 然后按下 Manage Certificates,可以管理(查看)证书,证书如果已经在苹果后台账号设置好,这里就会自动显示出来。

        

特别注意:

        如果后台已经设置好证书,而且上面已经显示有了,就不要在按做下脚的 + ,否则就会重复安装同一个证书,这样就会导致app签名失败。

        万一出现了上述情况,解决办法是:

1. 在苹果账号后台删除重复的证书;

2. 在本地钥匙串中删除重复的证书;

3. 重新打开xcode查看就正常了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/63508.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Midjourney学习(一)prompt的基础

prompt目录 sd和mj的比较prompt组成风格表现风格时代描述表情色彩情绪环境 sd和mj的比较 自从去年9月份开始,sd就变得非常或火,跟它一起的还有一个midjourney。 他们就像是程序界的两种模式,sd是开源的,有更多的可能性更可控。但是…

c#多线程—基础概念到“双色球”项目实现(附知识点目录、代码、视频)

总结:视频中对于多线程讲的非常透彻,从线程基础概念—>.net不同版本出现的线程方法—>多线程常出现问题—>双色球项目实践,每个知识点都有代码实操,受益匪浅。附上学习笔记和实操代码。 视频 目录 一、线程、进程概念及优…

华为数通方向HCIP-DataCom H12-821题库(拖拽题,知识点总结)

以下是我在现有题库中整理的需要重点关注的考点内容,如有遗漏小伙伴可以留言补充。

[国产MCU]-W801开发实例-通用硬件加密解密

通用硬件加密解密 文章目录 通用硬件加密解密1、W801通用加密模块介绍2、硬件加密解密使用示例2.1 硬件随机数生成2.2 RC4硬件加密解密2.3 AES硬件加密与解密2.4 DES硬件加密与解密2.5 DES3硬件加密与解密2.6 硬件CRC计算2.7 硬件MD5计算2.8 硬件SHA1加密与解密1、W801通用加密…

Linux内核源码分析 (5)多处理器调度

Linux内核源码分析 (5)多处理器调度 文章目录 Linux内核源码分析 (5)多处理器调度注:本章节使用的内核版本为Linux 5.6.18一、 SMT和NUMA1、SMP (对称多处理器结构)2、NUMA (非一致内存访问结构) 二、多核调度三、调度域和调度组四、SMP调度详…

数据结构基本概念

一、数据 数据对象-数据元素-数据项(属性),前者由后者组成 二、数据结构 定义:按某种关系的数据元素的集合 三、数据类型 1、原子类型(例如整型) 2、结构类型(由原子类型组成,例如数组) 3、…

01背包(换汤不换药)

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 有一个箱子容量为V(正整数,0 ≤ V ≤ 20000),同时有n个物品(0<n ≤ 30),每个物品有一个体积&#xf…

ReID网络:MGN网络(4) - Loss计算

1. MGN Loss MGN采用三元损失(Triplet Loss)。 三元损失主要用于ReID算法,目的是帮助网络学习到一个好的Embedding信息。之所以称之为三元损失,主要原因在于在训练中,参与计算Loss的分别有Anchor、Positive和Negative三方。 2. Triplet Lo…

力扣:82. 删除排序链表中的重复元素 II(Python3)

题目: 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。 来源:力扣(LeetCode) 链接:力扣(LeetCode)官网 - …

ChatGPT插件的优缺点

虽然西弗吉尼亚大学的研究人员看到了最新的官方ChatGPT插件——名为“代码解释器”( Code Interpreter)的教育应用潜力,但他们也发现,对于使用计算方法处理针对癌症和遗传疾病的定向治疗的生物数据的科学家来说,这款插…

ABTest文章合辑

ABTest&统计学 如何理解α、β一类错误和二类错误?_紫昂张的博客-CSDN博客 如何理解P值?_紫昂张的博客-CSDN博客 如何理解原假设和备择假设?_紫昂张的博客-CSDN博客 ABTest基础概念 AB测试可以用来测什么?不能测什么&…

[C/C++]指针详讲-让你不在害怕指针

个人主页:北海 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏✨收录专栏:C/C🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!&#x1f9…

.net基础概念

1. .NET Framework .NET Framework开发平台包含公共语言运行库(CLR)和基类库(BCL),前者负载管理代码的执行,后者提供了丰富的类库来构建应用程序。.NET Framework仅支持Windows平台 2. Mono 由于.NET Framework支支持windows环境,因此社区…

python中is和==的区别

is 和 的区别 在Python中,is和是两个用于比较对象的操作符,它们有不同的作用和用法。 is操作符: is用于比较两个对象的身份标识,即判断两个对象是否引用同一个内存地址的对象。当is操作符用于比较两个对象时,它会判断…

Java for循环每次都通过list.size()和 string.length()获取大小性能

有人说在for循环之前用一个局部变量先获取到list.size()、str.length(),然后在for循环的判断条件里通过这个局部变量替换list.size()、str.length()会节省数据计算的时间。事实真的是这样吗?下面就为大家解答这个问题。 说明:此文章针对Andro…

Spark Optimizer 规则详解和示例

Optimizer 是在 Analyzer 生成 Resolved Logical Plan 后,进行优化的阶段。 1. Batch Finish Analysis 有5条优化规则,这些规则都执行一次 1.1 EliminateSubqueryAliases 消除查询别名,对应逻辑算子树中的 SubqueryAlias 节点。一般来讲&…

华为云云服务器评测|基于华为云云耀云服务器L实例开展性能评测,例如 MySQL、Clickhouse、Elasticsearch等等

在当今云计算时代,越来越多的企业和个人开始选择将应用部署在云服务器上,以便更好地满足高性能、可靠性和可扩展性等需求。而华为云云耀云服务器L实例不仅提供了高性能和可靠性的计算和存储资源,而且具有灵活和高效的成本控制,深受…

QT/C++获取电脑系统,主板型号,CPU型号,硬盘型号,内存大小等相关信息(二)通过Windows Server (WMI)查询

Qt/C++调用windows Api库通过wmi的方式查询电脑能获取更多详细信息,也更加合理有技术性。 建议使用MSCV编译器,如MSCV 2017 ,Qt版本 : 5.13.1 目录导读 关于 WMI示例:创建 WMI 应用程序示例:打印Wmi执行的查询项的所有属性头文件引用项:输出类型转换执行查询通过Windows P…

DDR2 IP核调试记录1

一、IP核生成不成功可能原因 1、打开 Quartus II 软件时,请右键选择以管理员方式运行,切记,否则可能导致 IP 生成不成功。 2、创建工程时不要将工程创建在和 Quartus II 安装目录相同的盘符下,否则可能导致生产 IP 失败。 3、如果…

Android Glide使用姿势与原理分析

作者: 午后一小憩 简介 Android Glide是一款强大的图片加载库,提供了丰富的功能和灵活的使用方式。本文将深入分析Glide的工作原理,并介绍一些使用姿势,助你更好地运用这个优秀的库。 原理分析 Glide的原理复杂而高效。它首先基…