译者:Jestery
发表时间:2010-04-24浏览量:21082评论数:0挑错数:0
了解并解决代码签名问题 (为保持跟开发环境以及APPLE开发者社区网站结构对应,一些名词未作翻译)   绝大多数iPhone Developer/Distribution 的代码签名生成错误是因为证书和Provisioning profiles没有在开发系统上正确安装引起的。 ..

了解并解决代码签名问题

(为保持跟开发环境以及APPLE开发者社区网站结构对应,一些名词未作翻译)

 
 绝大多数iPhone Developer/Distribution 的代码签名生成错误是因为证书和Provisioning
profiles没有在开发系统上正确安装引起的。本文描述在开发 iPhone OS
应用程序时所需要的文件以及如何安装它们。这个技术说明为“Program User Guide”提供支持,Program User Guide
可以在 Portal Resources 下的 iPhone Developer Program Provisioning Portal 找到。如果你对 iPhone 开发刚入门,请先阅读 Program User Guide.

需要什么

  所有 iPhone 应用程序在iPhone OS设备上运行之前必须用合法的 signing identity 进行签名。

为了在自己的iPhone OS设备开发而做应用程序签名,需要:

私钥

iPhone 开发者证书

Development Provisioning profile

上 App Store 需要:

私钥

iPhone Distribution 证书

App Store Distribution Provisioning profile

要用在 Ad Hoc 上需要:

私钥

iPhone Distribution 证书

Ad Hoc Distribution Provisioning profile

  私钥是在生成认证签名请求(CSR)时创建的,在CSR提交和通过之后,可以在 iPhone Developer Program Provisioning Portal 里创建和下载证书以及provisioning profiles。

  注意:为
了更好的区分不同的provisioning profile,在创建的时候注意命名,例如 "wild card dev profile",
"MyApp Push distribution profile", “Ad Hoc Testers profile” 等等。

这些东西的作用

  Signing identity 由私有加密key和数字证书组成。在iPhone OS开发中,Xcode 用私钥来签署程序,这样程序就可以在iPhone OS开发设备上运行或者提交到app store。

  公钥包含 iPhone开发者/发布商证书,用来认证已签名的程序。

  Provisioning pfofiles 用来告知Xcode用哪个证书/私钥组合来签署程序。开发设备也通过它来决定如何认证安装在设备上的程序。

证书 - 安装/校验

  下载 iPhone Development 证书或者 iPhone Distribution 证书之后,双击下载的 .cer 文件启动 Keychain Access并安装证书。如果询问将证书安装到哪,请选择 "login" keychain。

 
 要确定证书是否正确安装,选择 "login" keychain 并且选择 "My Certificates"
类别。如果想要部署到你的开发设备,选择以"iPhone Developer
Certificate"为标题开头的证书。如果要发布程序,选择以"iPhone Distribution
Certificate"标题开头的证书。在 Information view 里应该有一个带选中标志的绿圈告诉你证书合法,意思就是 WWDR
Intermediate Certificate 已经安装在系统里,并且证书已校验。要是看不见绿圈就应该从 iPhone Developer
Program Provisioning Portal 下载 WWDR Intermediate Certificate 并且像安装iPhone
Developer 或者 Distribution
Certificate那样给它装上。选中的证书旁有个小三角,点击它会显示证书关联的私钥。要是没有,看看你是不是在“My
Certificates”类别下。要对程序进行签名必须需要私钥,要是当前确实在"My
Certificates"下并且还是没有小三角,需要作废旧证书并且创建并提交一个新的CSR来创建新的私钥和证书。

  注意:如果创建了新私钥或者证书,关联到旧证书的配置文件就失效了,需要重新生成新 pfofiles。最好在拷贝新证书之前把旧的从开发机器和设备上删除掉,这样可避免新旧证书/配置文件混淆。这么做不影响已经在app store里的程序。

  警告:安装 iPhone 证书后不要改动默认的 "Use System Defaults" 信任设置。如果信任设置不是'Use System Defaults',在生成应用程序的时候会得到一个 CSSMERR_TP_NOT_TRUSTED 签名错误。

Provisioning Profiles - 安装/校验

 
 要把从iPhone Developer Program Provisioning Portal下载回来的Provisioning
Profile安装到开发机器,首先需要启动 Xcode然后点击"Window >
Organizer"来打开Organizer。把provisioning profile拖到标记为"Provisioning
Profiles"的区域内即可。

  如果是为了开发而安装 Provisioning Profile,还需要把它装在开发设备上。在
iPhone OS 设备已经插到电脑上的时候,在 Devices 三角下选择设备,然后在Organizer里把开发provisioning
profile拖进去。这就把 Provisioning profile装到 iPhone OS设备里了。

  注意:确保安装在开发设备和Mac里的 Development Provisioning完全相同对成功生成并安装测试程序是非常重要的。

  注意:跟
Development Provisioning Profiles不同,App Store Distribution Provisioning
Profiles不能安装在iPhone OS设备里。用App Store Distribution
Provisioning生成的程序是用来通过 iTunes Connect上传到App Store的。

  要告诉 Xcode
使用哪个 Provisioning profile,打开 Xcode 项目,打开 Target build settings,滚动到 Code
Signing。在 Code Signing 区域有个带小三角的 Code Signing Identity。确定设置是为任何 iPhone
OS 设备,之后在Value列点击弹出菜单并且选择要使用的 Provisioning Profile。为了开发,建议选择 "iPhone
Developer",要发布,建议选择"iPhone Distribution"。这些都在弹出菜单的"Auto matic Profile
Selector"区域里,这样就可以使 Xcode来为你找到正确的Provisioning Profile。

  注意:要是丢失了
iPhone devloper/Distribution证书的私钥,就无法选择证书关联到的 Provisioning
Profile。从备份中导入 iPhone developer/Distribution
证书的私钥可以解决这个问题。如果丢了或者删了私钥,就得生成一个新的CSR并且下载新的 iPhone Developer/Distribution
证书和Provisioning Profile。

  程序的 Bundle Identifier 必须跟Provisioning
profiles的Bundle Identifier APP ID匹配。要编辑程序的 Bundle Identifier,打开
target's properties settings,在 Identifier 栏输入 Bundle Identifier。如果在 App
id的bundle identifier里使用星号通配符,就可以替换为反向DNS格式的字符。

  下面有一些可以输入到 Identifier 框的例子。

  如果AppID是 A1B2C3D4E5.com.domainname.applicationname。输入com.domainname.applicationname 作为 Bundle Identifier

  AppID是 A1B2C3D4E5.*,输入反向DNS格式的字符串作为 Bundle Identifier。

关于 Profiles 和 App IDs

 
 创建 Provisioning Profiles 时可以关联两种类型的 App ID。第一个类型叫做通用App ID(Wildcard App
ID)。推荐大多数iPhone OS开发用通用App ID的Provisioning Profiles,因为这样单个通用App
ID可以用来生成和安装大多数程序,包括 iPhone Reference Libary 里的示例代码。通用App ID通过在 
Identifier 里输入星号创建。星号必须是App ID字符串的最后一个字符。如果使用通用App
ID,记着在Xcode项目里输入Bundle Identifier时把星号替换为反向DNS格式。

假设有 App ID ABCDE12345.*:

ABCDE12345是Bundle种子ID(由Apple生成)

*是App ID的Bundle Identifier。在xcode里输入bundle identifier时需要把星号替换为反向DNS格式。

假设有 App ID: ABCDE12345.com.yourcompany.*

ABCDE12345是Bundle种子ID(由Apple生成)

com.yourcompany.* 是App ID的Bundle Identifier。并且xcode项目里的bundle identifier必须以'com.yourcompany.'开头,星号可以替换成任意字串。

 
 第二类 App ID 称作固定AppID(Explicit App ID)。这类 APP ID限定了一个provisioning
profile只允许一个程序安装。启用iPhone OS 3.0特性需要固定 App ID,例如 In App Purchase或者 App
Push Notification 服务。固定ID通过输入指定字串创建。推荐做法是用反向DNS格式。

  重要:一个避免将来可能产生问题的提示:修改 yourcompany 为真正的名字。

Ad Hoc


Ad Hoc发布生成应用程序跟生成App Store程序类似,只是多了两步。第一,需要用 iPhone Developer Program
Provisioning Portal 创建一个 Ad Hoc Distribution provisioning
Profile并添加发布目标设备的 UDID。第二,创建一个代码签名Entitlements file。关于如何创建Entitlements
file请阅读 iPhone 开发者指南的 Managing Application Entitlements部分。创建完 Entitlements file并把它添加到 Code Signing Entitlements build settings之后,打开EntitleMents File并且田间或编辑 get-task-allo把它设为false。

文档修订记录

(原文的修订记录)

2010-04-13:新建。介绍iPhone开发中安装证书和provisioning profiles的步骤。

http://article.yeeyan.org/view/15661/101257

iPhone OS 开发 - 了解并解决代码签名问题的更多相关文章

  1. Windows 硬件开发人员怎样选择代码签名证书类型

    在建立 Windows 开发人员中心硬件仪表板帐户之前,你需要获取代码签名证书以保护数字信息的安全.此证书是用于建立你的公司对你所提交代码的所有权的接受标准.它让你可以用数字形式签署 PE 二进制文件 ...

  2. iPhone Mach-O文件格式与代码签名

    错误现象1) 直接运行/Applications/MobileFonex.app/MobileFonexKilled: 9 2)gdb调试Program received signal EXC_BAD ...

  3. 使用webstrom开发react-native时react-native代码会出现红色下划线的解决方法

    问题:使用webstrom开发react-native时react-native代码会出现红色下划线的解决方法 解决方法:webstrom ->preferences->Laugrange ...

  4. Android Eclipseproject开发中的常见调试问题(二)android.os.NetworkOnMainThreadException 异常的解决的方法

    android.os.NetworkOnMainThreadException 异常的解决的方法. 刚开是把HttpURLConnectionnection 打开连接这种方法放在UI线程里了,可能不是 ...

  5. iOS代码签名理解

    前言 做了几年iOS app coder了,对于证书的生成.使用流程烂熟于心,然而对于这套机制的原理却一直不甚理解.近来由于工作需要仔细研究了一下,特将自己的学习经验记录于此,以供大家学习指正. 问题 ...

  6. IOS证书/私钥/代码签名/描述文件

    1.   相关资源 (1)   钥匙串程序(常用工具->钥匙串),用于创建证书请求.安装证书.导出私钥等 (2)   IOS开发中心:https://developer.apple.com/de ...

  7. 浅谈iPhone OS(iOS)架构

    iPhone OS(现在叫iOS)是iPhone, iPod touch 和 iPad 设备的操作系统

  8. 【小梅哥SOPC学习笔记】SOPC开发常见问题及解决办法集锦

    SOPC开发常见问题及解决办法集锦 一.Symbol 'NULL' could not be resolved 近期在评估使用NIOS II处理器进行项目的开发,我使用的软件是Quartus II 1 ...

  9. (转载)如何学好iphone游戏开发

    转自:http://www.cnblogs.com/zilongshanren/archive/2011/09/19/2181558.html 自从发布<如何学习iphone游戏开发>到 ...

随机推荐

  1. 洛谷P1251 餐巾(网络流)

    P1251 餐巾 15通过 95提交 题目提供者该用户不存在 标签网络流贪心 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 为什么我全部10个测试点都对… 题目描述 一个餐厅在相继的N天里 ...

  2. 一个网站的head和body是如何进行优化的

    我们知道任何一个网站都要被解析成html后,浏览器才能识别,换句话说,用任何一门技术做的网站,都是被浏览器解析成为html.因此我们必须懂得,一个html页面由三部分组成,那就是html的开始标签和结 ...

  3. 深入理解ThreadLocal(转)(2015年06月11日)

    注明:转自:http://my.oschina.net/clopopo/blog/149368 学习一个东西首先要知道为什么要引入它,就是我们能用它来干什么.所以我们先来看看ThreadLocal对我 ...

  4. Log4net记录日志存库并存本地

    <?xml version="1.0" encoding="utf-8"?> <configuration> <configSec ...

  5. Java之循环练习2

    吐槽O(∩_∩)O:由于前几天电脑坏了,除了在弄电脑的同时又在练习科目三了,又是晒了三天网鱼都没打了.计划还是赶不上变化,真的是让人乱了节拍啊.咔!吐槽完毕,让我们的循环练习继续. 练习一:一个人很倒 ...

  6. 【学习笔记】【C语言】逗号运算符

    逗号运算符主要用于连接表达式,例如: int a = 9; int b = 10; a = a+1 , b = 3*4; * 用逗号运算符连接起来的表达式称为逗号表达式,它的一般形式为: 表达式1, ...

  7. html5 拖曳功能的实现[转]

    HTML5中实现拖放操作,至少经过如下步骤1)设置被拖放对象元素的draggable属性设置为true2)编写与拖放有关的事件处理代码 事件 产生事件的元素 描述 dragstart 被拖拽物体 开始 ...

  8. 全面解析SQL SERVER 的左右内连接

    SQL SERVER数据库的三种常用连接解析: 这里先给出一个官方的解释: left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右 ...

  9. Android Audio Play Out Channel

    1: 7嘴8舌 扬声器, 耳机, 和听筒 就是通过: audiomanager.setmode(AudioManager.MODE_IN_COMMUNICATION)audiomanager.setS ...

  10. 一款仿PBA官网首页jQuery焦点图的切换特效

    一款仿PBA官网首页jQuery焦点图的切换特效,非常的简单大方, 在对浏览器兼容性的方面做了不少的功夫.IE6也勉强能过去. 还是一款全屏的焦点图切换特效.大气而清新.很适合简介大方的网站. 下图还 ...