要想將程序放到iPhone上調試,並最終發佈ipa用於分享,須要如下幾個步驟:python
1.本身爲本身頒發一個證書用於爲生成的程序簽名; 2.修改工程配置以及Xcode的配置文件和二進制文件以阻止其驗證和簽名; 3.經過自定義生成步驟,用僞造的證書爲應用程序簽名; 4.使用一點小技巧來生成ipa文件; 注意事項: 1.Xcode不要用dmg文件生成的應用,不然沒法修改配置文件。 2.下方的Xcode文件夾須要根據自身Xcode所在文件夾調整。
打開實用工具-鑰匙串訪問。而後在菜單欄裏點擊鑰匙串訪問-證書助理-建立證書來打開向導。第一個步驟比較重要,必需要把名稱命名爲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發給別人,你們就能夠跟您一塊兒分享這個程序了。