xcode - 如何自动安装 Xcode?

标签 xcode build-automation

我正在尝试编写一个 shell 脚本,它将我们所有的开发工具和依赖项安装到干净的 OSX 机器上。

有人知道自动安装 Xcode 的最佳方法吗?

我这样做是为了:

  • 记录开发环境。
  • 加快新开发人员的入职流程。
  • 遵循自动化一切原则。
  • 最佳答案

    全自动 XCode 安装

    首先, 登录 Apple Developer Downloads Site 并获取适用于您的 OSX 版本的 XCode.dmg 版本。您可能想要获取几个版本来支持不同的 OSX 平台(例如:10.10 Yosemite、10.9 Mavericks 等)。将 dmg 上传到您可以访问的文件主机(例如:Amazon S3、Dropbox、您选择的共享主机提供商等...)

    在以下脚本中更改 DOWNLOAD_BASE_URL ,并 使用版本和内部版本号适本地重命名 dmgs 或 将其添加到下面的脚本 中:

    #!/bin/bash
    DOWNLOAD_BASE_URL=http://example.com/path/to/xcode/dmgs/
    
    ## Figure out OSX version (source: https://www.opscode.com/chef/install.sh)
    function detect_platform_version() {
      # Matching the tab-space with sed is error-prone
      platform_version=$(sw_vers | awk '/^ProductVersion:/ { print $2 }')
    
      major_version=$(echo $platform_version | cut -d. -f1,2)
    
      # x86_64 Apple hardware often runs 32-bit kernels (see OHAI-63)
      x86_64=$(sysctl -n hw.optional.x86_64)
      if [ $x86_64 -eq 1 ]; then
        machine="x86_64"
      fi
    }
    
    detect_platform_version
    
    # Determine which XCode version to use based on platform version
    case $platform_version in
      "10.10") XCODE_DMG='XCode-6.1.1-6A2008a.dmg' ;;
      "10.9")  XCODE_DMG='XCode-5.0.2-5A3005.dmg'  ;;
      *)       XCODE_DMG='XCode-5.0.1-5A2053.dmg'  ;;
    esac
    
    # Bootstrap XCode from dmg
    if [ ! -d "/Applications/Xcode.app" ]; then
      echo "INFO: XCode.app not found. Installing XCode..."
      if [ ! -e "$XCODE_DMG" ]; then
        curl -L -O "${DOWNLOAD_BASE_URL}/${XCODE_DMG}"
      fi
    
      hdiutil attach "$XCODE_DMG"
      export __CFPREFERENCES_AVOID_DAEMON=1
      sudo installer -pkg '/Volumes/XCode/XCode.pkg' -target /
      hdiutil detach '/Volumes/XCode'
    fi
    

    您可能有兴趣安装 XCode 命令行工具,并绕过 XCode 许可协议(protocol):
    curl -Ls https://gist.github.com/trinitronx/6217746/raw/58456d6675e437cebbf771c60b6005b4491a0980/xcode-cli-tools.sh | sudo bash
    
    # We need to accept the xcodebuild license agreement before building anything works
    # Silly Apple...
    if [ -x "$(which expect)" ]; then
      echo "INFO: GNU expect found! By using this script, you automatically accept the XCode License agreement found here: http://www.apple.com/legal/sla/docs/xcode.pdf"
      expect ./bootstrap-scripts/accept-xcodebuild-license.exp
    else
      echo -e "\x1b[31;1mERROR:\x1b[0m Could not find expect utility (is '$(which expect)' executable?)"
      echo -e "\x1b[31;1mWarning:\x1b[0m You have not agreed to the Xcode license.\nBuilds will fail! Agree to the license by opening Xcode.app or running:\n
        xcodebuild -license\n\nOR for system-wide acceptance\n
        sudo xcodebuild -license"
      exit 1
    fi
    

    替代方法

    另一种方法是使用 this applescript I created

    要使用:
    git clone https://gist.github.com/6237049.git
    cd 6237049/
    # Edit the script with AppleScript Editor to replace your APPLE ID and PASSWORD
    osascript Install_XCode.applescript
    

    您可能也对我的回答感兴趣:How download and Install Command Line Tools for Xcode

    我会推荐其他方法而不是 applescript 方法。 applescript 依赖于 UI 元素层次结构,对于 OSX 上的 App Store 应用程序的 future 版本可能并不总是保持不变。它对我来说似乎很脆弱。通过 dmg 通过命令行安装 XCode 可能是最可靠的方式。

    关于xcode - 如何自动安装 Xcode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8649874/

    相关文章:

    objective-c - 生成的自定义托管对象类未构建

    ios - 无法将表达式的类型 'Void' 转换为类型 'CFAllocator!'

    ios - 检查对象是否存在于 NSDictionary 的 NSMutableArray 中

    git - 在 Visual Studio Online 中使用自定义 NuGet 源

    如果目标位置不存在文件,Ant 任务将复制该文件

    asp.net - MVC 3 部署自动化

    windows - 批量设置 .exe 和 .dll 文件的版本号

    android - 为 Android 发布登录 gradle.properties

    ios - 词法或预处理器问题。 - "File not found."

    ios - 无法在 Xcode 中添加新的 iOS 设备进行开发