Developing Natively

虽然有很好的一些指南帮助我们使用完全开放和自由的工具集(toolchain)来为iPhone作开发——甚至在iPhone上直接编译和安装,例如这个,但是我还是希望用官方iPhone SDK(想想下载那2G大块头的时间 XD)和Xcode,当然我没有兴趣去买那 $99 的开发者授权,同时作为完美主义者,还希望Xcode能够尽可能完美的运行每一个功能——这个也是有办法的,之前找到了246tnt针对iPhone SDK 2.0的一个解决方案,今天又看了javacom在hackint0sh.com上写的一个不一样的思路,经过实验,后者更加简单,在SDK 2.1上也完全适用,而且很好的支持设备部署,下面就是我尝试的方案:

  1. 在系统中创建专用于iPhone应用签名的证书,这个在Apple的官方开发者站点有个非常清晰的说明,注意最好把你的证书命名为 iPhone Developer,当然叫别的也行,但是用这个名字和Xcode缺省模板里的一致。
  2. 启动Xcode,连上你的iPhone——这一步很重要——然后新建一个iPhone OS应用,我不知道为什么,但是如果新建应用的时候iPhone没有连接,那么后面怎么设置都没法直接从Xcode向iPhone部署应用,也许是我的人品问题? -_-bb
  3. 打开项目设置,在 Build 一栏,确认 Code Signing Identity下面 Any iPhone OS Device 一项选择了 iPhone Developer,然后添加两个自定义设定(User-defined Setting,如图)[1. 这一步还有更简单但是稍微dirty一点的做法:备份 /Developer/Platforms/iPhoneOS.platform/Info.plist,然后打开之,把 DefaultProperties 下面的 PROVISIONING_PROFILE_ALLOWED 和 PROVISIONING_PROFILE_REQUIRED 两项的值都改成 NO 就行了,这样以后每次Xcode建立新项目都会使用这个缺省设定。]:
    PROVISIONING_PROFILE_ALLOWED = NO;
    PROVISIONING_PROFILE_REQUIRED = NO;
  4. 打开项目的 Info.plist 文件,增加下面一项属性:
    SignerIdentity
    Apple iPhone OS Application Signing
  5. Build & Go! Xcode会编译并在iPhone上部署你的应用,然后开始调试,remote debugging也正常工作。
  6. 然后就可以把 Build 选项里的 Base SDK 换成 Simulator,然后在电脑上进行开发调试,直到需要做设备测试了再换成 Device,然后重新Build & Run就行了。这里很奇怪,我没办法让某个配置针对模拟器,另一个配置针对实际设备,和上面那个灵异现象一样以后再研究吧。[2. 经过试验,可以在 Debugger 窗口选择 Active SDK 来切换目标环境是模拟器还是设备,这样就可以不用老是修改项目的设置了。但是这个办法有时候会报一个错误:

    CodeSign error: no provisioning profiles found for code signing identity …

    这个暂时没有好的解决方案,但是可以通过清除某些临时文件来绕过,首先关闭项目窗口,然后在项目目录下执行:

    rm .xcodeproj/*.pbxuser

    再重新打开项目即可。]

更新注释