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 [ "$ph_repo" == "ios_sdk" -a "$ph_channel" == "LBLelinkKit" ];then #只有这个仓库的这个scheme需要xcode10打包
    if [ "$xcode_ver" != "10.0" ]; then
        echo LBLelinkKit must use xcode 10, you need use root to set as follow steps:
        ./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
else
    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
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
"}  #发送密码
interact

    这样,就可以了 但是我发现,执行了expect_xcode不会马上生效,所以我又再test.sh中sleep了10s 

 

原文地址:https://www.cnblogs.com/zndxall/p/12463744.html