2015年2月3日 星期二

Xcode直接編譯app到實體裝置


一般開發ios app需要將app在實體裝置上測試的話,需要花99鎂購買apple developer但是只有一年時效,很多功能在模擬器上能夠正常執行但不表示實體裝置能夠正常執行,所以這篇就是要給不想花錢的人囉。



好了,老話一句在安裝之前要確定已經安裝Command Line Tools和簽署Xcode的license(Xcode 6.1以下還要安裝Command Line Tools),詳細在這
安裝Xcode後安裝Command Line Tools
安裝Xcode後簽署license

這是目前我的環境
Mac OSX: 10.10.1
Xcode: 6.1.1
iOS: 8.1.1(越獄且需安裝Appsync)

ios8的Appsync需安裝「AppSync Unified」,找不到的話加入
http://cydia.angelxwind.net/



第一步是最重要的,常常這步一個出錯就整個失敗了

首先要建立假的憑證,首先打開「鑰匙圈存取」先檢查有沒有名為「iPhone Developer」,有的話備份起來或是刪除

接著來製作假憑證,「鑰匙圈存取」->「憑證輔助程式」->「製作憑證」

名稱一定要為「iPhone Developer」,憑證類型為「代碼簽名」,打勾「覆蓋預設值」

天數開心就好囉

就一路按繼續

最後憑證完成長這樣


接著需要先修改Xcode的文件,先打開終端機切換到目前ios的SDK資料夾
cd `xcode-select -print-path`/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk

然後要修改的文件先做備份
sudo cp SDKSettings.plist SDKSettings.plist.copy

接著打開這個資料夾
open .

將「SDKSettings.plist」複製到桌面再打開修改


然後將「ENTITLEMENTS_REQUIRED」和「CODE_SIGNING_REQUIRED」修改成「NO」


 修改好後,再從桌面拉回去SDK資料夾並覆蓋


接著修改下一個,切換到這個目錄
cd `xcode-select -print-path`/Platforms/iPhoneOS.platform

然後備份文件
sudo cp Info.plist Info.plist.copy

接著一樣打開這個資料夾
open .

這次將「Info.plist」複製到桌面再修改

這次修改在「DefaultProperties」、「RuntimeRequirements」和「OverrideProperties」底下的「XCiPhoneOSCodeSignContext」改成「XCCodeSignContext」


完成後,一樣複製回去覆蓋

接著打開終端機,這些指令「一步一步」輸入
sudo mkdir `xcode-select -print-path`/iphoneentitlements
cd `xcode-select -print-path`/iphoneentitlements
sudo curl -O http://www.alexwhittemore.com/iphone/gen_entitlements.txt
sudo mv gen_entitlements.txt gen_entitlements.py
sudo chmod 777 gen_entitlements.py


這樣就完成一半囉


接下來的步驟是每次新建專案後都要做的事,打開Xcode的專案設定到「Build Settings」,找到「Code Signing」,全部修改成「Don't Code Sign」

接著左邊中間的「TARGETS」切換到「Tests」Project,一樣修改成「Don't Code Sign」

接著再切換回原本Project的「Build Phases」,然後「New Run Script Phase」


將以下複製上去
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



然後編譯目標選好,編譯下去就OK囉

OK囉


這次其實是我第三次重新試過才成功的,第一步的製作憑證最重要,如果製作方法失敗即使編譯上實體裝置,也無法開啟app


參考
Xcode 5 + iOS 7免證書(iDP)真機調試與生成IPA全攻略: 'http://kuangqi.me/ios/ios-development-without-idp/'



Update for Xcode7:
修改SDKSettings.plist時,增加AD_HOC_CODE_SIGNING_ALLOWED改成YES
修改Info.plist時,沒有RuntimeRequirements這項,所以略過
Don't code sign改選Ad Hoc Code Sign

沒有留言:

張貼留言