iOS杂谈20—Xcode破解免证书真机调试(包含4.1以上xcode)

博文原地址:http://blog.sina.com.cn/s/blog_5375b91e01010urj.html


1.创建证书

创建证书的过程比较简单,打开实用工具-钥匙串访问。然后在菜单栏里点击钥匙串访问-证书助理-创建证书来打开向导。第一个步骤比较重要,必须要把名称命名为iPhone Developer,将类型设定为代码签名,将"让我覆盖这些默认值"选中。之后的步骤无需更改,一路点击“确定”和“继续”来完成这个向导就可以。
iOS杂谈20—Xcode破解免证书真机调试(包含4.1以上xcode)_第1张图片
 
2.修改Xcode的配置文件和二进制文件

        您应该了解UNIX命令行的基本操作,并了解一种命令行文本编辑器,本文使用的是vim。尽管这里会给出完整的代码,但是关于修改和保存代码的基本操作,不再赘述。下面的操作请先将Xcode按Command+Q完全关闭

①:修改配置文件

   进入目录并备份原文件(4.1和4.2在这里主要的差别是SDK的目录名不同)

(Xcode4.1请执行)  cd /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/

(Xcode4.2请执行)  cd /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/

(Xcode4.3请执行)   cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk

(Xcode4.3.2请执行)cd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk

(Xcode4.5请执行)   cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk

(Xcode4.6请执行) cd/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk

PS:编辑方式可用终端或者文本编辑器

因为4.3之后的XCODE已经打包成.APP了,所有的文件全在这个包里,路径:/Applications/Xcode.app 。怎么修改里面的SDKSettings.plist 和 Info.plist呢?

可以在applications目录下右键点Xcode.app,然后选择---显示包内容

在包里面的plist路径跟4.2 一样

iOS杂谈20—Xcode破解免证书真机调试(包含4.1以上xcode)_第2张图片

PS :终端 TERMINAL:打开plist文件之后按 i 键进入插入模式<可理解为编辑模式>,然后按照你的需要对该文件进行编辑,编辑完成之后按 ESC 键退出插入模式,之后按 :wq+回车保存退出,记得英文的冒号也是要输入的哦。

备份:
sudo cp SDKSettings.plist SDKSettings.plist.orig

进行编辑
sudo vim SDKSettings.plist
将以下两段中的YES改为NO
<key>CODE_SIGNING_REQUIRED</key>
<string>YES</string>
<key>ENTITLEMENTS_REQUIRED</key>
<string>YES</string>
 
   下面修改另外一个文件----进入目录并备份原文件
(Xcode4.1/4.2请执行)cd /Developer/Platforms/iPhoneOS.platform/

(Xcode4.3/4.4/4.5/4.6请执行)cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform

备份:
sudo cp Info.plist Info.plist.orig

进行编辑:
sudo vi Info.plist
PS:这时用终端打开的info.plist已经不是XML格式,即不可用terminal或文本编辑器来进行编辑,将plist改成plist.orig之后copy到桌面<选中文件回车即可重命名>,如果不行的话试试拖到文档里面,文件的移动和重命名都需要输入密码,使用默认的XCODE进行修改,改完后.plist的文件拖会原来目录。
 
Xcode 4.5、4.6也有三处,分别在DefaultProperties分支下、RuntimeRequirements分支下和OverrideProperties分支下。
       将所有“XCiPhoneOSCodeSignContext”替换为“XCCodeSignContext” PS:可按command+f 搜索 XCiPhoneOSCodeSignContext 来实现快速修改

②:二进制补丁

#在桌面上建立script这个脚本
cd ~/Desktop
vim script
#(Xcode 4.1执行)在编辑器中输入如下内容

#!/bin/bash
cd /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Plug-ins/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 working iPhoneOS\ Build\ System\ Support
chmod a+x iPhoneOS\ Build\ System\ Support

#(Xcode 4.2执行)在编辑器中输入如下内容

#!/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 working iPhoneOS\ Build\ System\ Support
chmod a+x iPhoneOS\ Build\ System\ Support

保存并退出。(4.1和4.2在这里的区别也是目录名不同,就是代码中绿色的部分。4.1是Plug-ins而4.2是PrivatePlugIns
授予这个脚本执行权限并执行它

执行:
chmod 777 script
./script


正常的话应该输出(具体的数字可能有差别)
231+1 records in
231+1 records out
115904 bytes transferred in 0.001738 secs (66694555 bytes/sec)

PS:仔细留意,成功的话会临时产生一个名为 WOKING的文件,随后自动删除
 
PS:  (Xcode 4.3注意)在Xcode 4.3版本中,我没有找到iPhoneOS Build System Support.xcplugin这个插件,因此我跳过了这个步骤,并且最终也成功的进行了联机调试。因此我个人认为Xcode 4.3没有必要执行“二进制补丁”这一步骤。请各位朋友测试~!

PS:(Xcode 4.3.2/4.4/4.5/4.6注意)在Xcode 4.3.2版本中,我们可以找到iPhoneOS Build System Support.xcplugin,但我没有修改它,仍然可以进行联机调试。这个修改步骤是从Xcode 3.X中继承过来的,我们有理由猜测,在Xcode 4.x版本中,已经不需要修改这个文件了。

至此,对SDK中配置文件和二进制文件的修改就完成了
 
3.准备自定义的生成后脚本

连接互联网后执行

PS:Xcode 4.1/4.2执行

mkdir /Developer/iphoneentitlements401
cd /Developer/iphoneentitlements401
curl -O http://www.alexwhittemore.com/iphone/gen_entitlements.txt
mv gen_entitlements.txt gen_entitlements.py
chmod 777 gen_entitlements.py
 
PS:Xcode 4.3/4.4/4.5/4.6执行

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
 
假如有机会用到旧版XCODE,(4.2以前版本)需要执行两段代码,因为旧版xcode需要相应的py文件支持!
如果您在执行这段代码时遇到Permission denied提示的话,请将相应的语句前面加上sudo以获取超级权限。
 
如果您已经联网,则请直接转到步骤4,如果您没有联网,那么请手动创建/Developer/iphoneentitlements401/gen_entitlements.py并授予其执行权限,这个文件的内容为

(4.3/4.5/4.6) /Applications/Xcode.app/Contents/Developer/iphoneentitlements

#!/usr/bin/env python

import sys
import struct

if len(sys.argv) != 3:
print "Usage: %s appname dest_file.xcent" % sys.argv[0]
sys.exit(-1)

APPNAME = sys.argv[1]
DEST = sys.argv[2]

if not DEST.endswith('.xml') and not DEST.endswith('.xcent'):
print "Dest must be .xml (for ldid) or .xcent (for codesign)"
sys.exit(-1)

entitlements = """
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>application-identifier</key>
    <string>%s</string>
    <key>get-task-allow</key>
    <true/>
</dict>
</plist>
""" % APPNAME

f = open(DEST,'w')
if DEST.endswith('.xcent'):
f.write("\xfa\xde\x71\x71")
f.write(struct.pack('>L', len(entitlements) + 8))
f.write(entitlements)
f.close()
 
如果执行代码无论如何都无法通过的话,请执行手动创建,结果是一样的。py文件可以在桌面建立之后再移动至新创建的iphoneentitlements文件夹里。缺少py文件会导致调试错误,提示 .../Applications/Xcode.app/Contents/Developer/iphoneentitlements do not exit.
 
同理,iphoneentitlements401 文件夹位于/user/Developer/ 目录下,没有的话需要自行创建,如果无法查看文件,请用
显示隐藏文件:
defaults write com.apple.finder AppleShowAllFiles -bool true
KillAll Finder

恢复隐藏
defaults write com.apple.finder AppleShowAllFiles -bool false
KillAll Finder
 
4.修改工程设置

特别注意:本阶段之前的修改配置文件、准备脚本等,只需要做一次。但本阶段的操作,对每个需要真机调试的工程都要做一遍。
这个步骤的主要作用是支持真机调试,如果不做这个步骤,仍然可以通过步骤5来生成ipa在真机上运行,但是无法使用Xcode内置的调试器对在真机上运行的程序进行单步跟踪。如果您的程序在点击Run真机调试时秒退,请检查此步骤是否正确完成。

 (1)禁用Xcode自动的签名操作
将工程配置中所有的Code Signing选项全部设为Don't Code Sign,如图。可能需要先点击“All”让这个选项显示出来

 
(2)添加自定义的生成后脚本

在Build Phases中添加一个Phase,右下角的Add Build Phase,然后单击Add Run Script,输入以下脚本
(对于Xcode 4.1/4.2)

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
 
(对于Xcode 4.3/4.4/4.5/4.6)

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

如图所示:
iOS杂谈20—Xcode破解免证书真机调试(包含4.1以上xcode)_第3张图片
 
至此配置全部完成,下面就可以插上iPhone,重新选择生成目标来测试一下在线调试了!如果是第一次使用该设备调试,请先在Organizer中将设备切换为开发模式。
 



你可能感兴趣的:(xcode,xcode,调试,4.1以上)