最近在开发一款IOS应用,开发者帐号是借来的,因此程序只能在模拟器中调试。后来在网上找到一些真机调试教程,可是有的语焉不详,有的实践下来行不通。通过摸索并综合几篇文章的内容,后来总算搞定了。为防止之后再用到的时候走弯路,也为了帮助有一样须要的人,此处记下了个人整个过程。shell
打开实用工具-钥匙串访问。而后在菜单栏里点击钥匙串访问-证书助理-建立证书来打开向导。第一个步骤比较重要,必需要把名称命名为iPhone Developer,将类型设定为代码签名,将"让我覆盖这些默认值"选中。以后的步骤无需更改,一路点击“肯定”和“继续”来完成这个向导就能够!app
2. 修改XCode配置curl
a)SDKSettings.plistiphone
打开应用程序,找到XCode,右键显示包内容。依次进入/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/目录(对应不一样版本的XCode SDK版本目录有所不一样)。能够看到SDKSettings.plist文件。将它复制到本身平时经常使用的工做目录进行以下修改:工具
在DefaultProperties属性下,找到CODE_SIGNING_REQUIRED字段,属性改成NO;找到ENTITLEMENTS_REQUIRED字段,也将其属性值改成NO。ui
修改完以后将保存后的文件复制到上面目录下覆盖源文件。url
b)Info.plistspa
一样的,打开应用程序,找到XCode,右键显示包内容。依次进入/Contents/Developer/Platforms/iPhoneOS.platform/目录。能够看到Info.plist文件。将它复制到本身平时经常使用的工做目录下进行以下修改:调试
查找到全部的CODE_SIGN_CONTEXT_CLASS字段,将其属性值修改成XCCodeSignContext。code
修改完以后将保存后的文件复制到上面目录下覆盖源文件。
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中出现了问题,若是是手动输入的,请复制个人代码试试。