Xcode安裝多個版本並自動切換版本


因為業務需要,我們有時候需要安裝多個xcode版本,新的版本,老的版本。新的版本我們以xcode11為例子,老的版本,我們以xcode10為例子,我mac上已經安裝了xcode11了,開發讓在安裝一個xcode10 打包ios sdk。

下載老版本到: https://developer.apple.com/download/more/    下載xcode10版本。

1.下載以后 我們看到是一個xcode10.xip文件,這是我第一次看到xip后綴的文件,咋裝!  原來雙擊一下就可以了,會解壓出一個xcode.app 的文件夾。

2.在/Applications目錄下新建一個文件夾Xcode10,將剛才第一步中得到的xcode.app移動到/Applications/Xcode10/目錄下。

3.顯示當前使用的xcode :   xcode-select -p ,顯示如下:

      

 

 

 4.切換版本:sudo xcode-select -s /Applications/Xcode10/Xcode.app/Contents/Developer

5.顯示當前版本:

    用幾種方式,如下:

  (1)查看生效路徑: gcc --version ,如下(最后那條):

    

 

 

 (2)xcode-select -p    如下:

     

 

(3)查看xcode版本號: xcodebuild -version

      

 

 

 要再切回xcode11 也是一樣的辦法,這樣就可以切來切去了。

但是,還有個問題,jenkins構建,我們基本都是要求自動化,現在就是一個ios scheme需要xcode10的版本,其他還是需要用最新的版本,我總不能每次再構建之前都手動操作上面的過程吧,這樣是不合理的,最好能敲命令就可以,

上面這些步驟中需要輸入密碼的是:sudo xcode-select -s /Applications/Xcode10/Xcode.app/Contents/Developer  必須以root權限執行。那么怎么自動切換與檢測版本呢?

 可以使用expect來實現自動輸入密碼。

編輯兩個文件,一個test.sh, 一個expect_xcode,放在相同目錄下。expect_xcode用來切換xcode版本,test.sh 用來檢測是否成功。

test.sh 內容如下:

#!bin/sh
echo mac os version:
sw_vers
echo xcode version:
xcodebuild -version
xcode_ver=`xcodebuild -version |grep Xcode |awk -F " " '{print $2}'`
echo xcode version:$xcode_ver
if [ "$xcode_ver" != "10.0" ]; then
        ./expect_xcode 10 #切換到xcode10
        sleep 10
        gcc --version
        xcodebuild -version
        xcode_ver=`xcodebuild -version |grep Xcode |awk -F " " '{print $2}'` #查看是否切換成功
        [ "$xcode_ver" != "10.0" ] && echo xcode version $xcode_version, not 10 && exit 1
    fi

    if [ "$xcode_ver" == "10.0" ]; then
        echo others not use xcode 10, you need use root to set as follow steps:
        ./expect_xcode #切換為xcode11
        sleep 10
        gcc --version
        xcodebuild -version
        xcode_ver=`xcodebuild -version |grep Xcode |awk -F " " '{print $2}'`
[ "$xcode_ver" == "10.0" ] && echo xcode version $xcode_version, not newest && exit 1
fi
echo
new xcode version:
xcodebuild
-version

expect_xcode內容如下:

#!/usr/bin/expect
set timeout 10
set version [lindex $argv 0]
set password "123456"
if {$version == "10" } {  #如何輸入是10表示要切換成xcode10
    spawn sudo xcode-select -s /Applications/Xcode10/Xcode.app/Contents/Developer
} else {
    spawn sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
}
expect "*assword*" {send "$password\r"}  #發送密碼
interact

 

    這樣,就可以了 但是我發現,執行了expect_xcode不會馬上生效,所以我又再test.sh中sleep了10s 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM