Skia CI 资产 ios-dev-image-14.4:iOS 开发镜像的创建与更新指南
2026/9/23 11:10:07 网站建设 项目流程
  • 图形学

【免费下载链接】skia

Skia is a complete 2D graphic library for drawing Text, Geometries, and Images. See documentation for contribution instructions.

项目地址:https://gitcode.com/gh_mirrors/ski/skia
点击查看免费下载

导读

本文介绍 Skia 持续集成(CI)体系中ios-dev-image-14.4这一资产的用途与维护方法。该资产承载 Xcode 随附的 iOS 14.4 设备开发镜像(Developer Disk Image),供 CI 机器在真机测试前将镜像挂载到 iPhone 上。读完本文,你将掌握该资产的创建/更新命令、前置条件,以及它从上传、存储到被测试任务消费的完整链路。

资产是什么:Skia CI 的 Assets 体系

Skia 的测试与编译机器人(bots)需要大量工具链与系统镜像,统一托管在infra/bots/assets/目录下,通过版本号存储在 Google Cloud Storage 中。正如 infra/bots/assets/README.md 所述:

This directory contains tooling for managing assets used by the bots. The primary entry point is assets.py, which allows a user to add, remove, upload, and download assets. Assets are stored in Google Storage, named for their version number.

每个资产占一个子目录,标准结构为:

  • VERSION:当前资产版本号(infra/bots/assets/README.md);
  • 可选create.py:生成资产的脚本,由sk asset upload调用;
  • 可选create_and_upload.py:用户自定义的便捷封装脚本。

ios-dev-image-14.4目录当前仅含两个文件:README.md 与 VERSION,其中VERSION内容为0。它属于需要人工从本机 Xcode 提取、无法在 CI 上自动再生的资产,因此目录中不提供create.py

为什么需要 iOS 开发镜像

真机 iOS 测试不是开箱即用的。CI 脚本在连接设备后,必须把与设备 iOS 版本匹配的 Developer Disk Image(DeveloperDiskImage.dmg及其签名文件.dmg.signature)挂载到设备上,才能执行安装应用、运行测试等操作。Skia 的做法是把这些镜像做成版本化资产,随测试任务一并下发到机器人。

镜像来源是 Xcode 自带目录:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/

该目录下按 iOS 版本分子目录(如14.4),每个子目录内即为对应版本的开发镜像。

创建或更新资产:核心命令

资产 README 给出了完整的操作命令(infra/bots/assets/ios-dev-image-14.4/README.md):

To create or update this asset, you will need a Mac with Xcode installed. Just run:

./upload.py --target_dir \ /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/14.4

要点拆解:

  • 前置条件:一台安装了 Xcode 的 Mac。因为目标路径位于 Xcode 应用包内部,Windows/Linux 无法提供该镜像;
  • --target_dir参数:指向本机DeviceSupport/14.4目录,即镜像原始出处,上传时按目录打包;
  • ./upload.py:这是资产目录历史文档中使用的上传脚本名。需要说明的是,当前仓库中ios-dev-image-14.4目录内只保留README.mdVERSION,并未包含upload.py;按 infra/bots/assets/README.md 描述,现在资产的统一操作入口是sk asset upload,例如:
# 首次上传(需提供资产位置) sk asset upload --in ${MY_ASSET_LOCATION} ios-dev-image-14.4 # 更新版本(配合 create.py 或本地目录变更) sk asset upload ios-dev-image-14.4
  • 认证要求:所有sk asset命令都要求拥有 google.com 账号,并先执行gcloud auth application-default login完成认证(infra/bots/assets/README.md);
  • 版本号推进:上传时VERSION会被更新,后续make -C infra/bots train会依据新版本重新生成infra/bots/tasks.json,最后提交代码(infra/bots/assets/README.md)。

资产如何进入 CI 任务:CIPD 打包链路

上传后的资产并非直接以文件形式分发,而是按version:<N>打包为 CIPD 包。在 task_builder.go 中可以找到包名与版本号的拼接逻辑:

pkg := &specs.CipdPackage{ Name: fmt.Sprintf("skia/bots/%s", assetName), Path: assetName, Version: fmt.Sprintf("version:%d", version), }

ios-dev-image-14.4会被注册为skia/bots/ios-dev-image-14.4、版本version:0(与VERSION文件内容一致)。任务生成时通过TaskBuilder.asset(...)把这些包作为 CIPD 依赖注入任务(task_builder.go),机器人执行任务前即可自动拉取到本地。

消费端:测试任务如何挂载镜像

镜像被拉取到机器人后,由 recipe 层完成挂载。核心实现在 infra/bots/recipe_modules/flavor/ios.py 的_install()方法中,完整流程为:

  1. 杀掉 usbmuxd(仅 macOS):sudo /usr/bin/killall -v usbmuxd,随后 sleep 10 秒,缓解连接问题(ios.py);
  2. 配对设备:先用idevicepair validate检查,失败则执行idevicepair pair(ios.py);
  3. 检查已挂载镜像ideviceimagemounter --list,若输出中不含ImageSignature则说明设备上尚未挂载(ios.py);
  4. 定位资产包:在当前目录下用 glob 匹配ios-dev-image*,要求恰好命中一个包(ios.py);
  5. 在包内查找.dmg.dmg.signature文件,缺一即报错(ios.py);
  6. 挂载开发镜像ideviceimagemounter <image> <sig>(ios.py)。

之后才进入安装 Xcode(xcode.install())、安装应用(ideviceinstaller)等后续步骤。这也解释了为什么资产必须完整包含DeveloperDiskImage.dmg.dmg.signature——CI 脚本严格依赖这两个文件。

版本映射:任务如何选择正确的镜像

不同 iOS 版本需要不同镜像,映射逻辑位于 gen_tasks_logic.go 的maybeAddIosDevImage():任务维度(dimension)中出现os:iOS-<版本>时,按版本选择资产,例如:

  • 11.4.1ios-dev-image-11.4
  • 13.3.1/13.4.1/13.5.1/13.6→ 对应ios-dev-image-13.x

其中 patch 版本合并到同一资产,注释写明“其他 patch 版本可归入同一个 case”。而18.2.118.4等较新版本则不需要预打包开发镜像。若遇到未收录的版本,代码会直接log.Fatalf终止并提示:若是新的 iOS 版本,必须新增包含对应开发镜像的 CIPD 包(可参考ios-dev-image-11.4的示例)。这也说明 CI 维度的 iOS 版本号必须带版本(缺失会触发强制校验错误,见 gen_tasks_logic.go)。

从当前仓库源码结构看,maybeAddIosDevImage的 switch 中并未显式列出14.4分支,仓库中也存在ios-dev-image-13.x等兄弟资产(assets 目录)。这意味着ios-dev-image-14.4属于“已建目录、版本 0、待按需启用/更新”的状态;若要让 iOS 14.4 真机任务使用它,可参照 13.x 的 case 补上case "14.4": asset = "ios-dev-image-14.4"映射并重新生成任务。

维护要点小结

  • 更新镜像需在装有 Xcode 的 Mac 上进行,目标目录固定为DeviceSupport/14.4
  • 上传前确认已通过gcloud auth application-default login认证,上传走sk asset upload(历史文档中的./upload.py为早期封装写法);
  • 上传会推进VERSION,随后需make -C infra/bots train重新生成任务配置并提交;
  • 镜像必须同时包含.dmg.dmg.signature,否则测试脚本会直接失败;
  • 新增 iOS 版本测试前,先在maybeAddIosDevImage()中登记版本与资产映射,避免任务生成阶段报错。
  • 图形学

【免费下载链接】skia

Skia is a complete 2D graphic library for drawing Text, Geometries, and Images. See documentation for contribution instructions.

项目地址:https://gitcode.com/gh_mirrors/ski/skia
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询