2013-04-18 19 views
7

問題 - 短版:當從命令行創建IPA時,爲什麼我的構建階段腳本不能執行?

爲什麼我的構建phase scripts可以通過命令行創建IPA時執行? 當我運行xcodebuild創建一個IPA預定義的構建階段腳本沒有得到執行。這是爲什麼?


問題 - 冗長的版本:

我有一個方案,我想從命令行出來的創建IPA一個工作區。

這工作正常,除了一件事;我在目標的構建階段中有兩個腳本,用於放置正確的應用程序版本(CFBundleShortVersionString)和正確的svn修訂版號(CFBundleVersion)。這些腳本在從xcode存檔時工作正常,但由於某些原因,它們在從命令行存檔時無法運行。 首先這是爲什麼?

這裏是正在使用的腳本(如果歸檔形式的Xcode) enter image description here enter image description here

歸檔時和命令行怎麼辦?(要點)創建IPA

# Building 
xcodebuild ARCHS="armv7 armv7s" ONLY_ACTIVE_ARCH=NO -workspace MyWorkspace.xcworkspace/ -scheme MyScheme CONFIGURATION_BUILD_DIR=${PROJECT_BUILD_DIR} -configuration Release clean build 

# Creating IPA 
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "${PROJECT_BUILD_DIR}/${APPLICATION_NAME}.app" -o "${IPA_OUTPUT_PATH}/${APPLICATION_NAME}.ipa" 

它的工作原理並創建一個IPA,但沒有任何構建階段腳本得到執行,同時保持版本號和版本號不變。

所有的建議表示讚賞!

UPDATE DUE TO BDASH的回答

而不是使一個乾淨的構建中我做的安裝爲

xcodebuild install ARCHS="armv7 armv7s" ONLY_ACTIVE_ARCH=NO -workspace MyWorkspace.xcworkspace/ -scheme MyScheme CONFIGURATION_BUILD_DIR=${PROJECT_BUILD_DIR} -configuration Release 

預定義的腳本實際上將被執行(可在項目版本號可以看出)在安裝過程中沒有錯誤。但是,創建的IPA將具有〜300字節的大小(而不是〜10MB),並且不能安裝在設備上。

安裝之前構建的應用程序,即

# Building 
xcodebuild clean build ARCHS="armv7 armv7s" ONLY_ACTIVE_ARCH=NO -workspace MyWorkspace.xcworkspace/ -scheme MyScheme CONFIGURATION_BUILD_DIR=${PROJECT_BUILD_DIR} -configuration Release 
# Installing 
xcodebuild install ARCHS="armv7 armv7s" ONLY_ACTIVE_ARCH=NO -workspace MyWorkspace.xcworkspace/ -scheme MyScheme CONFIGURATION_BUILD_DIR=${PROJECT_BUILD_DIR} -configuration Release 

,然後創建IPA會導致與執行版本腳本的IPA和正確的尺寸的,不可能在設備上安裝它。試圖將其放在設備上會顯示錯誤消息
「程序」MyApp「未安裝在您的iPhone設備」我的設備「上,因爲發生了未知錯誤。」

+0

我假設,如果你是從命令行構建的,'xcodebuild'假定你自己正在執行腳本。對我來說就像一個錯誤。 –

+0

你真的最終得到解決方案嗎? – fatuhoku

回答

2

您至少在其中一個腳本階段檢查了「僅在安裝時運行腳本」。只有在使用install操作時,對xcodebuild使用build操作時纔會運行該階段。

+0

從您的答案結果中更新了我的問題。 – Groot

+0

使用'install'操作時,內置產品將安裝到'DSTROOT'配置設置指定的目錄中。除非你在'xcodebuild'命令行覆蓋它,否則它默認爲'/ tmp/ProjectName.dst'。儘管如此,這與你的問題沒有多大關係。 – bdash

+0

感謝您的幫助bdash!我將命令行中的'build'和'install'放在同一個目錄中,覆蓋目錄。你是正確的,這偏離了原來的問題,但事實仍然是,第一個om我的腳本沒有得到執行。 – Groot

相關問題