2015/02/04

Xcode 6.1.1 免簽證將App安裝到IOS 8.1.2實機

昨天看了許多免簽證的方法,每個方法十分的好,有得步驟寫得很簡潔有力
但詳細細節還是與現實有些出入,我就打算自己寫一篇比較歸納出來的心得,哪天找不到資源時,勉強可以用上

開始前,得先注意以下幾點

  • 手機JB過了?還沒就請參考『iPhone 5 IOS 8.1.2 使用太極v1.2.0一鍵JB
  • JB後有沒有Cydia軟體?沒有就去安裝吧
  • 擁有一台白蘋果或黑蘋果的電腦了嗎?還沒就快去想辦法吧
  • Xcode下載好了沒?還沒就快去App Store或Apple Developer下載
  • 一顆興奮的心準備好了沒?還沒就吃顆興奮劑吧 :)


先至手機,開啟Cydia軟體做更新
接著按下編輯/加入來源『cydia.angelxwind.net』






等待更新完成後,會出現新的來源『Karen's Pineapple Repo』,點擊進去


點到所有套件

找到AppSync Unified,並進行安裝


安裝完畢後重新啟動




網路上有其他的假來源,請小心不要用到啊..
http://cydia.angelxwind.net/



手機在安裝同時先回到電腦上先將Xcode的Project都關閉,並對Xcode點右鍵/Show Package Contents




進入 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
將『OverrideProperties/CODE_SIGN_CONTEXT_CLASS』以及『RuntimeRequirements/Classes/Item 0』和『DefaultProperties/CODE_SIGN_CONTEXT_CLASS』值改為『XCCodeSignContext』,並存檔



接著進入iPhoneOS.platform底下的Developer/SDKs/iPhoneOS.sdk 或是 Developer/SDKs/iPhoneOS8.1.sdk
Developer/SDKs/iPhoneOS8.1.sdk是連接Developer/SDKs/iPhoneOS.sdk

iPhoneOS.sdk完整路徑:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk
iPhoneOS8.1.sdk完整路徑:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk

修改SDKSettings.plist,將ENTITLEMENTS_REQUIRED與CODE_SIGNING_REQUIRED改為NO,並存檔




接著開啟Terminal,輸入
sudo mkdir /Applications/Xcode.app/Contents/Developer/iphoneentitlements
cd /Applications/Xcode.app/Contents/Developer/iphoneentitlements
sudo curl -O http://www.alexwhittemore.com/iphone/gen_entitlements.txt
sudo mv gen_entitlements.txt 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()

接著我們開始辦憑證,找到Application/Other,點擊Keychain Access

接著點選Certificate Assistant/Create a Certificate



Name:你可以任意打沒關係,不用照網路上打iPhone Developer
Identity Type:選擇Self Signed Root
Certificate Type:選擇Code Signing
Let me override defaults:可點可不點,點了會覆蓋相同Name的簽證以及相關的應用



輸入完畢後按下Create

就完成了一張憑證,接著滑下去找到Trust


將第一個選項改為Always Trust即可,讓該憑證被信任






以下步驟再開新專案都得重複
開啟Xcode,開一個專案,並停留在當前畫面,找到『Project/Project name/Build Settings/Code Signing/Code Signing Identity』,選擇『iPhone Developer』


再選到『Targets/project name/Info/Custom iOS Target Properties/Bundle identifier』改為『my.company.${PROJECT_NAME}』




『Targets/project name/Build Settings/Code Signing/Code Signing Identity』選擇『Don't Code Sign』




『Targets/project name/Build Phases/+/New Run Script Phases』,並將Run Script區塊展開







將以下程式碼貼到該Command,該程式碼請注意如果你的憑證不是叫做iPhone Developer
請將該程式碼內的iPhone Developer改為憑證的名稱即可,不一定要照網路上所說的一定要是iPhone Developer


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



接著再來修改『Targets/{projectname}Tests/Code Signing/Code Signing Identity』選擇『Don't Code Sign』




這樣就大功告成了,接著執行程式看看,順利執行就代表設定都沒有錯誤

執行時,會詢問是否要使用該組Key
選擇Allow之後還會再出現該視窗
選擇Always Allow之後就不會再出現該視窗


接著就可以看到自己的App在手機上執行摟


發生錯誤可能有以下幾點:
沒有安裝AppSync的關係
沒有對應到正確的憑證
沒有正確將plist


參考資料:
http://blog.csdn.net/aboojaner/article/details/40392159
http://blog.udn.com/x20030312/19481550
http://www.grobinson.me/developing-and-debugging-my-own-apps-on-jailbroken-ios8-1-using-xcode-6-1-without-paying-apple/
http://www.cnblogs.com/liuliuliu/p/4030524.html
http://www.xker.com/page/e2014/1028/140722.html