理解 iOS 应用程序的代码签名机制

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 本文讲的是理解 iOS 应用程序的代码签名机制,如果你是一位 iOS 应用程序开发者,你有可能已经使用过代码签名了。如果你是一位初级的 iOS 应用程序开发者,你可能对开发者网站上那些有关 "Certificates,Identifiers & Profiles" 的部分感到不知所措。
本文讲的是理解 iOS 应用程序的代码签名机制,

如果你是一位 iOS 应用程序开发者,你有可能已经使用过代码签名了。如果你是一位初级的 iOS 应用程序开发者,你可能对开发者网站上那些有关 "Certificates,Identifiers & Profiles" 的部分感到不知所措。

本文的目的是帮助初级 iOS 应用程序开发者从宏观角度理解代码签名是什么。这不是一个如何按部就班地对你的应用程序进行代码签名的操作手册。理想化来说,在你阅读完这篇文章后,你能够对应用程序进行代码签名而不需要按照任何操作手册。

我不准备对底层细节进行讨论,但是我们将讨论一些非对称加密技术的内容。

非对称加密技术

你至少要知道的是,非对称加密技术使用一个公钥和一个私钥。用户需要保留自己的私钥,但是他们能把公钥分享出去。并且使用这些公钥和私钥,用户就能证明那确实就是他自己。

这里 有一篇浅显易懂地解释什么是非对称加密技术的文章。如果你想知道实现这个技术的细节或者背后用到了哪些数学算法原理,在网络上有很多这样的文章。

App ID

App ID 是你应用程序的唯一识别符。它由苹果为你创建的 team id (团队 id)(你无法插手) 和你应用程序的 bundle id (程序包 id) (比如,com.youcompany.yourapp)组成。

也有通配符形式的 App IDcom.yourcompany.*。它们会匹配多个 bundle id

总而言之,你的应用程序会有一个明确的 App ID,而不是一个通配符形式的。

Certificates / 证书

你可能已经注意到,为了在苹果开发者网站上创建一个证书 / certificate,你需要上传一个签名证书申请 (Certificate Signing Request)。你能通过 Keychain 创建这个 CSR 文件,并且这个 CSR 文件包含一个私钥。

之后在开发者网站上,你能使用这个 CSR 文件创建一个证书 (certificate)。

证书 (certificates) 的类型有很多种。最常见的是:

  • 应用程序开发证书 (iOS 应用程序开发) - 你需要使用这些证书才能让 XCode 中的应用程序运行在设备上。
  • 应用程序分发证书 (苹果应用市场和内部分发渠道) - 你需要使用这些证书,它能让你把应用程序提交到苹果应用市场或者内部分发渠道。
  • APNS (Apple Push Notification Service / 苹果推送通知服务系统) - 你需要使用这些证书,它能让你推送内容到你的应用程序中。与应用程序的开发证书和分发证书不同,APNS 与 APP ID 有关。APNS 有两种证书,对于开发环境来说 - Apple Push Notification Service / 苹果推送通知服务 SSL (适用于沙盒环境),对生产环境来说 - Apple Push Notification Service / 苹果推送通知服务 SSL (适用于沙盒和生产环境)。如果你想让推送服务在调试和分发程序上都能使用,你需要创建这两个证书。

Devices / 设备

在你账户每年的会员期内,你能为每个产品添加最多 100 个设备。100 个 iPhone, 100 个 iPad, 100 个 iPod Touch, 100 个 Apple Watche 和 100 个 Apple TV。为了把设备添加到你的账户下,你需要添加该设备的唯一识别码。你能在 Xcode 中方便地找到它,或在 iTunes 中(可能会稍微麻烦点儿)。这里 有一份详细的指导手册教你如何添加设备到你的账户下。

Provisioning profiles / 配置文件

配置文件将 App ID,开发者或者内部分发证书和一些设备联系起来。你在苹果开发者网站上创建这些配置文件,然后在Xcode 内下载它们。

使用方法

在你创建了这些以后,回到 Xcode 页面,添加你的证书,更新你的配置文件,之后选择你想要的那个配置文件。从这些配置文件中,你能选择需要的签名身份(这取决于联系到它的证书)。

常见问题解答

多年来在 iOS 开发的过程中,我问过也被很多人问过有关代码签名的问题。比如下面的这些。

  • 问题: 我已经从开发者网站上下载了配置文件和证书,但是我还是不能对应用程序签名。
    解答: 是的,因为你没有私钥,就是那个在证书签名申请中使用的那个。可能是之前其他团队的成员创建了这些证书和配置文件。你能从原来的开发者那里获得这些私钥,重新激活这个证书并且创建一个新的 (和这个证书有联系的所有配置文件都会失效,但是不会对任何应用市场上使用这些证书的应用程序造成问题) 或者如果可能的话,创建一个全新的证书。(目前,每一个开发者账户最多申请 3 个应用程序分发证书。)

  • 问题: 那有关推送服务的证书呢?我想让应用程序能接收推送通知。难道我不应该使用 APNS 证书创建一个配置文件么?
    解答: 不是这样的。当你创建一个 APNS (Apple Push Notification Service / 苹果推送通知服务) 证书的时候,你把 APP ID联系到这个证书上。所以,首先要有 CSR 文件,之后通过这个 CSR 文件创建一个新的 APNS,下载后在 Keychain 中打开它,并以 .p12 文件格式导出,之后把这个文件上传到你的推送服务提供商处。这个 .p12 文件知道它是和那个应用程序联系的,并且它会只推送内容到这个应用程序。这也是为什么你不能把一个 APNS 证书联系到通配符形式的 APP ID(com.youcompany.*)。推送通知的服务器需要知道,它需要推送内容到哪个应用程序。

  • 问题: 我买了一个新的 mac 计算机,为了代码签名能正常工作,我应该从旧的 mac 计算机上 keychain 中导出什么到新的 mac 计算机中?
    解答: 你可能想把所有 keychain 中的内容导出到新的 mac 计算机中。你可以通过 这些步骤 完成。但是如果你想导出一个证书,确保你也能导出这个私钥。在 Keychain 中,你应该可以通过点击证书旁边的三角选项展开它的内容,之后你就会看到这个私钥。这些证书都能以 .p12 文件格式导出。否则,他们会以 .cer 格式导出,没有私钥,这个文件是没用的。

  • 问题: 我的 iOS 应用程序分发证书过期了,我的应用程序还能继续工作么?
    解答: 当你的证书过期了,使用这个证书的配置文件就会失效了。在应用程序市场(App Store)上,只要你的开发者账号还有效,这个应用程序还是能正常使用的。但是通过这个证书在内部渠道分发的应用程序就不能继续使用了。

  • 问题: 我的 APNS 证书过期了,现在会发生什么?
    解答: 你不能再发送推送通知给应用程序。通过创建一个与 App ID 联系的 新的 APNS 证书,下载并导出这个 .p12 文件,之后把它上上传给你的推送通知服务提供商。并且不需要为此而更新应用程序。

总结

我想再次强调有关代码签名的是:

  • 每一个应用程序都有一个 App ID
  • 对所有使用中的证书,你都必须存有相关的私钥
  • 一个调试版本的配置文件把 APP ID,调试设备和应用程序开发证书联系在一起。
  • 一个内部分发渠道的配置文件把 App ID,调试设备和应用程序分发证书联系在一起。
  • 一个应用程序市场 (App Store)的配置文件把 App ID 和你的应用程序分发证书联系在一起。
  • 对于推送通知,创建一个 APNS 证书,它和 App ID 联系在一起,下载并以 .p12 文件格式导出,并上传这个文件到推送通知服务供应商处;如果你想要这个推送通知在调试和生产环境下都起作用,你不得不分别为开发调试和生产环境创建 2 个 APNS 证书。

通晓这些能帮助你更好的理解代码签名机制,并且最终省去了很多时间。





原文发布时间为:2016年11月17日

本文来自云栖社区合作伙伴掘金,了解相关信息可以关注掘金网站。
目录
相关文章
|
1月前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
161 4
|
1月前
|
存储 安全 Android开发
探索Android与iOS的隐私保护机制
在数字化时代,移动设备已成为我们生活的一部分,而隐私安全是用户最为关注的问题之一。本文将深入探讨Android和iOS两大主流操作系统在隐私保护方面的策略和实现方式,分析它们各自的优势和不足,以及如何更好地保护用户的隐私。
|
2月前
|
设计模式 安全 Swift
探索iOS开发:打造你的第一个天气应用
【9月更文挑战第36天】在这篇文章中,我们将一起踏上iOS开发的旅程,从零开始构建一个简单的天气应用。文章将通过通俗易懂的语言,引导你理解iOS开发的基本概念,掌握Swift语言的核心语法,并逐步实现一个具有实际功能的天气应用。我们将遵循“学中做,做中学”的原则,让理论知识和实践操作紧密结合,确保学习过程既高效又有趣。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你打开一扇通往iOS开发世界的大门。
|
2月前
|
搜索推荐 IDE API
打造个性化天气应用:iOS开发之旅
【9月更文挑战第35天】在这篇文章中,我们将一起踏上iOS开发的旅程,通过创建一个个性化的天气应用来探索Swift编程语言的魅力和iOS平台的强大功能。无论你是编程新手还是希望扩展你的技能集,这个项目都将为你提供实战经验,帮助你理解从构思到实现一个应用的全过程。让我们开始吧,构建你自己的天气应用,探索更多可能!
77 1
|
1月前
|
Linux Android开发 iOS开发
深入探索Android与iOS的多任务处理机制
在移动操作系统领域,Android和iOS各有千秋,尤其在多任务处理上展现出不同的设计理念和技术实现。本文将深入剖析两大平台在后台管理、资源分配及用户体验方面的策略差异,揭示它们如何平衡性能与电池寿命,为用户带来流畅而高效的操作体验。通过对比分析,我们不仅能够更好地理解各自系统的工作机制,还能为开发者优化应用提供参考。
|
1月前
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
33 2
|
1月前
|
存储 安全 算法
深入探索iOS系统安全机制:保护用户隐私的前沿技术
本文旨在探讨苹果公司在其广受欢迎的iOS操作系统中实施的先进安全措施,这些措施如何共同作用以保护用户的隐私和数据安全。我们将深入了解iOS的安全架构,包括其硬件和软件层面的创新,以及苹果如何通过持续的软件更新来应对新兴的安全威胁。此外,我们还将讨论iOS系统中的一些关键安全功能,如Face ID、加密技术和沙箱环境,以及它们如何帮助防止未经授权的访问和数据泄露。
|
1月前
|
JSON 前端开发 API
探索iOS开发之旅:打造你的第一个天气应用
【10月更文挑战第36天】在这篇文章中,我们将踏上一段激动人心的旅程,一起构建属于我们自己的iOS天气应用。通过这个实战项目,你将学习到如何从零开始搭建一个iOS应用,掌握基本的用户界面设计、网络请求处理以及数据解析等核心技能。无论你是编程新手还是希望扩展你的iOS开发技能,这个项目都将为你提供宝贵的实践经验。准备好了吗?让我们开始吧!
|
1月前
|
安全 数据安全/隐私保护 Android开发
深入探索iOS系统安全机制:从基础到高级
本文旨在全面解析iOS操作系统的安全特性,从基础的权限管理到高级的加密技术,揭示苹果如何构建一个既开放又安全的移动平台。我们将通过实例和分析,探讨iOS系统如何保护用户数据免受恶意软件、网络攻击的威胁,并对比Android系统在安全性方面的差异。
|
1月前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户点击按钮时,按钮将从圆形变为椭圆形,颜色从蓝色渐变到绿色;释放按钮时,动画以相反方式恢复。通过UIView的动画方法和弹簧动画效果,实现平滑自然的过渡。
59 1