`
kerlubasola
  • 浏览: 709984 次
文章分类
社区版块
存档分类
最新评论

iPhone OS 开发 - 了解并解决代码签名问题

 
阅读更多

绝大多数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。


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

分享到:
评论

相关推荐

    Release-iphoneos

    在实际开发流程中,当应用开发完成并经过充分测试后,开发者会使用"Release-iphoneos"配置来生成最终的ipa文件,这个ipa文件是用户在App Store或通过企业分发方式下载安装的版本。同时,这个过程可能还包括代码签名...

    iphone开发基础教程(源代码)-完整.7z

    在iOS开发中,iPhone应用程序主要使用Swift编程语言编写,Swift是一种由Apple在2014年推出的强大且直观的编程语言,旨在与Objective-C共存,并为iOS、iPadOS、macOS、watchOS和tvOS提供支持。Swift以其简洁的语法和...

    iPhone开发入门

    - 发布过程涉及代码签名、应用审核和上架操作。 6. **市场机遇**: - App Store的出现降低了移动应用开发的门槛,使得个人开发者也能参与其中,创造了巨大的商业机会。 - 通过创新和独特设计,即使是简单的应用...

    iphone平台开发

    安装完成后,开发者可以通过偏好设置来配置各种环境参数,比如代码签名、版本控制等。 - **项目创建**:在Xcode中创建新项目时,可以选择不同的模板,例如单视图应用、游戏模板等。这些模板为开发者提供了快速构建...

    iOS真机调试包13.1.zip

    苹果的Xcode集成开发环境提供了这样的功能,它允许开发者通过USB连接iPhone或iPad,实时查看和修改代码,快速定位并解决问题。 在"iOS真机调试包13.1.zip"中,包含的可能是一系列用于真机调试的工具、证书、配置...

    Iphone编程

    在进行iPhone编程时,首先需要熟悉iOS操作系统(iPhoneOS),这是苹果公司为其移动设备开发的一个操作系统。iOS提供了一套丰富的API和开发工具,帮助开发者创建高性能、高安全性的应用。 iPhone软件开发工具包...

    iphone开发教程(英文版)

    通过实际案例,开发者可以快速上手并解决实际开发中的问题。 #### 7. 测试与调试 了解如何在模拟器和真实设备上测试应用,识别并修复bug。教程将介绍单元测试、集成测试的方法,以及使用Xcode的调试工具定位和解决...

    iPhone_Development.pdf

    ### iPhone应用程序开发基础 #### 一、iPhone平台概述 iPhone平台自2007年推出以来,迅速成为了全球最受欢迎的智能手机之一。它不仅改变了人们的生活方式,也为软件开发者提供了广阔的市场机会。本节将从以下几个...

    Iphone开发学习资料,文章通俗易懂

    这份"Iphone开发学习资料"可能还包含实际项目案例、代码示例、编程挑战和常见问题解答,以帮助初学者巩固理论知识并提升实践能力。随着对这些知识点的深入理解和实践,初学者将逐渐成长为熟练的iOS开发者。

    IOS联真机签名解决方案.docx

    本文档旨在介绍一种适用于iOS设备的真实机签名解决方案,该方案结合了FridaRPC、Theos Tweak以及GCDWebServer等工具和技术,为开发者提供一种高效且稳定的签名方法。 在此之前,我们已经讨论过关于iOS某电商App的...

    iphone开发书

    《iPhone开发大全》这本书是为想要踏入iOS应用开发领域的专业人士量身打造的宝贵资源。它涵盖了从基础到高级的全方位iPhone应用开发知识,旨在帮助读者掌握Apple的Swift编程语言和Xcode集成开发环境(IDE)。 一、...

    Xcode 4.2 4.1 免证书开发

    - 在向导的第一个步骤中,确保将名称设置为“iPhone Developer”,类型选择为“代码签名”,并勾选“让我覆盖这些默认值”。 - 按照向导的指引完成剩余步骤,一路点击“确定”和“继续”。 ##### 2. 修改Xcode的...

    【Objective-C.Phrasebook.2nd.Edition】[PDF+源代码] [iPhone/iPad/iOS]

    《Objective-C Phrasebook》第二版是一本专注于iOS和Mac OS X平台开发的编程书籍,它以PDF格式提供,并附带了源代码。本书是为那些希望深入理解Objective-C语言并以此构建iPhone、iPad以及iOS应用的开发者而设计的。...

    iphone开发教程6

    《iPhone开发教程6》是源自世界知名学府斯坦福大学的一门课程,旨在为学生和开发者提供深入的iOS应用开发知识。这门教程不仅涵盖了基础的编程概念,还涉及了iOS平台上的高级技术,使学习者能够构建出功能完备、用户...

    Mac_Xcode_3.2.5免证书开发调试

    在扩展选项中,选择“代码签名”,不选择“基本约束扩展”,并在主题备用名称中输入RFC822名称,即你的电子邮件地址。 2. **Xcode破解**: 为了实现免证书调试,需要修改Xcode的内部组件。确保Xcode关闭,然后在...

    傻瓜书之iPhone应用程序开发

    《傻瓜书之iPhone应用程序开发》是一本针对初学者编写的指南,旨在帮助那些对编程有一定基础但对iOS开发不熟悉的读者快速上手。这本书可能并不适合已经具备一定iOS开发经验的人,因为它的内容可能过于基础。下面我们...

    Xcode 免证书开发调试(总结)

    ### Xcode 免证书开发调试详解 #### 引言 在使用Xcode进行iOS...请注意,虽然这种方法可以帮助您在开发过程中节省成本,但在最终发布应用程序之前,还是需要获得正式的苹果开发者证书来进行正式的代码签名和发布。

    xcode4.3_免证书开发调试并构建ipa

    - 进入路径`/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk` - 复制`SDKSettings.plist`文件,并重命名为`SDKSettings.plist.org` - 使用文本编辑器...

    Xcode_免证书开发调试_ipad_程序开发.pdf

    - 启动问题:如果安装后无法正常启动(卡在灰色苹果界面或黑屏),可以尝试更换启动光盘映像为darwin300.iso来解决问题。 #### 二、免证书开发调试 传统的iOS应用开发需要购买Apple开发者账户,每年支付$99的费用...

Global site tag (gtag.js) - Google Analytics