最近在开发一款IOS应用,开发者账号是借来的,所以程序只能在模拟器中调试。后来在网上找到一些真机调试教程,但是有的语焉不详,有的实践下来行不通。经过摸索并综合几篇文章的内容,后来总算搞定了。为防止以后再用到的时候走弯路,也为了帮助有同样需要的人,此处记下了我的整个过程。
- 创建证书
打开实用工具-钥匙串访问。然后在菜单栏里点击钥匙串访问-证书助理-创建证书来打开向导。第一个步骤比较重要,必须要把名称命名为iPhone Developer,将类型设定为代码签名,将"让我覆盖这些默认值"选中。之后的步骤无需更改,一路点击“确定”和“继续”来完成这个向导就可以!
2. 修改XCode配置
a)SDKSettings.plist
打开应用程序,找到XCode,右键显示包内容。依次进入/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/目录(对应不同版本的XCode SDK版本目录有所不同)。可以看到SDKSettings.plist文件。将它复制到自己平时常用的工作目录进行如下修改:
在DefaultProperties属性下,找到CODE_SIGNING_REQUIRED字段,属性改为NO;找到ENTITLEMENTS_REQUIRED字段,也将其属性值改为NO。
修改完之后将保存后的文件复制到上面目录下覆盖源文件。
b)Info.plist
同样的,打开应用程序,找到XCode,右键显示包内容。依次进入/Contents/Developer/Platforms/iPhoneOS.platform/目录。可以看到Info.plist文件。将它复制到自己平时常用的工作目录下进行如下修改:
查找到所有的CODE_SIGN_CONTEXT_CLASS字段,将其属性值修改为XCCodeSignContext。
修改完之后将保存后的文件复制到上面目录下覆盖源文件。
3. 添加脚本文件
打开终端,输入下面的命令
mkdir /Applications/Xcode.app/Contents/Developer/iphoneentitlements
cd /Applications/Xcode.app/Contents/Developer/iphoneentitlements
curl -O http://www.alexwhittemore.com/iphone/gen_entitlements.txt
mv gen_entitlements.txt gen_entitlements.py
chmod 777 gen_entitlements.py
4. 修改工程配置(需要针对每个需要真机调试的工程进行设置)
a) 禁用自动签名
打开XCode工程文件,将BuildSettings里面的Code Signing Identity中的全部选项设置为Don't Code Sign
b) 添加自定义生成脚本
选中XCode工程后,选择XCode->Editor->Add Build Phase->Add Run Script Build Phase,加入以下脚本
export CODESIGN_ALLOCATE=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate if [ "${PLATFORM_NAME}" == "iphoneos" ]; then /Applications/Xcode.app/Contents/Developer/iphoneentitlements/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
好了,万事大吉,接上你的5s,调试试试。
5. 可能出现的问题
出现cannot find code object on disk错误,如果代码没有问题而编译的时候出现此问题,一般是最后脚本处出现了问题。工程中添加的run script代码中有两处涉及到脚本的路径,请仔细查看此处的路径和你的路径是否一致。
出现shell script invocation error错误,此处也是run script中出现了问题,如果是手动输入的,请复制我的代码试试。