读书频道 > 网站 > 网页设计 > iPhone App开发实战手册
打开这扇门
12-09-19    奋斗的小年轻
收藏    我要投稿   

本文所属图书 > iPhone App开发实战手册

目前市面上不乏iPhone应用开发书籍,但要做出成功的产品,需要的不仅仅是开发优秀的软件。本书将向你展示完整的开发过程,不仅教会你怎样编写一款成功的App Store应用,还将教会你设计、测试和营销的技巧。无论...立即去当当网订购

你首先需要了解的地方是Provisioning Portal(授权中心)。在这里你可以得到Xcode构建和安装应用所需的东西。

代码签名对你意味着什么

在进入代码签名(code signing)的细节之前,最好先了解苹果公司是怎样实现它的,以及为什么它是必需的。

编译器和链接器很久以来都被用来创建二进制程序。这样的代码可以在目标平台上运行而没有任何问题,但是它有些安全方面的不足。

 没有办法验证谁开发了该软件。相反,有了签名过的代码,苹果公司就能精确地知道谁开发了上传到App Store的软件。

 无法保证软件没有被修改过。这就是代码签名用密码哈希(cryptographic hash)来让操作系统验证待运行的程序跟你所开发的一样的原因。

iPhone上的代码签名使用了公钥加密(public key cryptography)。也就是用公钥和私钥的组合(跟浏览器里使用的安全传输类似)创建并校验可执行文件里的数字签名。你的私钥用来创建数字签名,公钥则用来将它跟文件内容做比对。

签名过程里所用的公钥和私钥作为证书存储在Mac OS X的钥匙链(keychain)里。一个Apple Worldwide Developer Relations(WWDR)的证书机构会发放证书。WWDR也会告知证书何时过期。

苹果公司同时会控制签名过的代码可以在哪里运行,这是通过要求开发设备安装授权文件(provisioning profile)实现的。每个文件包含一个40字符的十六进制数列表,它唯一标识了可以运行指定应用的硬件。有些授权文件是对应特定的一个应用的,而其他的可以指定多个应用。授权文件还包括对应用开发者的证书的引用。

启动程序测试时,会检查授权文件里的设备列表,如果设备在列表里,就可以正常执行。否则,应用程序将被终止。

说明:从App Store下载的应用不需要授权文件:iTunes使用FairPlay DRM来控制这些应用的执行。

简言之,在iPhone上运行应用,你需要两样东西:用Mac OS X钥匙链里的条目来签名代码的能力,以及安装好的授权概述文件,其中包含设备ID。

钥匙链设置

如果你喜欢冒险,并在前面的项目里就尝试在设备上运行应用,那么可能已经在编译构建阶段看到了代码签名错误。除非你提前看了本章,或者先前就有iPhone开发经验,否则编译不会成功,因为你还没有设置钥匙链和安装授权文件。

第一步是配置Mac OS X的钥匙链,以供Xcode在代码签名生成阶段使用。

说明:Mac OS X的钥匙链是操作系统内置的安全机制。输入了主密码(master password)后,通常是在登录时,应用程序可以获取其他的密码和安全信息。例如,在你输入一个网站的密码后,它就被存储在钥匙链里,下一次访问该站点时Safari就可以使用这个密码了。

可以用钥匙链存取(Keychain Access,在Applications➝Utilities文件夹)来管理钥匙链里的信息。它用来浏览和管理钥匙链里存储的信息。对于Xcode开发来说,需要关注的是Certificates分类里的条目。

新的授权机构。首先需要做的是设置Apple’s Developer Relations为证书授权机构。步骤如下。

1.登录iPhone Dev Center(http://developer.apple.com/iphone)。

2.在右边的导航栏中点击iPhone Provisioning Portal。

3.在左列点击Certificates。

4.在Certificates页面的底部,点击链接“If you do not have the WWDR intermediate certificate installed, click here to download now.(如果尚未安装WWDR的中介证书,点此下载。)”。

一个名为AppleWWDRCA.cer的文件将出现在你的Mac里。

5.双击该文件。

Keychain Access启动。

6.如果出现Add Certificates(添加证书)对话框,确认选中了Keychain弹出菜单里的login,然后点击Add(添加)按钮。

至此,应该可以看到新的证书已经安装在登录钥匙链里了(如图5-4所示)。


 

请求证书。下一步是向刚添加的机构请求一个新的证书。这个过程包括在桌面上生成请求文件(request)并通过授权中心上传给苹果公司。

1.选择菜单Keychain Access➝Certificate Assistant➝Request a Certificate From a Certificate Authority。

钥匙链存取将启动一个助手(向导)来引导你进行请求过程(如图5-5所示)。


 

2.在显示的对话框里,在User Email Address字段输入你的电子邮件地址。

这个电子邮件地址应该跟注册iPhone开发者计划时使用的一样。

3.在Common Name字段填入你加入iPhone开发者计划所用的名字。选择“Saved to disk(保存到磁盘)”,这样下一步就会生成一个文件。

你的表单应该如图5-6所示。


 

4.点击Continue按钮。在弹出保存证书请求的对话框时,修改文件名为iPhone.certSigningRequest,并将其保存到桌面。

在文件保存到磁盘后,会显示确认信息。点击Done按钮关闭助手。

说明:请求的证书只能使用1年。你可以保存这个请求,在每次证书过期时重新提交,以节省一些时间。

可认证(Certifiable)。现在你的桌面上已经有了请求文件,可以用浏览器上传了。

1.在Provisioning Portal页面,点击左边的Certificates(证书)。

你会看到一条警告,提示你没有合法的证书。

2.要修复它,点击Request Certificate。

3.在页面的底部,点击Choose File,找到桌面上的iPhone.certSigningRequest。选择该文件后,点击Choose。

该对话框关闭。

4.点击右下角的Submit。

你应该会看到消息“Certificate Request has been submitted for approval.(证书请求已提交待确认。)”证书的状态也将变为“Pending Approval(待确认)”。

5.你需要确认自己的请求,所以点击Action栏中的Approve按钮。

现在状态栏显示“Pending Issuance(待颁发)”。

说明:如果使用公司账户,则需要管理员来确认证书请求。管理员还有权力添加新成员到小组里。

6.一般不到一分钟以后证书就会颁发,所以稍等一会儿刷新页面,应该可以看到显示的状态变为Issued(已颁发)。点击Action栏中的Download按钮。

新的证书将开始下载。可以在Downloads文件夹里找到developer_identity.cer文件。

7.双击该文件,将弹出添加这个新证书的确认对话框。确认钥匙链弹出菜单设为login,然后点击Add。

至此,钥匙链已正确设置完毕,在Keychain Access中应该可以看到,如图5-7所示。


 

在你的名字前的钥匙图标非常重要:如果没有这个图标,那么你将不能签名代码。如果没有看到这个图标,那么你需要从头开始,提交一个新的证书请求。

同时也要确保证书载入到了默认的钥匙链(粗体显示)里。就是图中选中查看的“login”。如果证书不在正确的地方,请尝试重新载入。

授权

恭喜,还差一半就可以在iPhone上运行你自己的应用了!钥匙链正常工作以后,剩下的就是创建一个授权文件来指定运行代码的设备。

身份危机。如果你现在尝试编译项目,会看到错误信息“Code Sign error: a valid provisioning profile matching the application’s identifier 'com.iconfactory.SafetyLight' could not be found.(代码签名错误:未找到匹配应用标识com.iconfactory.SafetyLight的合法授权文件。)”

如前所述,授权文件是一个连接代码签名证书、应用标识和设备的文件。当这三种信息一致后,你就可以编译运行应用了。

所以现在你要做的是开始用Xcode收集这些信息,并将它们提交到授权中心。

新的闪光点。首先要确定开发所用设备。这些设备可以是任何型号的iPhone或iPod touch。

提示:你可能需要多个设备来测试。第一代iPod touch的性能和现在的有很大不同。同样,老设备不具备新设备的特性:例如第一代iPhone不带GPS,指南针只有iPhone 3GS才有。你会希望测试如果没有这些功能,应用仍然可以正常工作。

拥有一个标准开发者账号后,你可以使用100台设备来测试。这个限制包括内部测试的设备,以及做beta测试用的机器。

需要注意这个数字是累加的,这点很重要:你不能删除或替换设备。在授权中心输入了唯一的标志符后,在接下来的一年里都无法改变。这点很重要,因为硬件每年要升级好几次,升级后,很多测试者会想要提供他们很炫的新机。如果你所有的设备都赋给了iPhone 3G,那么当3GS发布时,将无法用它来测试。

提示:iPhone通常在夏天苹果的年度开发者大会WWDC时更新。新版的iPod,包括iPod touch,一般在秋季前段发售,也就是假期购物季前。

还有很多测试者在一年中总是需要修改他们的设备标志符。如果测试者的手机丢了、被偷了或是损坏了,就需要能把他们的替代机加入授权文件。但你需要对设备分配比较吝啬。永远不要把它们分配完,一定要为新机或替代机留有余地。

找到设备标识符。添加新设备的第一步就是确定设备唯一标识符(UDID)。每台iPhone和iPod touch都有一个包含40位十六进制字符的字符串,任何两台设备都不相同。

说明:很多应用使用UDID来实现自己的需求。例如,如果需要唯一地辨识一个Web Service请求,可以调用UIDevice类的-uniqueIdentifier方法,并把结果传送到网络。

在Xcode里,获取UDID的最简单方法是连接上设备,打开Organizer(Window➝Organizer)。在被提示是否希望将该设备用于开发时,给出肯定的回答。

提示:你会经常用到Organizer窗口,所以要学会使用快捷键Control-⌘-O。

窗口打开后,从源列表里选择设备,然后将出现Summary标签页。如果看到消息“device could not support development(设备不支持开发)”,那么拔出手机,重新启动,然后再次尝试。可以复制摘要里的Identifier文本到剪贴板,如图5-8所示。

测试者无法从Xcode获取到UDID,但可以通过一个小技巧在iTunes里获得。选择设备后,可以点击摘要里的Serial Number(序列号),它将变为标识符。按下⌘-C(Mac上)或Ctrl-C(Windows上)组合键将该值复制到剪贴板。

提示:另一个获得设备标识符的好办法是使用Erica Sadun的免费应用Ad Hoc Helper。测试者可以从App Store安装这个简单的应用,运行后可以自动将UDID通过电子邮件发送。


 

添加设备。下一步是添加刚得到的设备标识符。

1.在Provisioning Portal页面,点击左边的Devices。

Devices页面显示了还可以注册的设备数量。

2.点击Add Devices以添加新设备。

下一屏有两个输入字段,一个用于设备名,另一个用于其ID。

3.选择一个你喜欢的名字,然后输入关联的UDID。

提示:如果遵循一些设备ID的命名约定,日后会更加轻松,特别是当列表很长后。

例如,你可以结合使用测试者的名字和设备的类型。名称“David Bowman 3G”表示这是Dave使用的iPhone 3G。在他升级后,你可以新增一个设备叫做“David Bowman 3GS”。

4.点击Submit之后,可以在列表里看到新设备,并且计数器值减小。


 

应用的ID。你需要为授权文件准备的下一样信息是应用ID。这是个唯一的标识符,它通过匹配模式来指定哪些应用可以运行。匹配模式可以包含星号作为通配符。

当查看flashlight的Info.plist时,会发现它的包标识符定义为com.iconfactory. FlashlightPro。这种反向域名路径定义了flashlight来自Iconfactory。如果你从iPhone Dev Center下载过示例代码,就会发现很多应用的标识符都是以com.yourcompany开头的。

比如说你的域名是squidger.com,你的应用取名为Tiddlywinks Pro。你在Info.plist中定义了包标识符为com.squidger.TiddlywinksPro,那么现在就有下列几种指定应用ID的选择。
 用*匹配所有应用。你将可以在设备上编译运行任何应用,包括示例代码和第三方应用。但它不具有下面两种方式的特别功能。

 用com.squidger.*匹配任何以com.squidger开头的应用,包括com.squidger.TiddlywinksPro及你公司未来的其他产品。在进行应用的beta测试时,请使用这种模式。一个授权文件就可以匹配你所有的产品,对于测试者测试新版本来说很方便。因为他们已经安装了之前的beta版本。

 用com.squidger.TiddlywinksPro精确匹配你的应用。如果你希望实现推送通知或应用内付款,那么必须用这种类型的ID。

现在,选择最简单的方式,指定应用ID为*。打开Portal页面做好准备。

1.在Provisioning Portal页面,点击左边的App IDs。

App IDs页面显示了已经定义的应用ID。这个列表会随着时间增长,当需要配置推送通知或应用内支付(in-app purchase)时会用到它。

2.现在,只需点击New App ID来添加第一个应用ID。

首先,在Description下的输入框填写所用匹配模式备忘。

3.因为你要用这个应用ID来构建和运行所有应用,所以输入All Apps。

保持Bundle Seed ID (App ID Prefix)下的弹出菜单选中Generate New(如图5-10所示)。下一步,在Bundle Identifier (App ID Suffix)下方输入匹配应用的模式。


 

4.输入*然后点击Submit。

在回到应用ID的主页面后,在描述栏里可以看到All Apps。

说明:模式的前缀是一个随机生成的Bundle Seed ID(包种子ID)。这个前缀使该标识符对每个开发者都是唯一的。它们也可以用来在同一开发者的多个应用之间共享安全信息,但大部分时候你都可以忽略它。

用授权文件把它们结合起来。好消息!你已经创建了授权文件所需的所有内容——现在要整合它们。这将在Provisioning Portal里进行,你肯定不会觉得奇怪。

1.在Provisioning Portal页面,点击左边的Provisioning(授权)。

这个页面有几个标签。现在你只需要关注Development标签。

2.点击New Profile开始。

首先要做的是给授权文件一个名字。

3.因为这个授权文件将用于一般的iPhone开发,所以把它命名为iPhoneDevelopment。选中显示的所有证书。

如果你是个人开发者,那么这里只有一个证书。如果你在团队里跟其他开发者一起工作,你可以为他们添加证书,然后他们也将被列在这里。

4.在App ID选项,选择All Apps。勾选上你将用于内部开发的每个设备(如图5-11所示)。

Select All链接可以方便地选中所有设备。


 

5.点击Submit。

返回到了授权概述文件列表。你会发现新概述文件的状态是In Process(处理中)。苹果公司的服务器需要一点时间来生成这个文件。

6.刷新页面。状态变为Active,在Actions(操作)栏出现Download按钮。点击Download。

完成后,在你的Downloads文件夹下会有一个iPhone_Development. mobileprovision文件。

至此,Provisioning Portal的操作告一段落。现在需要切换回Xcode并把这个新文件加入到编译过程里。

Xcode设置。你在Provisioning Portal里遵循很多步骤来创建授权概述文件。很幸运,安装它非常简单。只要把iPhone_Development.mobileprovision文件拖动到Xcode的图标上就完成了!

为了验证安装是否正确,在Xcode里打开Organizer(选择Window➝Organizer)。在Organizer窗口里,打开源列表里的iPhone Developmen分组,找到一个名为Provisioning Profiles的条目。点击它,你会看到Xcode可以使用的所有授权文件。你应该可以在列表里找到iPhone Development,旁边有一个过期日期。如果点击这个文件,可以看到进一步的信息,如图5-12所示。

清理,编译和运行。你现在已经准备好在iPhone上安装你的应用了。确认你在授权里指定的某台设备已经连接上。设备成功地连接上iPhone后,可以在Organizer里的设备旁边看到一个绿点。

提示:如果设备没有显示绿点,那么在Organizer里选中它,将可以在Summary标签页看到状态信息。如果看到消息“could not support development(不支持开发)”,说明Xcode无法连接该设备上的某个进程。要重新开启这个进程的唯一办法是重新启动设备。


 

在主项目窗口里,修改窗口左上角的Overview菜单。到目前为止,你一直用iPhone Simulator(iPhone模拟器)作为Active SDK设置。现在你已经有了一个经过授权的设备并且已经连接,因此可以选择iPhone Device (Base SDK)(如图5-13所示)。


 

说明:为设备设置Active SDK后,Xcode就会为iPhone的ARM处理器生成代码,而不再是为Mac的i386处理器。你可以通过Overview菜单底部的Active Architecture(活跃架构)来验证这一点。

选择Active SDK后,清理项目(Build➝Clean)。这个步骤可以确保重新创建。任何生成的有代码签名错误的代码都会被清除。在弹出的对话框里,勾选上全部两个复选框,点击Clean。

现在到了每一个iPhone开发人员都会难以忘怀的时刻:在iPhone上安装第一个自己的应用。选择Build➝Build and Run(或按⌘-Return组合键)开始吧!

说明:如果看到错误提示不能启动可执行文件,那么说明iPhone没有连接或者需要重启。同时,确认手机没有锁定,并且主屏幕是可见的。

头文件在预编译及代码在编译时,你可以观察左下角的状态栏。在生成过程的尾声,会进行代码签名。这时候,会看到消息框询问是否想让“codesign”使用钥匙链。点击Allow。

每次从Xcode运行应用时,都会检查设备以确认合法的授权文件已经安装。在把授权文件拖动到Xcode的图标上时,只是把它安装到了开发环境。授权文件的最终目的地是设备,直到它就位,应用才能运行。幸好Xcode会帮助你:弹出提示框告知不能在设备上运行你的应用。点击“Install and Run”就会安装授权文件。

你可以通过iPhone上的设置应用来验证授权文件已经安装。点击Settings➝General➝Profiles,可以看到已经安装的授权文件列表。其中有iPhone Development授权文件及过期时间。在授权文件即将过期时,iPhone OS系统会提醒你。你也可以通过这个界面来删除概述文件。

Xcode的下一步是把应用复制到设备上。可以在左下角的状态信息看到“Installing Safety Light.app on Kryten...”后面是“GDB: Running...”。现在再看一下设备。恭喜,你现在是一名iPhone开发者了!

提示:可以连接多个iPhone和iPod到Mac来帮助测试。很简单,只要将每个设备连接到USB端口,然后Xcode就可以同时使用它们。在Overview菜单的Active Executable里选择相应的设备,就可以控制调试和安装应用的设备。
 

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站