有时候,我们需要安装不止一个xcode版本,如何安装多个xcode版本,参考我的另一篇博客:https://www.cnblogs.com/zndxall/p/12463744.html,可以完成整个自动切换的过程,但是当集成到jenkins中调用时,就可能切换失败了。

场景:我升级了mac的系统版本,然后jenkins中调用脚本切换xcode版本,结果失败了:

jenkins 构建xcode-select -s 切换xcode版本失败 (切换xcode路径无效)

 

 

 这两个框,上是我输出的当前版本,下是我执行了中间的切换过程,输出的切换后的版本,发现没有从11.3切换到10,切换失败了。

然后分析原因,发现中间的切换过程:“Configured with: ---”那一条的xcode路径依然是xcode11.3的路径,没有变更成xcode10的路径(我的xcode10的路径是:/Applications/Xcode10/Xcode.app),但是再mac机器上执行这个切换过程就没有问题,那应该又是jenkins没有读取到环境变量导致的了。

解决:

   设置DEVELOPER_DIR

   即在切换xcode版本之前,执行export DEVELOPER_DIR切换环境变量,函数如下:

change_xcode_version()
{
    [ "$1" != "11" -a "$1" != "13" ] && echo "input is $1,not 11 or 13" && exit 1
    xcode_v=$1
    echo "xcode version:"
    xcodebuild -version
    [ "$1" == "11" ] && export DEVELOPER_DIR=/Applications/Xcode11/Xcode.app/Contents/Developer
    [ "$1" == "13" ] && export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
    ./expect_xcode $1 #该脚本用于切换xcode版本,执行后可以使用gcc --version验证DEVELOPER_DIR是否是对应xcode版本的路径
    sleep 10
xcodebuild -version #检查是否切换成功,否则异常退出 xcode_ver=`xcodebuild -version |grep Xcode |awk -F " " '{print $2}'` [ "$1" == "11" ] && [ "$xcode_ver" != "11.4" ] && echo "xcode version $xcode_ver, not 11.4" && exit 1 [ "$1" == "13" ] && [ "$xcode_ver" != "13.1" ] && echo "xcode version $xcode_ver, not 13.1" && exit 1 echo "new xcode version:" xcodebuild -version }

其中expect_xcode脚本如下:

#!/usr/bin/expectset timeout 10
set version [lindex $argv 0]
set password "12341234123" #开机密码

if {$version == "13" } { spawn sudo xcode-select -s /Applications/Xcode.app/Contents/Developer } if {$version == "11" } { spawn sudo xcode-select -s /Applications/Xcode11/Xcode.app/Contents/Developer } expect "*assword*" {send "$password\r"} interact

 就在脚本里加了这两条,脚本详细内容,参考文章开头给的设置多版本xcode时的链接:https://www.cnblogs.com/zndxall/p/12463744.html  其中的test.sh

 另外(2020.6.22补充):最佳偶然打开xcode发现,就算我执行了上面的./expect_xcode 10从xcode11切换到xcdoe时,但是xcode工具的版本还是显示xcode11,这就让我一度怀疑之前的切换是否成功,但是我再命令行执行xcodebuild -version,看到的的确是xcode10呀,为啥和xcode的“About Xcode”看到的版本不一样呢

查找资料过程中,看到了以下描述,我的确是切换了:

       打开xcode偏好设置,选择location,显示如下(我的显示的是xcode10)

        jenkins 构建xcode-select -s 切换xcode版本失败 (切换xcode路径无效)

 “About Xcode”在电脑重启后,显示的也是切换后的xcode版本。

相关文章: