苹果开发知识储备
Certificates
Certificates 证书,是用来给应用程序签名(code sign),证明应用程序的合法性和完整性。对于想要安装到真机调试或者发布到应用商店的应用程序,只有经过签名,才能保证其来源可靠,并且代码完整,未经篡改的。
在Xcode Build Setting 的 Code Signing Identity 中,你可以设置用于为代码签名的证书。
- 申请一个 Certificate 之前,需要先申请一个 Certificate Signing Request (CSR) 文件,而这个过程中实际上是生成了一对公钥和私钥,保存在你 Mac 的 Keychain 中。代码签名正是使用这种基于非对称秘钥的加密方式,用私钥进行签名,用公钥进行验证。
- 如下图所示,在你 Mac 的 keychain 的 login 中存储着相关的公钥和私钥,而证书中包含了公钥。用私钥来进行签名,苹果就可以用证书中的公钥来进行验证,确保是你对代码进行了签名,而不是别人冒充你,同时也确保代码的完整性等。
- 当你想与其他人或其他设备共享证书时,导出证书(.p12类型),把私钥传给它就可以了。
证书主要分为两类:Development 和 Production,Development 证书用来开发和调试应用程序,Production 主要用来分发应用程序。
Identifiers
App ID 用于标识一个或者一组 App,App ID 应该是和 Xcode 中的 Bundle ID 是一致的或者匹配的。App ID主要有以下两种:
- An Explicit App ID Matches a Single App:唯一的App ID,这种App ID用于唯一标识一个应用程序,例如
com.ABC.demo1
,标识 Bundle ID 为com.ABC.demo1
的程序。 - Wildcard App IDs Match Multiple Apps:通配符App ID,用于标识一组应用程序。例如
*
可以表示所有应用程序,而com.ABC.*
可以表示以com.ABC
开头的所有应用程序。
Devices
Device 是指运行 iOS 系统用于开发调试 App 的设备。每台 Apple 设备使用 UDID 来唯一标识。设备的 UDID 可通过 iTunes->Summary
或者 Xcode->Window->Devices
获取。
Provisioning Profiles
一个 Provisioning Profile 文件包含了上述的所有内容:证书、App ID、设备。
在打包应用程序或者在真机上运行调试一个应用程序的过程:
- 使用 Certificates 证书来进行签名,用于标识该应用程序合法性和完整性
- 指明该应用程序的 App ID,并且验证与 Bundle ID 是否一致
- 到真机中运行调试该应用程序,确认该设备是否能够用来运行
Provisioning Profile 把这些信息全部打包在一起,在打包时嵌入 .ipa
的包里。如上所述,在一台设备上运行应用程序的过程如下:
与 Certificates 证书一样,Provisioning Profile 也分为 Development 和 Distribution 两种:
- Development
- Distribution: In House、Ad Hoc、App Store
注:使用 Development Provisioning Profiles 打包的应用程序在设备中运行,要求该设备 UDID 必须绑定添加到该 Provisioning Profiles 中,否则无法在该设备中运行。解决方法是:绑定添加该设备 UDID,更新 Provisioning Profiles,重新打包。
Xcode 调试
Xcode 模拟器调试
|
|
在 /platforms/ios
目录下双击打开 .xcworkspace
文件,Xcode 中选择对应的模拟器即可运行。
Xcode 真机调试
Xcode 真机调试需要申请 Certificates 证书,然后添加调试设备 UDID,生成 Provisioning Profiles(Development 类型),下载到电脑中,双击安装。
苹果设备连接电脑,Xcode -> Build Settings 设置 Code Signing Identity 和 Provisioning Profiles,设置完成后,选择该设备运行即可。
应用打包
cordova iOS 应用打包 参考文档
使用 Development 和 Distribution 的 Certificates 和 Provisioning Profiles 对应用程序进行打包的区别是:Development 打出来的包可以进行应用调试,譬如我们可以通过 Safari 对网页进行调试。
cordova 提供了一套打包解决方案,在项目根目录添加 build.json
文件,配置文件中需要指定的参数包括:
Parameter | Flag | Description |
---|---|---|
Code Sign Identity | –codeSignIdentity | Code signing identity to use for signing. |
Provisioning Profile | –provisioningProfile | GUID of the provisioning profile to be used for signing. It is copied here on your Mac: ~/Library/MobileDevice/Provisioning\ Profiles/ . |
Code Sign Resource Rules | –codesignResourceRules (Optional) | Used to control which files in a bundle should be sealed by a code signature. For more details, read The OS X Code Signing In Depth article. |
Development Team | –developmentTeam | This is new for Xcode 8. The development team (Team ID) to use for code signing. You would use this setting and a simplified Code Sign Identity (i.e. just ‘iPhone Developer’) to sign your apps, you do not need to provide a Provisioning Profile. |
Packaging Type | –packageType | This will determine what type of build is generated by Xcode. Valid options are development (the default), enterprise, ad-hoc, and app-store. |
解释一下需要用到的四个参数:
- Code Sign Identity:应用程序签名时使用的证书标识。如下图
- Provisioning Profile:Provisioning Profile 的 GUID。进入
~/Library/MobileDevice/Provisioning\ Profiles/
目录,即可获取到对应 Provisioning Profile 的 GUID - Development Team:开发团队 ID
- Packaging Type:打包类型,包括:development、enterprise, ad-hoc, 和 app-store
build.json
配置如下:
❗️注意:
- 签名证书 Identity 一定要和 Provisioning Profiles GUID 对应上,否则打包不成功
- 打包类型 enterprise 即为使用 in house 类型的 Distribution Provisioning Profiles
Development
|
|
- 打 Development 必须使用 Development 类型的 Certificates 和 Provisioning Profiles。
- 配置文件中,在
debug
属性配置参数;打包命令指定--debug
。
Distribution
|
|
- 打 Distribution 必须使用 Distribution 类型的 Certificates 和 Provisioning Profiles。
- 配置文件中,在
release
属性配置参数;打包命令指定--release
。 - 由于 Distribution 类型包括:In House、Ad Hoc、App Store 三种,对应在配置文件中的
packageType
分别为:enterprise
,ad-hoc
, 和app-store
最终打包成功后,我们在 platforms/ios/build/device
目录下找到 .ipa
文件
参考链接
Signing an App
关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系