开发环境使用的是目前为止最新的稳定版软件:Mac OS X Lion 10.7 + Xcode 4.1 目前Xcode 4.2 Preview版也已经发布,听说其修改方法跟4.1很是相似,只改动了一行代码,请参看参考文章的第二篇。本文仍以4.1版本为例。ios
AD: 51CTO云计算架构师峰会 抢票进行中!小程序
网上有很多关于xocde3.x真机调试的文章,但鲜有xcode4.2相关的资料。参考了一些文章,终于能够在xcode4.2上进行真机调试了,在此记录下。xcode
众所周知,在Xcode上开发的程序只能在模拟器中运行,若是要放到真机上则要花费99美金购买开发者证书iDP。这严重阻碍了我等草根开发者探索的脚步。写个小程序,同窗间分享一下这个小小的愿望都不能知足,天然不能善罢甘休。bash
在没有iDP的状况下,要想将程序放到iPhone上调试,并最终发布IPA用于分享,须要如下几个步骤:架构
1.本身为本身颁发一个证书用于为生成的程序签名curl
2.修改工程配置以及Xcode的配置文件和二进制文件以阻止其验证和使用这个伪造的证书iphone
3.使用自定义的步骤为应用程序签名工具
4.使用一点小trick来生成IPA文件ui
1.建立证书云计算
我会分几步来讲明。值得说明的是,要想真机调试,ios device必须事先越狱.建立证书的过程比较简单,打开实用工具-钥匙串访问。而后在菜单栏里点击钥匙串访问-证书助理-建立证书来打开向导。第一个步骤比较重要,必需要把名称命名为iPhone Developer,将类型设定为代码签名,将"让我覆盖这些默认值"选中。以后的步骤无需更改,一路点击“肯定”和“继续”来完成这个向导就能够。
1.建立证书,这个没什么好说的,网上资料一大堆,只要别写错名字就好,证书名必定要为 iPhone Developer
2.破解ios sdk及其xcode的相关配置文件(双击配置文件就能够打开,注意SDKSettings.plist有权限控制)
修改/Developer/Platforms/iPhoneOS.platform目录下的Info.plist文件,将其中的 XCiPhoneOSCodeSignContext 都改成XCCodeSignContext
修改/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk目录下的SDKSettings.plist文件,修改以下字段:
- <key>CODE_SIGNING_REQUIRED</key>
- <string>NO</string>
- <key>ENTITLEMENTS_REQUIRED</key>
- <string>NO</string>
3.破解xcode二进制文件。创建一个crack文件,内容以下:
- #!/bin/bash
- cd /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/PrivatePlugIns/iPhoneOS\ Build\ System\ Support.xcplugin/Contents/MacOS/
- dd if=iPhoneOS\ Build\ System\ Support of=working bs=500 count=255
- printf "xc3x26x00x00" >> working
- /bin/mv -n iPhoneOS\ Build\ System\ Support iPhoneOS\ Build\ System\ Support.original
- /bin/mv -n working iPhoneOS\ Build\ System\ Support
- chmod a+x iPhoneOS\ Build\ System\ Support
而后执行 chmod +x crack执行./crack,没错误就正常
4.修改xcode工程配置文件
1) 下载脚本
打开终端,执行以下操做
- cd /Developer
- mkdir xcode-crack
- curl -O http://www.alexwhittemore.com/iphone/gen_entitlements.txt
- mv gen_entitlements.txt gen_entitlements.py
- chmod 777 gen_entitlements.py
2) 禁用Xcode自动的签名操做
将工程配置中全部的Code Signing选项所有设为Don't Code Sign,如图。可能须要先点击“All”让这个选项显示出来
3)添加自定义的生成后脚本
在Build Phases中添加一个Phase,右下角的Add Build Phase,而后单击Add Run Script,输入如下脚本(如图)
- export CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
- if [ "${PLATFORM_NAME}" == "iphoneos" ]; then
- /Developer/xcode-crack/gen_entitlements.py "my.company.${PROJECT_NAME}" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent";
- codesign -f -s "iPhone Developer" --entitlements "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/"
- fi
5。打包应用程序,生成ipa文件
在xcode上选择product菜单,选择Build For ---> Build for Achiving,就能成ipa文件了。如图:
能够将这个文件拖到itunes,就能够生成一个ipa文件,如图:
至此,咱们就能够为所欲为地开发并调试ios程序了,并能够将打包好的ipa文件分享给他人
按照上面的步骤导入3.x的工程成功运行,可是若是用XCode 4.2建立新工程,则会报错,须要作以下修改:
一、将【Objective-C Automatic Reference Counting】的默认值由【YES】改成【NO】;
二、输入下面的代码注意没有特殊字符
- export CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
- if [ "${PLATFORM_NAME}" == "iphoneos" ]; then
- /Developer/iphoneentitlements401/gen_entitlements.py "my.company.${PROJECT_NAME}" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent";
- codesign -f -s "iPhone Developer" --entitlements "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/"
- fi