Xcode5算是比较新的版本,不太敢冒然尝试无证书调试,再加上自己也是新手,Mac系统都是刚刚接触,等了好久终于网上有关于Xcode5的免证书调试文章了,纠结了几天,决定试水,将个人经验纪录如下,以便自己日后查询,也方便有需求的朋友。
主要内容在下面这个博友中有介绍:
http://blog.youkuaiyun.com/hany3000/article/details/12878483
1. 其中证书部门,按照上述过程制作的。
2. XCode配置部分,也按上述过程修改。
3. gen_entitlements.py部门,我弄了很久,主要是按照terminal的命令执行,不出现gen_entitlements.txt,就更谈不上gen_entitlements.py了。我的最终解决方案是,进入Windows,(寒~~我装的是虚拟机)在与Mac系统的共享盘里新建gen_entitlements.txt文件,(因为Mac系统,不知道如何新建txt文件,惭愧~~)然后将其内容改为如下的内容:(上述文章里有)。然后,将此文件拷贝到Mac系统的 /Applications/Xcode.app/Contents/Developer/iphoneentitlements 里面,(iphoneentitlements文件夹已经用terminal创建了)再在terminal里面执行修改扩展名的命令:
sudo mv gen_entitlements.txt gen_entitlements.py sudo chmod 777 gen_entitlements.py
sudo chmod 777 /Applications/Xcode.app/Contents/Developer/iphoneentitlements/gen_entitlements.py
因为不知道自己是否成功,就反复执行了许多次,需要输入密码。
--------------以下是gen_entitlements.txt 的内容---------------------------
#!/usr/bin/envpython
import sys
import struct
if len(sys.argv)!= 3:
print "Usage: %s appnamedest_file.xcent" % sys.argv[0]
sys.exit(-1)
APPNAME =sys.argv[1]
DEST =sys.argv[2]
if notDEST.endswith('.xml') and not DEST.endswith('.xcent'):
print "Dest must be .xml (for ldid) or.xcent (for codesign)"
sys.exit(-1)
entitlements ="""
<?xmlversion="1.0" encoding="UTF-8"?>
<!DOCTYPEplist PUBLIC "-//Apple//DTD PLIST 1.0//EN""http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plistversion="1.0">
<dict>
<key>application-identifier</key>
<string>%s</string>
<key>get-task-allow</key>
<true/>
</dict>
</plist>
"""% APPNAME
f = open(DEST,'w')
ifDEST.endswith('.xcent'):
f.write("\xfa\xde\x71\x71")
f.write(struct.pack('>L',len(entitlements) + 8))
f.write(entitlements)
f.close()
-----------------------以上是gen_entitlements.txt的内容---------------------
4. 修改项目属性(出问题的地方)
我是按照上述博友的步骤修改的,ipod(当然已越狱)也连上了,(很激动~~)把之前做的小程序放上来,build 没问题,但运行会出现
failed to get the task for process xxxxx 的错误,就退出来了,但是手动点击ipod上图标还可以运行,也会发生闪退,总之就是不稳定,我觉得韩式有问题,找了半天,发现下列方案:
http://blog.youkuaiyun.com/sxbkelly/article/details/8909878
--------------------------------------------------
主要是有如下不同的内容:
如果是 xcode4.5以前版本跳过第4步操作第5步否则执行第4步跳过第5步
说的有点饶,其实是xcode4.5之前的版本直接第5步,之后的版本第4步,跳过第5步
4、在项目中添加一个Entitlements.plist文件,设置允许调试。
注:若不操作该步可能连接真机调试的时候还会出现一个错误:failed to get the task for process xxx
a.New->File->iOS->Resouce->Property List
将文件名设为Entitlements.plist。
b.打开Entitlements.plist文件
添加一个属性Can be debugged,并将属性值设为YES。
c.修改targets的build setting属性值。
将Code Signing Entitlements 那项得值改为刚刚新建得"Entitlements.plist"
将Code Signing Identity中Any iOS SDK设置为iphone Developer,其他则改为Don't Code Sign.(此处要和证书里面那个名字要吻合)
5、将工程配置中所有的Code Signing选项全部设为Don't Code Sign.
----------------------------------------------------------------
还有个需要注意的地方,在第一个连接里 http://blog.youkuaiyun.com/hany3000/article/details/12878483
里面关于 “在Build Phases 选项中,点击右下角的 Add Build Phase,选择类型为Run Script。”里面的script,上面的那个似乎有问题,build的时候会出错,用下面的那个:
-----------------------------Run Script--------------------------
export
CODESIGN_ALLOCATE=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
if [ "${PLATFORM_NAME}" =="iphoneos" ] || [ "${PLATFORM_NAME}" == "ipados"]; 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
-----------------------------Run Script--------------------------
最后结果:新建xcode5项目,按照上述步骤设置好以后,运行,没有报错,但是我之前做的那个稍微大点的程序还是会闪退,原因不明(UITableView里的原始数据都没有出来,这些数据我是用了NSData归档的,不知道是不是这个原因?是不是在run的时候没有我的archive的文件拷贝到ipod上?所有没有找到文件就出错退出了,而且,关键是 failed to get the task for process 45869 的问题一样存在),本来就打算重写这个程序的。希望重写后没有问题。