如何自动安装 Xcode?

2023-12-26

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

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

我这样做是为了:

  1. 记录开发环境。
  2. 加快新开发人员的入职流程。
  3. 遵循一切自动化原则。

全自动 Xcode 安装

First, login to the Apple 开发者下载网站 https://developer.apple.com/downloads/index.action#并获取适用于您的 OSX 版本的 XCode.dmg 版本。您可能想要获取几个版本来支持不同的 OSX 平台(例如:10.10 Yosemite、10.9 Mavericks 等)。将 dmg 上传到您可以访问的文件主机(例如:Amazon S3、Dropbox、您选择的共享托管提供商等...)

改变DOWNLOAD_BASE_URL在以下脚本中,以及renamedmgs 适当地带有版本和内部版本号或将其添加到脚本中 below:

#!/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 许可协议:

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

替代方法

另一种方法是使用我创建的这个苹果脚本 https://gist.github.com/6237049.

To use:

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

您可能还对我在这里的回答感兴趣:如何下载并安装 Xcode 命令行工具 https://apple.stackexchange.com/a/98764/46665.

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何自动安装 Xcode? 的相关文章

  • 使用 c11 标准和 clang 来使用 strcpy_s

    我正在运行 OS X Sierra 并尝试编译一个使用的 c 程序strcpy s 但是我安装的 clang 编译器使用的是 c99 标准 但是据我读到的 https embeddedgurus com barr code 2017 08
  • Xcode 4:删除构建设置中的项目

    在 XCode 4 0 中 有一个新设计的 构建设置 页面 我的问题是 一旦指定设置 我就看不到如何删除它 示例 我已将目标级别的 版本控制系统 更改为 Apple Generic 后来我意识到我应该在项目级别设置它 所以我想删除目标级别设
  • 如何在当前时间添加时间

    我对这个问题很困惑 我想抓取当前时间 而不是根据条件 我想将所需的时间添加到当前时间 例如 current time 06 47 10 or should i hv to change this format to 2011 03 26 0
  • 如何在 Xcode 构建完成时设置警报?

    我是一名懒惰的 iOS 开发人员 在一个大型 iOS 项目中工作 我已经应用了许多优化来减少项目构建时间 但每次构建都需要超过 10 12 分钟 我开始构建 有时当构建完成时 我会在桌子上睡着 有没有什么方法可以将任何语音 铃声警报与 xc
  • 错误 itms-90451“CFBundleIdentifier 冲突错误”

    我上传了我的应用程序的一个版本 弹出此错误 并且我的应用程序的 Google 地图部分没有任何更改 我第一次上传时没有任何问题 只需从您的扩展中删除嵌入框架构建阶段即可 单击目标部分中的扩展 gt 构建阶段 gt 删除嵌入 Pod 框架 见
  • 如何在按下按钮之前停止响应震动?

    我目前正在制作一个 iPhone 应用程序 动画会对轻微的震动做出反应 这是我的代码 static BOOL SJHShaking UIAcceleration last UIAcceleration current double thre
  • 尝试将应用程序提交到应用程序商店时出现通信错误

    我有 Xcode 5 我尝试验证我的应用程序 但发现了这些通信错误 通信故障 请使用诊断模式检查连接性 您需要具有对 TCP 端口 443 的出站访问权限 发生异常 握手期间远程主机关闭连接 调用服务方法时出错 authicateForTr
  • 程序/程序参数无效或丢失

    当我在 Xcode 中运行我的项目时 会出现一条警报 Invalid or missing Program ProgramArguments 我检查了构建设置 但不知道如何修复它 我希望看到一些代码能够更好地提供帮助 但您可以尝试重置模拟器
  • ShareKit 集成期间出现奇怪的编译器错误

    我尝试将 ShareKit 集成到我的项目中 但遇到了问题 当我将 ShareKit 类包含在我的类项目文件夹中时 编译器会出现如下错误 解析问题 未知类型名称 NSUInteger 或 解析问题 未知类型名称 NSString 在 MyP
  • 如何以编程方式将传入的 iPhone 短信静音?

    我目前正在尝试使用AVSystemController根据用户的选择来静音系统噪音的私有框架 我目前正在通过以下方式将电话静音 AVSystemController object setVolumeTo 0 0 forCategory Ri
  • ios 7 - 强制视图布局翻转到 RTL,无需更改语言

    我的应用程序中有一些视图需要能够显示 LTR 和 RTL 内容 但不能同时显示 并且它必须与一般应用程序布局方向无关 意思是 我希望能够告诉特定视图将其布局从 LTR 翻转到 RTL 反之亦然 无需更改系统语言 我对此进行了相当多的研究 但
  • xcode-select -switch 使用什么设置?

    我正在尝试通过以下方式在 Macos Mountain Lion 上安装 Octave sudo port install octave 但是 该命令的结果始终如下 Error Error No valid Xcode installati
  • 如何了解xcode调试中的CPU和内存消耗

    在 Xcode 5 中 有一个新的调试面板 分别以 和 MB 为单位显示 CPU 和内存消耗 我们如何利用这个 我应该尝试保持在以下 CPU 百分比阈值吗 我有时会看到我的应用程序达到 100 或以上 这是否意味着我在应用程序中进行了太多处
  • Xamarin.iOS 目标 iOS 6 SDK

    我们已升级到 XCode 5 和 Xamarin iOS 7 x 但有一个应用程序尚未准备好支持 iOS 7 有没有办法以 iOS 6 0 SDK 为目标 并编译应用程序 使其具有旧的 iOS 6 键盘等 我们尝试更改 iOS Build
  • 为什么 Obj-C 属性默认所有权“分配”而不是“强”

    我正在向旧项目添加 Swift 类 一切进展顺利 直到我尝试向 Swift 类添加属性 生成的标头无法编译 我认为问题是 在生成的代码中 Swift 省略了strong所有权并仅将其声明为nonatomic 这通常应该足够了 因为 prop
  • iPhone——是否可以在 Xcode 调试器中检查 UIView 的框架?

    当调试器在断点处停止时 我在那里找不到任何 UIView 的框架 是否有可能做到这一点 编辑 由于缺乏回应而开始赏金 需要明确的是 我正在寻找一种在不添加额外调试代码的情况下查看框架的方法 另外 如果答案是 不 你不能这样做 赏金将用于解释
  • 保存录制的 AVAudioRecorder 声音文件:现在怎么办? (iOS、Xcode 4)

    在我的应用程序中 我希望用户能够录制一个声音文件并播放它 然后保存该声音文件以供以后使用 我用了本教程 http www techotopia com index php Recording Audio on an iPhone with
  • 构建自动化和 MySQL Workbench 脚本:正向工程师 SQL CREATE SCRIPT

    我目前正在研究自动化软件构建过程 其中包括 MySQL Workbench 中定义的数据库架构 使用 Workbench 的脚本编写功能 我想打开一个 Workbench 文档并将其架构导出为 SQL CREATE 脚本 我想知道是否有一个
  • UITabBarController 为 TabBar 的每个 ViewController 提供不同的 Storyboard 文件

    我的团队正在开发一个具有 UITabBarController 的应用程序 我们正在使用 Storyboard 来开发界面和流程 由于我们是一个团队 所以我们不能将所有流程放在一个故事板中 因为这会导致与 SVN 同步出现问题 所以 解决方
  • iOS:Facebook 登录访问令牌错误:由于模拟器错误,回退到从 NSUserDefaults 加载访问令牌

    根据说明进行配置后 我不断收到此错误 并且无法在我的应用程序上成功使用 Facebook 登录 我在 XCode 8 1 上运行它并使用 iOS 10 1 模拟器 我按照 Facebook iOS SDK 指南中的步骤操作 并将 Faceb

随机推荐

  • Azure AD:属性“邮件”是只读的,无法设置

    我试图在 Azure AD 中创建一个用户 但没有mail归档为用户创建成功 我需要在创建用户时在 Azure AD 中添加电子邮件 ID 我添加了mailjson 中的属性 它说 属性 mail 是只读的 无法设置 我的 C 代码是 va
  • 使用 OpenXml 调用 AddAlternativeFormatImportPart 后文档损坏

    我正在尝试在 docx 文件中创建 AddAlternativeFormatImportPart 以便通过 AltChunk 在文档中引用它 问题是下面的代码导致 docx 文件被 Word 读取为损坏且无法打开 string html s
  • 在 JavaFX 中创建自定义节点并将其添加到布局中

    我是 GUI 编程新手 我需要帮助创建 7 个自定义节点并将它们放入布局中 我不知道应该扩展哪个父类或如何将此类实现为节点 我希望最终的 GUI 看起来像这样 http d2vlcm61l7u1fs cloudfront net media
  • 涉及指针时如何 P/Invoke

    在尝试学习在 C 中使用 PInvoke 时 我有点不确定如何处理涉及简单值类型的指针的各种情况 我从非托管 DLL 导入以下两个函数 public int USB4 Initialize short device public int U
  • 如何用键对 pandas DataFrame 进行排序?

    我正在寻找一种对 pandas DataFrame 进行排序的方法 pd DataFrame sort values不接受关键功能 我可以将其转换为列表并将密钥应用于sorted功能 但是速度会很慢 另一种方式似乎与分类索引有关 我没有固定
  • git hook 来更新对工作目录和裸 git 目录的更改[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我知道如何克隆更改并将更改推送 写入 到生产服务器上的裸存储库 但是这些更改如何反映在生产工作目录中呢 我已经使用其他 SCLM 多年
  • Django - 以 __init__ 形式更改 min_length?

    有什么方法可以更改表单构造函数内字段的 min length 参数吗 那是行不通的 def init self args kwargs super CreateTeamForm self init args kwargs self fiel
  • C++17 std::visit 示例中令人困惑的模板

    当看着std visit cppreference 中的页面 https en cppreference com w cpp utility variant visit https en cppreference com w cpp uti
  • 如何使用curl 发布包含需要转义字符的json 字符串?

    我有一个 shell 脚本 我一直用它来将内容发布到 hipchat 频道 它工作正常 直到我尝试发送包含需要转义的字符的消息 我像这样运行命令 注意其中额外的反斜杠会导致问题 usr local bin hipchatmsg sh my
  • 如何删除旧的和未使用的 Docker 镜像

    当Docker长时间运行时 系统中会存在大量的镜像 如何一次性安全删除所有未使用的 Docker 镜像以释放存储空间 此外 我还想删除几个月前提取的图像 这些图像具有正确的TAG 因此 我不仅仅要求删除未标记的图像 我正在寻找一种方法来删除
  • 通过 .whereArrayContains() 查询时出现意外行为

    我有一个 RecyclerView 它利用 FireaseUI 并通过 时间戳 字段 按顺序 对 轮询 节点中的所有对象进行排序 新片段 onViewCreated Query queryStore FirebaseFirestore ge
  • 从代码隐藏提交表单

    我在 c asp net 应用程序上实现功能时遇到问题 我有一个带有 RadioButtonList 和提交按钮的表单 RadioButtonList 生成于Page Load 从我从数据库检索的对象列表中 如果列表中只有 1 个对象 我想
  • SQL 和 where 子句中的 NULL 值

    所以我有一个简单的查询 返回产品列表 SELECT Model CategoryID FROM Products WHERE Model 010 00749 01 这返回 010 00749 01 00000000 0000 0000 00
  • 如何在 Haskell 中实现二进制数

    我看到了以下教堂数字的数据构造函数 data Nat Zero Succ Nat deriving Show 但这是一元数 我们如何以这种方式在 Haskell 中实现二进制数的数据构造函数 我已经尝试过这个 data Bin Zero O
  • React-Native WebView 嵌入 YouTube 视频在 Android 中没有全屏选项

    我正在尝试将 YouTube 视频嵌入到我的 React Native 应用程序中 它工作正常 但我无法获得这些视频的全屏按钮 功能 这是我的代码
  • 您已经拥有当前的 iOS 开发证书或待处理的证书请求

    我安装了新的 OSX High Siera 问题 所有已安装的证书均已删除 所以我使用本地计算机签名证书创建了新的分发证书 并将其下载并安装到计算机中 当我运行项目或它给出错误 我尝试了 stackOverflow 中找到的所有步骤 但无法
  • C# 中的 JOptionPane 等效项?

    在 Java 中 标准 Swing 库中有一个有用的类 称为 JOptionPane 它提供了一堆预制但可自定义的窗口 用于显示消息和获取 简单 用户输入 我知道有 MessageBox Show 可以在 C 中向用户显示 是 否 取消 类
  • 如何在项目范围内使用 Kotlin ExperimentalUnsignedTypes (AndroidStudio)

    我正在尝试使用 ExperimentalUnsignedTypes在我的 Android Studio 项目中 看来我必须把它放在任何地方 所以我宁愿在项目范围内设置它 文档 https kotlinlang org api latest
  • 如何在 git 中执行“hg mv --after”?

    我在 git 之外重命名了一些文件并对其进行了大量修改 当我跑步时git diff index M name status HEAD我只看到 4 个文件被重命名 移动 而实际上应该更多 我知道我可以使用 Mercurial 记录事后移动hg
  • 如何自动安装 Xcode?

    我正在尝试编写一个 shell 脚本 将我们所有的开发工具和依赖项安装到干净的 OSX 机器上 有谁知道自动化安装 Xcode 的最佳方法吗 我这样做是为了 记录开发环境 加快新开发人员的入职流程 遵循一切自动化原则 全自动 Xcode 安