昨天晚上捉摸了一下,怎么在不成为Apple的ADC付费会员的情况下,让iPod和XCode联调。
本来也没有觉得这个问题会很重要。但是当我开始编写关于存取文件系统的时候,发现通过XCode的标准函数NSSearchPathForDirectoriesInDomains获取Applicaiton可以存储的目录时,获得的路径都是 /User/Application/3EB85CE1-79F8-4A91-BBBB-B00C888F02DE/Document…. 一样的目录,而每次 “3EB85CE1-79F8-4A91-BBBB-B00C888F02DE” 都在更新。
所以当我把代码用scp复制到iPod上面的时候,在没有报任何错误的情况下,就存储失败了。鉴于自己写一个可以输出日志的模块太麻烦(其实也不麻烦,就是觉得会和操作之间互相干扰),所以决定搞一搞iPod App的数字签名问题。
于是就搜索到了一篇英文文章:Developing for a jailbroken iPhone, A to Z (iPhone 2.2)
iPhone使用证书签名,限制可以在iPod/iPhone设备上使用的软件。在一般情况下,开发工程师成为一个ADC(Apple Developer Connection) 付费会员,从ADC获得一些认证,包括数字证书。他下载证书,把证书的相关信息导入XCode。当他编译程序的Debug或者Release版本的时候,都用这个数字证书签名。他也把签名后的程序传输到iPhone,或者提交给Apple的App Store,数字签名保证了程序是来自于一个注册的,值得信赖的ADC会员手中。
对于开发工程师来说,这篇博客的重点是,怎么在一个jailbreak后的iPhone/iPod上面,绕过Apple的ADC付费会员认证,就可以让XCode和iPhone/iPod做联调,不过仅仅限于被jailbreak的iPhone/iPod。
具体的过程是这样的:
需要一个被破解后的iPhone/iPod,注意,里面需要有Cydia,保证后面的步骤正常进行。
创建一个自签名证书:参考Code Signing Guide – Procedure
在”应用程序”之”实用工具”的目录中,找到应用程序”钥匙串访问”,并打开它。
在目录“钥匙串访问”的“证书助理”中选择,“创建证书”,弹出对话框。
填写名称为“iPhone Developer”,类型是”自签名根证书”,选择“让我覆盖此要求的默认”,点击“继续”。
设置序列号,有效天数,选择证书类型:“代码签名”, 点击“继续”。
填写完基本资料之后(其实可以都不填写,反正是自己用),然后一路点击“继续”到最后。
中断iPod/iPhone对数字签名的认证。有两种方法:
在Cydia里面,选择Manage,选择Sources,选择Edit,选择Add,添加应用程序源,然后添加 http://iphone.org.hk/apt 。自动更新之后,找到MobileInstallation Patch这个应用程序,然后下载。执行完毕之后重启。(我使用的是这个办法)
另外一个办法,就是添加源:http://cydia.hackulo.us ,相同的步骤,最后找到MiPatch,安装重启。
(注意备份)修改在Mac上的 /Developer/Platforms/iPhoneOS.platform/Info.plist 配置文件:
<key>NATIVE_ARCH</key>
<value>armv6</value>
<key>PROVISIONING_PROFILE_ALLOWED</key>
<value>NO</value>
<key>PROVISIONING_PROFILE_REQUIRED</key>
<value>NO</value>
修改开发项目中的配置(每个需要调试的项目都要这样设置一次,不过也就设置一次):
用XCode打开你的项目,在Project菜单中,选择Edit Project Setting。
在弹出窗口中,选择Build分栏,然后Configuration选择All Configurations,Shows选择All Settings。找到Code Signing Identity,Setting列选择Any iPhone OS Device,右侧输入iPhone Developer(就是在第二步c中填写的名称)。
在项目的Info.plist中添加一段xml:
<key>SignerIdentity</key>
<value>Apple iPhone OS Application Signing</value>
好了,现在在编译的时候选择Device + Debug/Release,就能看到插上数据线的iPhone/iPod能够弹出需要调试的应用程序了。