1. 程式人生 > >破解Xcode實現無證書真機除錯(支援Xcode4.6)

破解Xcode實現無證書真機除錯(支援Xcode4.6)

本方法是結合網上一些朋友的帖子,然後加上自己的理解寫的,在ML OS X 10.8環境下用XCode4.4/4.4.1 + IOS5.1實測可行!

ps:使用無證書除錯,也意味著你的裝置要越獄!

第一步:製作證書

1)開啟   Finder->應用程式->實用工具 ->  鑰匙串訪問 

2)單擊:"鑰匙串訪問"選擇  "證書" 再選擇"建立證書"過程如下圖:

注意:證書名稱必須填寫為 iPhone Developer

第二步:修改XCode配置檔案

注:如遇到檔案無法解鎖沒有許可權不能修改,可以複製一份出來,修改好之後將原來的替換掉

1)修改SDKsettings.plist檔案

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk

開啟該目錄下的SDKSettings.plist檔案,把CODE_SIGNING_REQUIRED和ENTITLEMENTS_REQUIRED的值改成NO

2)修改Info.plist檔案

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/

用XCode開啟該目錄下的Info.plist檔案,右擊--Add Row,增加兩項:

PROVISIONING_PROFILE_ALLOWED 值為 NO

PROVISIONING_PROFILE_REQUIRED 值為 NO

3)將上面Info.plist檔案中的 "XCiPhoneOSCodeSignContext" 替換成 "XCCodeSignContext"(共3處)

第三:設定gen_entitlements.py指令碼許可權

注:如果你的電腦聯網了,那麼執行1)的命令後會在相應的目錄自動建立iphoneentitlements資料夾及其下的gen_entitlements.py檔案,如執行後沒有生成指定檔案,請重複執行下面的命令或者換第二種方法,兩種生成指令碼檔案的方法任選一種。

1)在終端執行如下命令:

複製程式碼
mkdir /Applications/Xcode.app/Contents/Developer/iphoneentitlements
cd /Applications/Xcode.app/Contents/Developer/iphoneentitlements
sudo chmod 777 gen_entitlements.py
複製程式碼

2)上面的命令執行成功之後,會在/Applications/Xcode.app/Contents/Developer/目錄下生成一個iphoneentitlements資料夾和其下的gen_entitlements.py檔案,如果你的電腦沒有聯網或者不能自動生成相關目錄檔案,那麼需要手動在相應的目錄建立指定的檔案,隨後需要給gen_entitlements.py設定許可權。

gen_entitlements.py指令碼檔案的內容如下:

複製程式碼
#!/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()
複製程式碼

在終端給gen_entitlements.py設定許可權(可能會要你輸入密碼)

sudo chmod 777 /Applications/Xcode.app/Contents/Developer/iphoneentitlements/gen_entitlements.py

第四步:修改專案屬性

1)點選專案圖示,找到"Build Settings"選項下的"Code Sign Identity",將其值全部改為"Don't Code Sign"

2)切換到Build Phases選項,點選右下角的Add Build Phase,然後單擊Add Run Script,然後在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
複製程式碼

第五步:連線裝置(iphone/ipad)

點XCode右上角的Organizer圖示,然後選中你的裝置,在右邊視窗中點選“Use for Development” 即可,此時你的裝置名稱旁邊應該顯示黃色的小燈,重新拔插資料線,Organizer中會出現一個進度條,等這個進度條跑完,小燈就會變成綠色,開發模式已經啟用。

測試真機除錯

建立一個Page-based Application工程,修改Build Settings和Build Phases下面的相關配置(參考第四步)

1)選擇你的裝置

2)隨便拖一個button,然後點選執行(Run)

3)iphone執行效果截圖

參考:http://blog.csdn.net/vrix/article/details/7851377