通过Shell 初始化iOS UI自动化环境

iOS的环境安装相对较为复杂,提供了一键安装脚本。
脚本中包含其它能力,未做删除,故仅交流学习使用

关键字

shell ideviceinstaller wda

#!/usr/bin/env bash
: '
@File   : init.sh
@Desc   : 初始化工程
'

ROOT_PATH=~/cts-runner
CURRENT_PATH=$(cd "$(dirname "$0")" && pwd)
RESOURCE="$CURRENT_PATH"/../Resource/
LIB_LOCATION="/usr/local/lib/node_modules/"

print_success(){
  printf "\x1B[0;32m%s\n\x1B[0m" "$1"
}

print_faile(){
  printf "\x1B[0;31m%s\n\x1B[0m" "$1"
}

check_return() {
  value=$?
    if [ $value -ne 0 ]
    then
        print_faile "$1失败"
        exit 1
    else
        print_success "$1成功"
    fi
}

is_install(){
  if [ -x "$(command -v "$1")" ]; then
    return 0
  fi
  return 1
}

f_install(){
  echo "👨‍💻 正在检查 ==> $1"
  if ! is_install "$1"; then
    echo "😝 正在安装 ==> $1"
    if [ "$3" == 1 ]; then
      pip3 install "$2"
    elif [ "$3" == 2 ]; then
      brew install "$2"
    elif [ "$3" == 3 ]; then
      npm --registry  https://registry.npm.taobao.org install -g "$2"
    else
      echo "$2"
      ($2)
    fi

    if is_install "$1"; then
      print_success "😃 安装成功 ==> $1"
    else
      print_faile "😂 安装失败 ==> $1"
    fi
  else
    print_success "😃 已经安装 ==> $1"
  fi
}

pip_install(){
  f_install "$1" "$2" 1
}

brew_install(){
  f_install "$1" "$2" 2
}

npm_install(){
  f_install "$1" "$2" 3
}

direct_install(){
  f_install "$1" "$2" 4
}

f_easy_install(){
  f_install "$1" easy_install 1
}

_install_brew(){
  # https://juejin.im/post/5c738bacf265da2deb6aaf97
  print_faile "brew 建议使用镜像安装"
  # ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
}

_install_pip(){
  print_faile '安装pip3,请输入电脑登录密码'
  sudo easy_install pip3
}

install_lib_mobile_device(){
    brew uninstall ideviceinstaller
    brew uninstall libimobiledevice
    brew install --HEAD libimobiledevice
    brew link --overwrite libimobiledevice
    brew install --HEAD ideviceinstaller
    brew link --overwrite ideviceinstaller
}

_install_npm_package(){
  if [ ! -e "$LIB_LOCATION$1" ]; then
    echo "安装:$1"
    sudo npm --registry https://registry.npm.taobao.org install -g "$1" > /dev/null
    check_return "安装:$1"
  fi
}

_install_npm_package_tb(){
  # https://developer.aliyun.com/mirror/NPM
  # https://npm.taobao.org/mirrors/npm/
  if [ ! -e "$LIB_LOCATION$1" ]; then
    echo "安装:$1"
    sudo npm --registry http://npm.taobao.org/mirrors/chromedriver install -g "$1" > /dev/null
    check_return "安装:$1"
  fi
}

_install_npm_chromedriver(){
  if [ ! -e "$LIB_LOCATION$1" ]; then
    echo "安装:$1"
    sudo npm --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver install -g chromedriver > /dev/null
    check_return "安装:$1"
  fi
}

install_npm_package(){
  _install_npm_package 'bat-agent'
  _install_npm_package 'mocha'
  _install_npm_package 'mochawesome'
#   _install_npm_package_tb 'chromedriver'
#  _install_npm_chromedriver 'chromedriver'
}

_pip_install(){
  echo "安装 $1"
  cmd="sudo pip3 install $1 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com"
  bash -c "$cmd" > /dev/null
  check_return "安装 $1"
}

pip_install_all(){
  _pip_install -U\ facebook-wda
  if [ -e /Applications/iTerm.app ]; then
    _pip_install imgcat
  fi
}

check_git_repo(){
  file_path=$ROOT_PATH/cts
  echo "$file_path"
  if [ ! -d "$file_path" ]; then
    echo "仓库不存在:$file_path"
    echo "需要初始化仓库"
    echo "请输入本地仓库路径, 没有则直接回车"
    read -r LOCAL_PATH
    if [ -n "$LOCAL_PATH" ]; then
        cd "$ROOT_PATH" || exit
        ln -s "$LOCAL_PATH" cts
        cd - || exit
    else
      echo "请输入github用户名"
      echo "举例: ssh://github 仓库地址"
      read -r NAME
    fi
  fi
}

install_package(){

  if ! is_install "xcodebuild"; then
    print_faile "👨‍💻 请先在AppStore安装xcode,安装完成后重新初始化"
    exit 1
  fi

  direct_install 'pip3' _install_pip
  if ! is_install "brew"; then
    print_faile "brew安装时,建议使用镜像安装, 安装完成后重新执行脚本"
    echo "参考方案:"
    echo "https://juejin.im/post/5c738bacf265da2deb6aaf97"
    exit 1
  fi
  brew_install python3
  # f_install "brew" _install_brew 3
  direct_install 'idevice_id' install_lib_mobile_device
  brew_install 'iproxy' 'usbmuxd'
  brew_install 'carthage' 'carthage'

  pip_install_all

  install_npm_package

}

tar_wda(){
  # ROOT_PATH=~/cts-runnter
  echo "解压WebDriverAgent"
  file_path=$ROOT_PATH/
  if [ ! -d "$file_path" ]; then
    mkdir "$file_path"
  fi

  WDA_PATH="$RESOURCE"WebDriverAgent.zip
  # echo "$WDA_PATH"
  # tar zxvf "$WDA_PATH" -C "$file_path"/ > /dev/null 2>&1
  echo "解压中..."
  unzip -o "$WDA_PATH" -d "$file_path" > /dev/null
  check_return "解压WebDriverAgent"
}

start(){
  # git pull > /dev/null 2>&1
  if [ ! -d "$ROOT_PATH" ]; then
    mkdir "$ROOT_PATH"
  fi
  check_git_repo

  print_faile '安装期间,可能需要输入电脑登录密码'
  install_package

  tar_wda

  echo "安装证书"
  sh "$RESOURCE"/Certificates/install_prov_p12.sh
  check_return "证书安装"

  echo "安装命令行"
  cd "/usr/local/bin" || exit
  rm -rf cts
  # ln -s "$RESOURCE"/cts cts
  cp "$RESOURCE"/cts cts
  check_return "命令行安装"

  if [ -n "$NAME" ]; then
    echo "克隆仓库"
    sh "$CURRENT_PATH"/repo_init.sh "$NAME" "$ROOT_PATH"
    check_return "克隆仓库"
  fi
}

start
print_success "初始化完成"

总结

  1. 希望能帮到你
  2. 祝你好运
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容