IOS開發-phonegap及免證書及真機調試

  回頭補記(Last edited at 2015.5.24)。php

第一步:創建項目html

  參見:Xcode5 + phoneGap2.9搭建ios開發環境python

  • 下載phonegap2.9.1,解壓。
  • 命令行,進入目錄:phonegap-2.9.1/lib/ios/bin。執行:./create /Users/[用戶名]/Documents/Workspace/[項目位置] [包名] [項目名]

  執行後會自動建立[項目位置]目錄,在次目錄下生成以[項目名]命名的項目。在Xcode中打開項目:/Users/[用戶名]/Documents/Workspace/[項目位置]/[項目名]ios

  • 注意幾個項目須要修改的屬性 :Bundle display name(桌面軟件顯示的名稱);默認起始頁:config.xml中<content src="index.html" />

第二步:配置項目(for 免證書及真機調試)shell

  參見:IOS 7 Xcode 5 免IDP證書 真機調試app

  1. 僞造簽名證書:iPhone Developer
  2. 修改Xcode 的配置文件
    1. 修改/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/SDKsettings.plist,把CODE_SIGNING_REQUIREDENTITLEMENTS_REQUIRED的值改爲NO
    2. 修改/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Info.plist,右擊--Add Row,增長兩項:

      PROVISIONING_PROFILE_ALLOWED 值爲 NOiphone

      PROVISIONING_PROFILE_REQUIRED 值爲 NOide

    3. 將上面Info.plist文件中的 "XCiPhoneOSCodeSignContext" 替換成"XCCodeSignContext"(共3處)
  3. 生成gen_entitlements.py腳本(見附件一,該文件存放目錄:/Applications/Xcode.app/Contents/Developer/iphoneentitlement,文件屬性777)
  4. 修改項目屬性(每次新建項目都要執行)
    1. Target->BuildSettings->Code Signing:所有改成Don't Code Sign
    2. Project->BuildSettings->Code Signing:所有改成iPhone Developer
    3. Target->Build Phases下點擊菜單Editor->Add Build Phase->Add Run Script Build Phase,增長腳本(見附件二)
  5. 鏈接設備

第三步:打包ipa文件:沒有證書是沒法發佈ipa的,有個簡單的方法能夠實現生成ipa:ui

  先將代碼生成爲Release目標,而後打開工程的輸出文件夾,一般狀況下這個目錄是:
/Users/%用戶名%/Library/Developer/Xcode/DerivedData/%工程名+一串字符%/Build/Products/Release-iphoneos,
這個目錄下有個.app的文件,就是生成的程序了。把這個.app拖到iTunes中,它會出如今應用程序那個列表中,而後再把它從iTunes的那個列表中拖出來(好比拖到桌面),就變成.ipa了。spa

補充說明:

  新裝X230的黑蘋果,Yosemite+XCode6.1,發現原來能夠真機調試的項目,甚至徹底按照上述方法新建一個項目居然沒法進行真機調試了,折騰了好久,甚至用原來的備份恢復系統都不行,最後仍是度娘厲害:http://www.cocoachina.com/bbs/read.php?tid-278833.html,我按照10樓的方法搞定:「原來是項目名+「tests」的targets裏面也要設置Cdoe Signing也要設置don't code sign 」,至於其餘人說的「把咱們證書帳號中的Identifiers、Certificates和Provisioning Profiles中的內容所有刪除了」,沒試 。

 附件一:gen_entitlements.txt:

#!/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()

 附件二:

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
相關文章
相關標籤/搜索