zoukankan      html  css  js  c++  java
  • 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 

     

  • 相关阅读:
    Linux 磁盘与文件系统管理
    mysql join
    iostat
    解决TIME_WAIT过多问题
    mysql 数据库性能追踪与分析
    CHECKPOINT
    DTRACE -MYSQL
    ORCLE INNODB 博客与 innodb_lru_scan_depth
    innodb 变量
    mysql博客
  • 原文地址:https://www.cnblogs.com/zndxall/p/12463744.html
Copyright © 2011-2022 走看看