【技能提高】想知道如何免證書打包ipa

要想將程序放到iPhone上調試,並最終發佈ipa用於分享,須要如下幾個步驟:python

1.本身爲本身頒發一個證書用於爲生成的程序簽名;
2.修改工程配置以及Xcode的配置文件和二進制文件以阻止其驗證和簽名;
3.經過自定義生成步驟,用僞造的證書爲應用程序簽名;
4.使用一點小技巧來生成ipa文件;
注意事項:
1.Xcode不要用dmg文件生成的應用,不然沒法修改配置文件。
2.下方的Xcode文件夾須要根據自身Xcode所在文件夾調整。

1、建立證書

打開實用工具-鑰匙串訪問。而後在菜單欄裏點擊鑰匙串訪問-證書助理-建立證書來打開向導。第一個步驟比較重要,必需要把名稱命名爲iPhone Developer,將類型設定爲代碼簽名,將"讓我覆蓋這些默認值"選中。以後的步驟無需更改,一路點擊「肯定」和「繼續」來完成這個嚮導就能夠!圖片

###2、修改Xcode的配置文件app

1.請先將Xcode按Command+Q徹底關閉。
2.修改配置文件:
按照該路徑找到SDKSettings.plist而後進行編輯:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/SDKSettings.plist
將如下兩段中的YES改成NO
<key>CODE_SIGNING_REQUIRED</key>
<string>YES</string>
<key>ENTITLEMENTS_REQUIRED</key>
<string>YES</string>

###3.下面修改另一個文件:curl

按照該路徑找到Info.plist而後進行編輯:
Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Info.plist
將Info.plist中所有的XCiPhoneOSCodeSignContext 修改爲 XCCodeSignContext,他們分別在DefaultProperties分支下、OverrideProperties分支下和RuntimeRequirements分支下。
圖片

###4.添加文件:iphone

鏈接互聯網後在終端執行:
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
若是沒有聯網,能夠在/Applications/Xcode.app/Contents/Developer文件夾下建立一個iphoneentitlements文件夾,而後在該文件夾下手動建立一個gen_entitlements.py文件,並授予其執行權限(命令:sudo),這個文件的內容爲:
#!/usr/bin/env python
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 not DEST.endswith('.xml') and notDEST.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()

###3、修改工程設置(真機調試閃退的,請仔細的看此步驟,這步就是關鍵問題所在)ide

特別注意:本階段以前的修改配置文件、準備腳本等,只須要作一次。但本階段的操做,對每一個須要真機調試的工程都要作一遍。
        這個步驟的主要做用是支持真機調試,若是不作這個步驟,仍然能夠經過步驟5來生成ipa在真機上運行,可是沒法使用Xcode內置的調試器對在真機上運行的程序進行單步跟蹤。若是您的程序在點擊Run真機調試時秒退,請檢查此步驟是否正確完成。
1.禁用Xcode自動的簽名操做
將工程配置中全部的Code Signing選項所有設爲Don't Code Sign,如圖。可能須要先點擊「All」讓這個選項顯示出來。
 
 
 
2.添加自定義的生成後腳本(Xcode5配置請看後文PS部分)
在Build Phases中添加一個Phase,右下角的Add Build Phase,而後單擊Add 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,從新選擇生成目標來測試一下在線調試了!若是是第一次使用該設備調試,請先在Organizer中將設備切換爲開發模式(iPhone右部的小綠點亮)。

###4、生成IPA文件工具

若是個人程序調試好了,怎麼才能發給別人用呢?正常狀況下ipa文件是從Xcode的Organizer中輸出的,可是咱們沒有證書,這樣輸出會產生錯誤。咱們只能用個小技巧來完成這個操做了。
        先將代碼生成爲Release目標,而後打開工程的輸出文件夾,一般狀況下這個目錄是/Users/用戶名/Library/Developer/Xcode/DerivedData/以工程名打頭的文件夾/Build/Products/Release-iphoneos這個目錄下有個xxx.app的文件,就是生成的程序了。把這個xxx.app拖到iTunes中,它會出如今應用程序那個列表中,而後再把它從iTunes的那個列表中拖出來(好比拖到桌面),它就這樣變成xxx.ipa了!把這個.ipa發給別人,你們就能夠跟您一塊兒分享這個程序了。
相關文章
相關標籤/搜索