1.參數(shù)化構(gòu)建,ios需要兩個版本,一個是企業(yè)版內(nèi)部測試,一個是appstore版本,如下圖所示,打鉤參數(shù)化構(gòu)建,添加Boolean Value的參數(shù),名稱設(shè)置為IS_INHOUSE_VERSION。這樣在execute shell中構(gòu)建的時候可以這樣寫:
if [ true == $IS_INHOUSE_VERSION ]; then
echo "archive inhouse version"
else
echo "archive appstore version"
fi
2.版本號同步,修改程序的小版本號Build版本號,就是在xcodebuild前,修改plist文件,使用PlistBuddy。
#修改ipa的版本號,和jenkins編譯的號碼相同
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BUILD_NUMBER" "${WORKSPACE}/info.plist"
3.xcodebuild
/usr/bin/xcodebuild -scheme buspaipai -workspace helloworld.xcworkspace -configuration Release clean build
/usr/bin/xcrun -sdk iphoneos PackageApplication -v ~/Library/Developer/Xcode/DerivedData/helloworld-guftoidjqmsbfvajothheubre***/Build/Products/Release-iphoneos/helloworld.app -o ${WORKSPACE}/Build/helloworld-appstore.ipa
4.多bundle identifier,不同版本主要有2個地方的設(shè)置,一個是bundle identifier,另外一個是簽名。
4.1. bundle identifier,對于xode7(6是不行的),build setting->packaging中,可以設(shè)置不同的bundle identifier,截圖如下,不過注意如果在general里面設(shè)置后,這里又變成統(tǒng)一的了。
4.2. code signing,build setting->code signing直接設(shè)置,注意設(shè)置id和profile.
5.所有的shell代碼如下:
exportLANG=en_US.UTF-8
#pod install --verbose --no-repo-update
/usr/bin/xcodebuild -version
/usr/bin/xcodebuild -showsdks
/usr/bin/xcodebuild -list -workspace helloworld.xcworkspace
#修改ipa的版本號,和jenkins編譯的號碼相同
/usr/libexec/PlistBuddy -c"Set :CFBundleVersion $BUILD_NUMBER""${WORKSPACE}/helloworld.plist"
#讀取程序大版本號,文件名上顯示
helloworldMainVersion=$(/usr/libexec/PlistBuddy -c"Print :CFBundleShortVersionString""${WORKSPACE}/helloworld.plist")
security unlock-keychain -p "123456" "~/Library/Keychains/login.keychain"
if[true== $IS_INHOUSE_VERSION ]; then
echo"archive inhouse version"
/usr/bin/xcodebuild -scheme helloworld -workspace helloworld.xcworkspace -configuration adhoc clean build
/usr/bin/xcrun -sdk iphoneos PackageApplication -v ~/Library/Developer/Xcode/DerivedData/helloworld-guftoidjqmsbfvajothheubreqzu/Build/Products/adhoc-iphoneos/helloworld.app -o ${WORKSPACE}/Build/helloworld_V${helloworldMainVersion}_B$BUILD_NUMBER_inhouse.ipa
else
echo"archive appstore version"
/usr/bin/xcodebuild -scheme helloworld -workspace helloworld.xcworkspace -configuration Release clean build
/usr/bin/xcrun -sdk iphoneos PackageApplication -v ~/Library/Developer/Xcode/DerivedData/helloworld-guftoidjqmsbfvajothheubreqzu/Build/Products/Release-iphoneos/helloworld.app -o ${WORKSPACE}/Build/helloworld_V${helloworldMainVersion}_B$BUILD_NUMBER_appstore.ipa
fi
6.最后有點遺憾的是路徑名如何簡寫呢,或者如何設(shè)置呢?我寫的那個有點惡心。~/Library/Developer/Xcode/DerivedData/helloworld-guftoidjqmsbfvajothheubreqzu/Build/Products/Release-iphoneos/
--------------------------------持續(xù)更新中-------------------------
7.換了個jenkins服務(wù)器,編譯中發(fā)現(xiàn)了如下錯誤:
/usr/bin/codesign --force --sign ..... .app: User interaction is not allowed.
但是不管是命令行方式還是直接用xcode都能編譯通過。最后的解決辦法是,在/usr/bin/xcodebuild之前加了一句security unlock-keychain -p "password" "~/Library/Keychains/login.keychain".然后編譯通過,通過后就可以把這句話給刪除了,以后編譯都沒有問題了。具體可以參考
http://www.verydemo.com/demo_c134_i6629.html
。