From 31b534103734f910aac13ddf6757ae7f8eb7cbfb Mon Sep 17 00:00:00 2001 From: Mx-Iris Date: Wed, 6 May 2026 20:59:36 +0800 Subject: [PATCH 1/8] docs(debug-arm64e-runscript): design for debug arm64e workspace and run script Adds the design doc for a new RuntimeViewer-Debug.xcworkspace (mirrors RuntimeViewer.xcworkspace + iOSPackagesShouldBuildARM64e=true) and a RunScript.sh that builds Debug arm64e via xcodebuild to bypass the Xcode GUI compile bug, then launches the app. --- ...026-05-06-debug-arm64e-runscript-design.md | 195 ++++++++++++++++++ 1 file changed, 195 insertions(+) create mode 100644 Documentations/Plans/2026-05-06-debug-arm64e-runscript-design.md diff --git a/Documentations/Plans/2026-05-06-debug-arm64e-runscript-design.md b/Documentations/Plans/2026-05-06-debug-arm64e-runscript-design.md new file mode 100644 index 0000000..89a0296 --- /dev/null +++ b/Documentations/Plans/2026-05-06-debug-arm64e-runscript-design.md @@ -0,0 +1,195 @@ +# Debug arm64e RunScript 设计 + +## 背景与动机 + +`RuntimeViewer-Distribution.xcworkspace` 通过 +`xcshareddata/WorkspaceSettings.xcsettings` 中的 +`iOSPackagesShouldBuildARM64e=true` 强制所有 SPM 包构建 arm64e +切片,这是发版时必备的配置。 + +但日常开发用的 `RuntimeViewer.xcworkspace` 不能照搬这一设置,原因有二: + +1. 该 workspace 引用了本地兄弟仓库(`../MachOKit`、`../MachOObjCSection`、 + `../MachOSwiftSection`、`../swift-demangling`、`../swift-semantic-string`), + 它们只随主仓库 SPM 走,没有为 arm64e 单独配置。 +2. 开启 arm64e 后用 Xcode GUI 编译会触发 Xcode 自身的 bug 直接失败, + 但 `xcodebuild` 命令行可以正常通过。 + +因此需要一份"带本地依赖、能产出 arm64e 调试包"的入口,并通过命令行 +脚本绕开 GUI 编译失败的问题。 + +## 目标 + +- 提供 `RuntimeViewer-Debug.xcworkspace`:内容等于 + `RuntimeViewer.xcworkspace`(保留本地兄弟仓库引用)+ + `iOSPackagesShouldBuildARM64e=true`。 +- 提供 `RunScript.sh`:用 `xcodebuild` 命令行构建并启动 Debug + arm64e + 版本的主 app,避开 GUI bug。 +- 不引入 archive / export / notarize / appcast / upload / commit 等发版步骤 + (这些归 `ArchiveScript.sh` 管)。 + +## 非目标 + +- 不替换 `ArchiveScript.sh`。 +- 不修改 `RuntimeViewer.xcworkspace` 或 `RuntimeViewer-Distribution.xcworkspace`。 +- 不为 iOS / Catalyst / 模拟器产物提供发布入口(`BuildSimulatorScript.sh`、 + `ArchiveScript.sh` 已覆盖)。 +- 不附加 lldb attach、断点恢复等调试器集成 — 启动后用户自己用 Xcode + Debug → Attach to Process 即可。 + +## 方案 + +### 1. 新增 `RuntimeViewer-Debug.xcworkspace` + +目录结构: + +``` +RuntimeViewer-Debug.xcworkspace/ +├── contents.xcworkspacedata # 复制自 RuntimeViewer.xcworkspace +└── xcshareddata/ + └── WorkspaceSettings.xcsettings # 复制自 Distribution(含 arm64e 开关) +``` + +`contents.xcworkspacedata` 的引用列表与 `RuntimeViewer.xcworkspace` +完全一致(含 `container:../MachOKit` 等本地兄弟仓库),不做任何裁剪。 + +`WorkspaceSettings.xcsettings` 内容: + +```xml + + + IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded + + iOSPackagesShouldBuildARM64e + + + +``` + +不创建 `xcuserdata` 目录(按需自动生成)。 + +### 2. 新增 `RunScript.sh` + +模仿 `ArchiveScript.sh` 的骨架,复用其工具函数和参数解析风格。 + +#### 默认参数 + +| 参数 | 默认值 | +|------|--------| +| `WORKSPACE` | `RuntimeViewer-Debug.xcworkspace` | +| `SCHEME` | `RuntimeViewer macOS` | +| `CATALYST_SCHEME` | `RuntimeViewerCatalystHelper` | +| `CONFIGURATION` | `Debug` | +| `BUILD_NUMBER` | `$(date +"%Y%m%d.%H.%M")` | +| `DERIVED` | `$PROJECT_DIR/DerivedData/Debug-arm64e` | +| `LAUNCH` | `true` | + +`DerivedData/Debug-arm64e` 单独成路径,避免与 Xcode GUI 的默认 +DerivedData 互相污染(GUI 那份编译失败的产物不会被命令行复用,反之亦然)。 + +#### 命令行选项 + +| 选项 | 行为 | +|------|------| +| `--workspace ` | 覆盖 workspace | +| `--scheme ` | 覆盖主 app scheme | +| `--catalyst-helper-scheme ` | 覆盖 Catalyst helper scheme | +| `--configuration ` | 覆盖 configuration(默认 Debug) | +| `--build-number ` | 覆盖 `CURRENT_PROJECT_VERSION` | +| `--derived-data ` | 覆盖 DerivedData | +| `--update-packages` | 编译前刷新 SPM pin(同 ArchiveScript) | +| `--no-launch` | 编译完不自动启动 .app | +| `--keep-derived` | 保留 DerivedData(默认就保留,仅占位以保持参数对称) | +| `--dry-run` | 仅打印命令,不执行 | +| `-h, --help` | 显示帮助 | + +不复用 ArchiveScript 的 `--update-appcast` / `--upload-to-github` / +`--commit-push` / `--skip-notarization` / `--include-ios-simulator` 等 +发版相关选项 — 用不到。 + +#### 复用的工具函数 + +直接搬运 ArchiveScript.sh 中的: + +- `fail`、`log`:错误退出与统一前缀日志 +- `pretty`:xcbeautify 自动检测,无则透传 `cat` +- `run`:`--dry-run` 时只 echo,不执行 +- `run_piped`:通过 `pretty` 美化输出,同时把原始 log 落到 + `Products/Logs/-.log`,便于排查 +- `update_packages`(仅当 `--update-packages` 时调用) + +`LOG_DIR` 默认 `$PROJECT_DIR/Products/Logs`(与 ArchiveScript 共用)。 +不抓取 `xcdistributionlogs`(不走 exportArchive)。 + +#### 编译流程 + +1. 解析参数,校验 `RuntimeViewer-Debug.xcworkspace` 存在。 +2. (可选)`update_packages`。 +3. **Build Catalyst helper**(CLAUDE.md 强制要求,不提供跳过开关): + + ```bash + xcodebuild build \ + -workspace "$WORKSPACE" \ + -scheme "$CATALYST_SCHEME" \ + -configuration "$CONFIGURATION" \ + -destination 'generic/platform=macOS,variant=Mac Catalyst' \ + -derivedDataPath "$DERIVED" \ + -skipPackagePluginValidation -skipMacroValidation \ + ARCHS=arm64e ONLY_ACTIVE_ARCH=NO \ + "CURRENT_PROJECT_VERSION=$BUILD_NUMBER" + ``` + +4. **Build 主 app**: + + ```bash + xcodebuild build \ + -workspace "$WORKSPACE" \ + -scheme "$SCHEME" \ + -configuration "$CONFIGURATION" \ + -destination 'generic/platform=macOS' \ + -derivedDataPath "$DERIVED" \ + -skipPackagePluginValidation -skipMacroValidation \ + ARCHS=arm64e ONLY_ACTIVE_ARCH=NO \ + "CURRENT_PROJECT_VERSION=$BUILD_NUMBER" + ``` + +5. 在 `$DERIVED/Build/Products/Debug/` 下定位 `*.app`,记录路径。 +6. 默认 `open "$APP_PATH"`(`--no-launch` 跳过)。 +7. log 输出主 app 路径。 + +#### 强制 arm64e 的两层保险 + +- workspace 层:`iOSPackagesShouldBuildARM64e=true` 让 SPM 包构建 arm64e +- 命令行层:`ARCHS=arm64e ONLY_ACTIVE_ARCH=NO` 强制主 app target + 只产 arm64e 切片(覆盖工程 default ARCHS) + +两层一起保证产物纯 arm64e,方便挂调试器时不会因架构不匹配出错。 + +## 验证与回退 + +### 手动验证步骤 + +1. 运行 `./RunScript.sh`(无参数)。 +2. 确认 `Products/Logs/01-build-catalyst-helper.log` 与 + `Products/Logs/02-build-main.log` 都存在且无错误。 +3. `.app` 自动启动,菜单 → "About RuntimeViewer" 看到 build number。 +4. 终端运行 `lipo -info "/Contents/MacOS/"`, + 预期输出包含 `arm64e`,**不**包含 `arm64`。 +5. 重跑 `./RunScript.sh --no-launch`,验证不会自动启动。 +6. 重跑 `./RunScript.sh --dry-run`,验证只打印命令。 + +### 回退方案 + +- 若发现 workspace 写法或脚本有问题,可直接删除 + `RuntimeViewer-Debug.xcworkspace` 与 `RunScript.sh`,不影响其他流程。 +- 任何 commit 都拆成可单独 revert 的小 commit(workspace 一个,脚本一个)。 + +## 风险 + +- **Xcode GUI bug 依旧存在**:用户若直接在 Xcode 里 ⌘B 这个 Debug + workspace 仍会失败。脚本只解决命令行编译,不解决 GUI 编译。 + 在脚本头部 / README 注释里需要说明这一点。 +- **DerivedData 体积**:`Debug-arm64e` 与 GUI DerivedData 并存可能多 + 占几 GB 磁盘。可接受,必要时手动删除。 +- **arm64e 调试器**:arm64e 在非 Apple 内部环境下需要启动 + `boot-args` 加 `-arm64e_preview_abi`。这是已有约束,本设计不解决。 From af32f9840e7bdf8cb60a617657db19c72b064b0b Mon Sep 17 00:00:00 2001 From: Mx-Iris Date: Wed, 6 May 2026 21:02:32 +0800 Subject: [PATCH 2/8] docs(debug-arm64e-runscript): implementation plan Adds the task-by-task plan for the Debug arm64e workspace + RunScript.sh: Task 1 (workspace files), Task 2 (script skeleton + arg parsing), Task 3 (build pipeline + launch), Task 4 (manual end-to-end + lipo verification). Three independent commit points. --- .../2026-05-06-debug-arm64e-runscript-plan.md | 546 ++++++++++++++++++ 1 file changed, 546 insertions(+) create mode 100644 Documentations/Plans/2026-05-06-debug-arm64e-runscript-plan.md diff --git a/Documentations/Plans/2026-05-06-debug-arm64e-runscript-plan.md b/Documentations/Plans/2026-05-06-debug-arm64e-runscript-plan.md new file mode 100644 index 0000000..18cdcca --- /dev/null +++ b/Documentations/Plans/2026-05-06-debug-arm64e-runscript-plan.md @@ -0,0 +1,546 @@ +# Debug arm64e RunScript 实现计划 + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** 新增 `RuntimeViewer-Debug.xcworkspace` 与 `RunScript.sh`,通过命令行 xcodebuild 编译并启动 Debug + arm64e 版本主 app,绕开 Xcode GUI 在 arm64e 模式下的编译 bug。 + +**Architecture:** 复制 `RuntimeViewer.xcworkspace` 的本地依赖工作区,叠加 `iOSPackagesShouldBuildARM64e=true`;脚本骨架与工具函数模仿 `ArchiveScript.sh`,但只保留构建 + launch 流程,去除 archive / export / notarize / appcast / upload 等发版步骤;通过命令行参数 `ARCHS=arm64e ONLY_ACTIVE_ARCH=NO` 强制主 app 切片为纯 arm64e。 + +**Tech Stack:** bash, xcodebuild, xcbeautify(可选) + +**参考文档:** `Documentations/Plans/2026-05-06-debug-arm64e-runscript-design.md` + +--- + +## File Structure + +| 类型 | 路径 | 责任 | +|------|------|------| +| 创建 | `RuntimeViewer-Debug.xcworkspace/contents.xcworkspacedata` | 工作区文件引用列表(与 `RuntimeViewer.xcworkspace` 一致,含本地兄弟仓库) | +| 创建 | `RuntimeViewer-Debug.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings` | `iOSPackagesShouldBuildARM64e=true` 等 workspace 级开关 | +| 创建 | `RunScript.sh` | 命令行 Debug + arm64e 构建 / 启动入口 | + +--- + +## Task 1: 新建 RuntimeViewer-Debug.xcworkspace + +**Files:** +- Create: `RuntimeViewer-Debug.xcworkspace/contents.xcworkspacedata` +- Create: `RuntimeViewer-Debug.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings` + +- [ ] **Step 1: 创建 `contents.xcworkspacedata`** + +写入与 `RuntimeViewer.xcworkspace/contents.xcworkspacedata` **完全一致**的内容(保留所有 `container:..` 本地兄弟仓库引用): + +```xml + + + + + + + + + + + + + + + + + + + + + + + + + + + +``` + +- [ ] **Step 2: 创建 `WorkspaceSettings.xcsettings`** + +写入与 `RuntimeViewer-Distribution.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings` **完全一致**的内容: + +```xml + + + + + IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded + + iOSPackagesShouldBuildARM64e + + + +``` + +注意 plist 内部缩进使用 tab(与 Distribution 原文一致),不要替换成空格。 + +- [ ] **Step 3: 验证 workspace 文件 xcodebuild 可识别** + +运行: + +```bash +xcodebuild -workspace RuntimeViewer-Debug.xcworkspace -list 2>&1 | head -40 +``` + +预期:列出 schemes(含 `RuntimeViewer macOS`、`RuntimeViewerCatalystHelper`),无 `xcodebuild: error` 行。 + +- [ ] **Step 4: Commit** + +```bash +git add RuntimeViewer-Debug.xcworkspace/contents.xcworkspacedata \ + RuntimeViewer-Debug.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +git commit -m "$(cat <<'EOF' +feat(debug-arm64e-runscript): add RuntimeViewer-Debug workspace with arm64e flag + +Mirrors RuntimeViewer.xcworkspace (with local sibling repo references for +MachOKit/MachOObjCSection/MachOSwiftSection/swift-demangling/swift-semantic-string) +and adds iOSPackagesShouldBuildARM64e=true so xcodebuild produces arm64e +SPM slices. The Xcode GUI compile bug under this flag is bypassed by the +upcoming RunScript.sh, which drives xcodebuild from the command line. +EOF +)" +``` + +--- + +## Task 2: RunScript.sh 骨架(头部、默认参数、工具函数、参数解析) + +**Files:** +- Create: `RunScript.sh` + +- [ ] **Step 1: 写脚本头与默认参数** + +新建 `RunScript.sh`,写入: + +```bash +#!/usr/bin/env bash +# RunScript.sh — Build and launch a Debug + arm64e RuntimeViewer using +# xcodebuild from the command line. The Xcode GUI fails to compile under +# iOSPackagesShouldBuildARM64e=true; this script bypasses that bug. +# +# Usage: +# ./RunScript.sh # build + launch +# ./RunScript.sh --no-launch # build only +# ./RunScript.sh --update-packages # refresh SPM pins first +# ./RunScript.sh --dry-run # print commands without running +# ./RunScript.sh --help +# +# All distribution-related flags (notarize, appcast, GitHub upload, commit) +# are intentionally absent — see ArchiveScript.sh for those. +set -euo pipefail + +PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)" +cd "$PROJECT_DIR" + +# Defaults +WORKSPACE="RuntimeViewer-Debug.xcworkspace" +SCHEME="RuntimeViewer macOS" +CATALYST_SCHEME="RuntimeViewerCatalystHelper" +CONFIGURATION="Debug" +BUILD_NUMBER="$(date +"%Y%m%d.%H.%M")" +DERIVED_DATA="$PROJECT_DIR/DerivedData/Debug-arm64e" + +UPDATE_PACKAGES=false +LAUNCH=true +DRY_RUN=false +``` + +- [ ] **Step 2: 写工具函数(fail / log / pretty / run / run_piped)** + +继续追加: + +```bash +fail() { echo "error: $*" >&2; exit 1; } +log() { echo "[RunScript] $*"; } + +# Pipe xcodebuild output through xcbeautify when it is installed; otherwise +# fall back to cat so that runs do not depend on the tool. +pretty() { + if command -v xcbeautify >/dev/null 2>&1; then + xcbeautify + else + cat + fi +} + +run() { + if $DRY_RUN; then + printf '+ '; printf '%q ' "$@"; echo + else + "$@" + fi +} + +# Run a command with its stdout+stderr piped through pretty(). The raw +# output is also tee'd to $LOG_DIR so devs can recover the full xcodebuild +# log when xcbeautify drops error lines. `set -o pipefail` ensures a +# failure in the leading command still propagates. +run_piped() { + if $DRY_RUN; then + printf '+ '; printf '%q ' "$@"; printf '| tee | pretty\n' + return 0 + fi + mkdir -p "$LOG_DIR" + XCODEBUILD_LOG_INDEX=$((XCODEBUILD_LOG_INDEX + 1)) + local slug="${XCODEBUILD_LOG_NAME:-step}" + local log_path + log_path="$LOG_DIR/$(printf '%02d' "$XCODEBUILD_LOG_INDEX")-${slug}.log" + log "Raw xcodebuild log: $log_path" + "$@" 2>&1 | tee "$log_path" | pretty +} +``` + +- [ ] **Step 3: 写参数解析** + +继续追加: + +```bash +while [[ $# -gt 0 ]]; do + case "$1" in + --workspace) WORKSPACE="$2"; shift 2;; + --scheme) SCHEME="$2"; shift 2;; + --catalyst-helper-scheme) CATALYST_SCHEME="$2"; shift 2;; + --configuration) CONFIGURATION="$2"; shift 2;; + --build-number) BUILD_NUMBER="$2"; shift 2;; + --derived-data) DERIVED_DATA="$2"; shift 2;; + --update-packages) UPDATE_PACKAGES=true; shift;; + --no-launch) LAUNCH=false; shift;; + --dry-run) DRY_RUN=true; shift;; + -h|--help) sed -n '2,15p' "$0" | sed 's/^# *//'; exit 0;; + *) fail "unknown argument: $1";; + esac +done + +[[ -d "$WORKSPACE" ]] || fail "workspace not found: $WORKSPACE" + +log "workspace=$WORKSPACE scheme=$SCHEME configuration=$CONFIGURATION build=$BUILD_NUMBER" +log "derived_data=$DERIVED_DATA update_packages=$UPDATE_PACKAGES launch=$LAUNCH" +``` + +- [ ] **Step 4: 写 LOG_DIR 与计数器** + +继续追加: + +```bash +LOG_DIR="${LOG_DIR:-$PROJECT_DIR/Products/Logs}" +XCODEBUILD_LOG_INDEX=0 + +mkdir -p "$LOG_DIR" +log "xcodebuild logs: $LOG_DIR" +``` + +- [ ] **Step 5: 加可执行权限** + +```bash +chmod +x RunScript.sh +``` + +- [ ] **Step 6: 验证 `--help` 与未知参数** + +运行: + +```bash +./RunScript.sh --help +``` + +预期:打印 `RunScript.sh — Build and launch ...` 等 usage 行(来自头部注释 line 2–15)。 + +运行: + +```bash +./RunScript.sh --bogus 2>&1 || true +``` + +预期:stderr 输出 `error: unknown argument: --bogus`,退出码非 0。 + +- [ ] **Step 7: 验证 bash 语法** + +```bash +bash -n RunScript.sh +``` + +预期:无输出(语法 OK)。 + +- [ ] **Step 8: Commit** + +```bash +git add RunScript.sh +git commit -m "$(cat <<'EOF' +feat(debug-arm64e-runscript): scaffold RunScript.sh with arg parsing + +Adds the bash skeleton: shebang, defaults (Debug + arm64e workspace, +DerivedData/Debug-arm64e), helper functions (fail/log/pretty/run/run_piped) +modeled after ArchiveScript.sh, argument parsing, and workspace existence +check. Build and launch logic land in the next commit. +EOF +)" +``` + +--- + +## Task 3: RunScript.sh 编译流程与 launch + +**Files:** +- Modify: `RunScript.sh`(在参数解析与 LOG_DIR 之后追加) + +- [ ] **Step 1: 写 `update_packages` 函数** + +在 `LOG_DIR=...; mkdir -p "$LOG_DIR"; log "xcodebuild logs: ..."` 后追加: + +```bash +update_packages() { + log "Updating Swift package dependencies" + run swift package update --package-path "$PROJECT_DIR/RuntimeViewerCore" + run swift package update --package-path "$PROJECT_DIR/RuntimeViewerPackages" + + local workspace_path="$WORKSPACE" + if [[ "$workspace_path" != /* ]]; then + workspace_path="$PROJECT_DIR/$workspace_path" + fi + + local workspace_package_resolved="$workspace_path/xcshareddata/swiftpm/Package.resolved" + log "Refreshing workspace package pins" + run rm -f "$workspace_package_resolved" + + XCODEBUILD_LOG_NAME="resolve-catalyst-helper-packages" run_piped xcodebuild -resolvePackageDependencies \ + -workspace "$WORKSPACE" \ + -scheme "$CATALYST_SCHEME" \ + -skipPackagePluginValidation -skipMacroValidation + + XCODEBUILD_LOG_NAME="resolve-main-packages" run_piped xcodebuild -resolvePackageDependencies \ + -workspace "$WORKSPACE" \ + -scheme "$SCHEME" \ + -skipPackagePluginValidation -skipMacroValidation +} + +if $UPDATE_PACKAGES; then + update_packages +fi +``` + +- [ ] **Step 2: 写 build Catalyst helper 步骤** + +继续追加: + +```bash +log "Building Catalyst helper (arm64e)" +XCODEBUILD_LOG_NAME="build-catalyst-helper" run_piped xcodebuild build \ + -workspace "$WORKSPACE" \ + -scheme "$CATALYST_SCHEME" \ + -configuration "$CONFIGURATION" \ + -destination 'generic/platform=macOS,variant=Mac Catalyst' \ + -derivedDataPath "$DERIVED_DATA" \ + -skipPackagePluginValidation -skipMacroValidation \ + ARCHS=arm64e ONLY_ACTIVE_ARCH=NO \ + "CURRENT_PROJECT_VERSION=$BUILD_NUMBER" +``` + +- [ ] **Step 3: 写 build 主 app + 定位 .app** + +继续追加: + +```bash +log "Building main app (arm64e)" +XCODEBUILD_LOG_NAME="build-main" run_piped xcodebuild build \ + -workspace "$WORKSPACE" \ + -scheme "$SCHEME" \ + -configuration "$CONFIGURATION" \ + -destination 'generic/platform=macOS' \ + -derivedDataPath "$DERIVED_DATA" \ + -skipPackagePluginValidation -skipMacroValidation \ + ARCHS=arm64e ONLY_ACTIVE_ARCH=NO \ + "CURRENT_PROJECT_VERSION=$BUILD_NUMBER" + +PRODUCTS_DIR="$DERIVED_DATA/Build/Products/$CONFIGURATION" +APP_PATH="" +if [[ -d "$PRODUCTS_DIR" ]]; then + APP_PATH=$(find "$PRODUCTS_DIR" -maxdepth 1 -type d -name '*.app' | head -1) +fi +if $DRY_RUN; then + APP_PATH="${APP_PATH:-}" +else + [[ -n "$APP_PATH" && -d "$APP_PATH" ]] || fail "expected built *.app under $PRODUCTS_DIR" +fi +``` + +注:`$DRY_RUN` 时 `find` 命中不到(脚本只 echo 了 xcodebuild 命令、并未真编译),所以单独处理;让 dry-run 也能跑到末尾的 launch / log 段。 + +- [ ] **Step 4: 写 launch + 末尾 log 输出** + +继续追加: + +```bash +if $LAUNCH; then + log "Launching $APP_PATH" + run open "$APP_PATH" +else + log "Launch skipped (--no-launch)" +fi + +log "Done. Outputs:" +log " app: $APP_PATH" +log " derived_data: $DERIVED_DATA" +``` + +- [ ] **Step 5: bash 语法检查** + +```bash +bash -n RunScript.sh +``` + +预期:无输出。 + +- [ ] **Step 6: 干跑验证命令拼接** + +```bash +./RunScript.sh --dry-run 2>&1 | tee /tmp/runscript-dryrun.log +``` + +预期 `/tmp/runscript-dryrun.log` 中能看到(顺序、参数应一致): + +1. `[RunScript] workspace=RuntimeViewer-Debug.xcworkspace scheme=RuntimeViewer macOS configuration=Debug build=...` +2. `[RunScript] Building Catalyst helper (arm64e)` +3. `+ xcodebuild build -workspace RuntimeViewer-Debug.xcworkspace -scheme RuntimeViewerCatalystHelper -configuration Debug -destination generic/platform=macOS,variant=Mac\ Catalyst -derivedDataPath .../DerivedData/Debug-arm64e -skipPackagePluginValidation -skipMacroValidation ARCHS=arm64e ONLY_ACTIVE_ARCH=NO CURRENT_PROJECT_VERSION=...` +4. `[RunScript] Building main app (arm64e)` +5. `+ xcodebuild build -workspace RuntimeViewer-Debug.xcworkspace -scheme RuntimeViewer\ macOS -configuration Debug -destination generic/platform=macOS -derivedDataPath .../DerivedData/Debug-arm64e -skipPackagePluginValidation -skipMacroValidation ARCHS=arm64e ONLY_ACTIVE_ARCH=NO CURRENT_PROJECT_VERSION=...` +6. `[RunScript] Launching ` +7. `+ open ` +8. `[RunScript] Done. Outputs:` + +确认每条 xcodebuild 命令都包含 `ARCHS=arm64e ONLY_ACTIVE_ARCH=NO`,主 app destination 是 `generic/platform=macOS`,Catalyst helper 是 `generic/platform=macOS,variant=Mac Catalyst`。 + +- [ ] **Step 7: 干跑 `--no-launch`** + +```bash +./RunScript.sh --no-launch --dry-run 2>&1 | grep -E '(Launching|Launch skipped)' +``` + +预期:输出 `[RunScript] Launch skipped (--no-launch)`,不出现 `Launching`。 + +- [ ] **Step 8: Commit** + +```bash +git add RunScript.sh +git commit -m "$(cat <<'EOF' +feat(debug-arm64e-runscript): build Catalyst helper, main app, launch + +Implements the build pipeline: optional update_packages, the Catalyst +helper build (Mac Catalyst destination), the main macOS app build +(generic/platform=macOS), .app discovery, and default launch via open. +Both xcodebuild invocations pass ARCHS=arm64e ONLY_ACTIVE_ARCH=NO so the +binary is forced to a pure arm64e slice. --no-launch and --dry-run are +honored. +EOF +)" +``` + +--- + +## Task 4: 端到端真实编译与 arm64e 验证(manual,不产生 commit) + +**Files:** 无需修改(仅验证 Task 1–3 的产物是否真能跑通) + +- [ ] **Step 1: 真实编译,不启动** + +```bash +./RunScript.sh --no-launch +``` + +预期: + +- 终端打印 `Building Catalyst helper (arm64e)` → `Building main app (arm64e)` → `Launch skipped` +- `Products/Logs/01-build-catalyst-helper.log` 与 `Products/Logs/02-build-main.log` 存在 +- 退出码 0 + +如果失败,先看 `Products/Logs/-*.log` 的尾部错误。最常见的失败: + +- `iOSPackagesShouldBuildARM64e` 未生效(确认 Task 1 Step 2 的 plist 写对了) +- 本地兄弟仓库不存在(确认 `../MachOKit` 等仓库都在) + +- [ ] **Step 2: 用 lipo 验证主 app 切片** + +```bash +APP_PATH=$(find DerivedData/Debug-arm64e/Build/Products/Debug -maxdepth 1 -type d -name '*.app' | head -1) +BINARY_NAME=$(/usr/libexec/PlistBuddy -c "Print :CFBundleExecutable" "$APP_PATH/Contents/Info.plist") +lipo -info "$APP_PATH/Contents/MacOS/$BINARY_NAME" +``` + +预期: + +``` +Non-fat file: .../Contents/MacOS/RuntimeViewer is architecture: arm64e +``` + +或: + +``` +Architectures in the fat file: ... are: arm64e +``` + +**必须** 输出 `arm64e`,**不应**单独出现 `arm64`(无 e 后缀)。 + +如果出现 `arm64` 而非 `arm64e`,说明命令行 `ARCHS=arm64e` 未生效,回到 Task 3 Step 2/3 检查命令行参数。 + +- [ ] **Step 3: 真实启动** + +```bash +./RunScript.sh +``` + +预期:编译完成后 `RuntimeViewer.app` 启动。如果系统启动失败,提示用户检查 `csrutil` / `boot-args` 是否启用 arm64e preview ABI(这是 arm64e 调试的已知前置条件,与本任务无关)。 + +- [ ] **Step 4: 干净状态确认** + +```bash +git status +``` + +预期:tracking tree 干净(Task 1 / 2 / 3 的产物均已 commit);可能有未 track 的 `DerivedData/` 与 `Products/Logs/`,这两者都已经在 `.gitignore`(验证:`git check-ignore DerivedData/Debug-arm64e Products/Logs` 应输出两条匹配)。 + +如果 `git check-ignore` 没有匹配 `Products/Logs`(说明仓库的 `.gitignore` 不覆盖该路径,因为 ArchiveScript.sh 也写到这个路径,所以理论上应该已经忽略了——若没有,提示用户在后续单独 PR 处理 `.gitignore`,本计划不引入该改动)。 + +--- + +## Self-Review + +**Spec coverage:** +- ✅ 新 workspace 复制本地依赖 + arm64e flag → Task 1 +- ✅ RunScript.sh 默认参数(workspace / scheme / configuration / DERIVED / LAUNCH 等)→ Task 2 Step 1 +- ✅ fail/log/pretty/run/run_piped 工具函数 → Task 2 Step 2 +- ✅ 命令行选项 `--update-packages` / `--no-launch` / `--dry-run` / `--help` 等 → Task 2 Step 3 +- ✅ Catalyst helper 不可跳过 → Task 3 Step 2(无 `--skip-catalyst-helper` 开关) +- ✅ 主 app build → Task 3 Step 3 +- ✅ 编译完默认 `open .app` → Task 3 Step 4 +- ✅ 强制 arm64e(命令行 `ARCHS=arm64e ONLY_ACTIVE_ARCH=NO`)→ Task 3 Step 2/3 +- ✅ Workspace 层 arm64e(`iOSPackagesShouldBuildARM64e=true`)→ Task 1 Step 2 +- ✅ DerivedData 独立路径 → Task 2 Step 1 +- ✅ lipo 验证 arm64e → Task 4 Step 2 +- ✅ 不引入 archive / export / notarize / appcast / upload / commit-push → 三个 Task 中均无相关代码 + +**Placeholder scan:** 全部代码块均为完整可粘贴内容;无 TBD/TODO;测试 / 验证步骤都给了实际命令与期望输出。 + +**Type / 命名一致性:** 变量名 `WORKSPACE` / `SCHEME` / `CATALYST_SCHEME` / `CONFIGURATION` / `BUILD_NUMBER` / `DERIVED_DATA` / `UPDATE_PACKAGES` / `LAUNCH` / `DRY_RUN` / `LOG_DIR` / `XCODEBUILD_LOG_INDEX` / `XCODEBUILD_LOG_NAME` 在 Task 2 / Task 3 之间引用一致;函数名 `fail` / `log` / `pretty` / `run` / `run_piped` / `update_packages` 一致。 + +**Commit 边界:** 三个 commit(workspace / 脚本骨架 / 编译流程)独立可 revert,不互相依赖到对方未 commit 的代码。 + +无需修改,进入 handoff。 From 0b6d159211385af9d15247b7ddd39940fa7b7af2 Mon Sep 17 00:00:00 2001 From: Mx-Iris Date: Wed, 6 May 2026 21:08:22 +0800 Subject: [PATCH 3/8] feat(debug-arm64e-runscript): add RuntimeViewer-Debug workspace with arm64e flag Mirrors RuntimeViewer.xcworkspace (with local sibling repo references for MachOKit/MachOObjCSection/MachOSwiftSection/swift-demangling/swift-semantic-string) and adds iOSPackagesShouldBuildARM64e=true so xcodebuild produces arm64e SPM slices. The Xcode GUI compile bug under this flag is bypassed by the upcoming RunScript.sh, which drives xcodebuild from the command line. --- .../contents.xcworkspacedata | 40 +++++++++++++++++++ .../xcshareddata/WorkspaceSettings.xcsettings | 10 +++++ 2 files changed, 50 insertions(+) create mode 100644 RuntimeViewer-Debug.xcworkspace/contents.xcworkspacedata create mode 100644 RuntimeViewer-Debug.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings diff --git a/RuntimeViewer-Debug.xcworkspace/contents.xcworkspacedata b/RuntimeViewer-Debug.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..9ac23d7 --- /dev/null +++ b/RuntimeViewer-Debug.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/RuntimeViewer-Debug.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/RuntimeViewer-Debug.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..228eedc --- /dev/null +++ b/RuntimeViewer-Debug.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,10 @@ + + + + + IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded + + iOSPackagesShouldBuildARM64e + + + From a7c8f6ec422785e51a09d6f2b866f386f86b22ea Mon Sep 17 00:00:00 2001 From: Mx-Iris Date: Wed, 6 May 2026 21:09:25 +0800 Subject: [PATCH 4/8] feat(debug-arm64e-runscript): scaffold RunScript.sh with arg parsing Adds the bash skeleton: shebang, defaults (Debug + arm64e workspace, DerivedData/Debug-arm64e), helper functions (fail/log/pretty/run/run_piped) modeled after ArchiveScript.sh, argument parsing, and workspace existence check. Build and launch logic land in the next commit. --- RunScript.sh | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100755 RunScript.sh diff --git a/RunScript.sh b/RunScript.sh new file mode 100755 index 0000000..f60607f --- /dev/null +++ b/RunScript.sh @@ -0,0 +1,96 @@ +#!/usr/bin/env bash +# RunScript.sh — Build and launch a Debug + arm64e RuntimeViewer using +# xcodebuild from the command line. The Xcode GUI fails to compile under +# iOSPackagesShouldBuildARM64e=true; this script bypasses that bug. +# +# Usage: +# ./RunScript.sh # build + launch +# ./RunScript.sh --no-launch # build only +# ./RunScript.sh --update-packages # refresh SPM pins first +# ./RunScript.sh --dry-run # print commands without running +# ./RunScript.sh --help +# +# All distribution-related flags (notarize, appcast, GitHub upload, commit) +# are intentionally absent — see ArchiveScript.sh for those. +set -euo pipefail + +PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)" +cd "$PROJECT_DIR" + +# Defaults +WORKSPACE="RuntimeViewer-Debug.xcworkspace" +SCHEME="RuntimeViewer macOS" +CATALYST_SCHEME="RuntimeViewerCatalystHelper" +CONFIGURATION="Debug" +BUILD_NUMBER="$(date +"%Y%m%d.%H.%M")" +DERIVED_DATA="$PROJECT_DIR/DerivedData/Debug-arm64e" + +UPDATE_PACKAGES=false +LAUNCH=true +DRY_RUN=false + +fail() { echo "error: $*" >&2; exit 1; } +log() { echo "[RunScript] $*"; } + +# Pipe xcodebuild output through xcbeautify when it is installed; otherwise +# fall back to cat so that runs do not depend on the tool. +pretty() { + if command -v xcbeautify >/dev/null 2>&1; then + xcbeautify + else + cat + fi +} + +run() { + if $DRY_RUN; then + printf '+ '; printf '%q ' "$@"; echo + else + "$@" + fi +} + +# Run a command with its stdout+stderr piped through pretty(). The raw +# output is also tee'd to $LOG_DIR so devs can recover the full xcodebuild +# log when xcbeautify drops error lines. `set -o pipefail` ensures a +# failure in the leading command still propagates. +run_piped() { + if $DRY_RUN; then + printf '+ '; printf '%q ' "$@"; printf '| tee | pretty\n' + return 0 + fi + mkdir -p "$LOG_DIR" + XCODEBUILD_LOG_INDEX=$((XCODEBUILD_LOG_INDEX + 1)) + local slug="${XCODEBUILD_LOG_NAME:-step}" + local log_path + log_path="$LOG_DIR/$(printf '%02d' "$XCODEBUILD_LOG_INDEX")-${slug}.log" + log "Raw xcodebuild log: $log_path" + "$@" 2>&1 | tee "$log_path" | pretty +} + +while [[ $# -gt 0 ]]; do + case "$1" in + --workspace) WORKSPACE="$2"; shift 2;; + --scheme) SCHEME="$2"; shift 2;; + --catalyst-helper-scheme) CATALYST_SCHEME="$2"; shift 2;; + --configuration) CONFIGURATION="$2"; shift 2;; + --build-number) BUILD_NUMBER="$2"; shift 2;; + --derived-data) DERIVED_DATA="$2"; shift 2;; + --update-packages) UPDATE_PACKAGES=true; shift;; + --no-launch) LAUNCH=false; shift;; + --dry-run) DRY_RUN=true; shift;; + -h|--help) sed -n '2,14p' "$0" | sed 's/^# *//'; exit 0;; + *) fail "unknown argument: $1";; + esac +done + +[[ -d "$WORKSPACE" ]] || fail "workspace not found: $WORKSPACE" + +log "workspace=$WORKSPACE scheme=$SCHEME configuration=$CONFIGURATION build=$BUILD_NUMBER" +log "derived_data=$DERIVED_DATA update_packages=$UPDATE_PACKAGES launch=$LAUNCH" + +LOG_DIR="${LOG_DIR:-$PROJECT_DIR/Products/Logs}" +XCODEBUILD_LOG_INDEX=0 + +mkdir -p "$LOG_DIR" +log "xcodebuild logs: $LOG_DIR" From 4d637b6f948438d7ea99f07de3ae8cb7bfa1c996 Mon Sep 17 00:00:00 2001 From: Mx-Iris Date: Wed, 6 May 2026 21:10:01 +0800 Subject: [PATCH 5/8] feat(debug-arm64e-runscript): build Catalyst helper, main app, launch Implements the build pipeline: optional update_packages, the Catalyst helper build (Mac Catalyst destination), the main macOS app build (generic/platform=macOS), .app discovery, and default launch via open. Both xcodebuild invocations pass ARCHS=arm64e ONLY_ACTIVE_ARCH=NO so the binary is forced to a pure arm64e slice. --no-launch and --dry-run are honored. --- RunScript.sh | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/RunScript.sh b/RunScript.sh index f60607f..4575285 100755 --- a/RunScript.sh +++ b/RunScript.sh @@ -94,3 +94,76 @@ XCODEBUILD_LOG_INDEX=0 mkdir -p "$LOG_DIR" log "xcodebuild logs: $LOG_DIR" + +update_packages() { + log "Updating Swift package dependencies" + run swift package update --package-path "$PROJECT_DIR/RuntimeViewerCore" + run swift package update --package-path "$PROJECT_DIR/RuntimeViewerPackages" + + local workspace_path="$WORKSPACE" + if [[ "$workspace_path" != /* ]]; then + workspace_path="$PROJECT_DIR/$workspace_path" + fi + + local workspace_package_resolved="$workspace_path/xcshareddata/swiftpm/Package.resolved" + log "Refreshing workspace package pins" + run rm -f "$workspace_package_resolved" + + XCODEBUILD_LOG_NAME="resolve-catalyst-helper-packages" run_piped xcodebuild -resolvePackageDependencies \ + -workspace "$WORKSPACE" \ + -scheme "$CATALYST_SCHEME" \ + -skipPackagePluginValidation -skipMacroValidation + + XCODEBUILD_LOG_NAME="resolve-main-packages" run_piped xcodebuild -resolvePackageDependencies \ + -workspace "$WORKSPACE" \ + -scheme "$SCHEME" \ + -skipPackagePluginValidation -skipMacroValidation +} + +if $UPDATE_PACKAGES; then + update_packages +fi + +log "Building Catalyst helper (arm64e)" +XCODEBUILD_LOG_NAME="build-catalyst-helper" run_piped xcodebuild build \ + -workspace "$WORKSPACE" \ + -scheme "$CATALYST_SCHEME" \ + -configuration "$CONFIGURATION" \ + -destination 'generic/platform=macOS,variant=Mac Catalyst' \ + -derivedDataPath "$DERIVED_DATA" \ + -skipPackagePluginValidation -skipMacroValidation \ + ARCHS=arm64e ONLY_ACTIVE_ARCH=NO \ + "CURRENT_PROJECT_VERSION=$BUILD_NUMBER" + +log "Building main app (arm64e)" +XCODEBUILD_LOG_NAME="build-main" run_piped xcodebuild build \ + -workspace "$WORKSPACE" \ + -scheme "$SCHEME" \ + -configuration "$CONFIGURATION" \ + -destination 'generic/platform=macOS' \ + -derivedDataPath "$DERIVED_DATA" \ + -skipPackagePluginValidation -skipMacroValidation \ + ARCHS=arm64e ONLY_ACTIVE_ARCH=NO \ + "CURRENT_PROJECT_VERSION=$BUILD_NUMBER" + +PRODUCTS_DIR="$DERIVED_DATA/Build/Products/$CONFIGURATION" +APP_PATH="" +if [[ -d "$PRODUCTS_DIR" ]]; then + APP_PATH=$(find "$PRODUCTS_DIR" -maxdepth 1 -type d -name '*.app' | head -1) +fi +if $DRY_RUN; then + APP_PATH="${APP_PATH:-}" +else + [[ -n "$APP_PATH" && -d "$APP_PATH" ]] || fail "expected built *.app under $PRODUCTS_DIR" +fi + +if $LAUNCH; then + log "Launching $APP_PATH" + run open "$APP_PATH" +else + log "Launch skipped (--no-launch)" +fi + +log "Done. Outputs:" +log " app: $APP_PATH" +log " derived_data: $DERIVED_DATA" From 4d1afc9d616ba015d46a64f3e503901df321c498 Mon Sep 17 00:00:00 2001 From: Mx-Iris Date: Wed, 6 May 2026 21:35:18 +0800 Subject: [PATCH 6/8] chore(debug-arm64e-runscript): add Debug-arm64e configuration Adds a Debug-arm64e build configuration to RuntimeViewerUsingAppKit.xcodeproj and RuntimeViewerServer.xcodeproj. It is a copy of Debug except that the two targets that need to inspect arm64e processes have ENABLE_POINTER_AUTHENTICATION=YES, which causes their binaries to gain an arm64e slice on Apple Silicon: - RuntimeViewerServer.framework (RuntimeViewerServer.xcodeproj) - dev.mxiris.runtimeviewer.service (RuntimeViewerUsingAppKit.xcodeproj) All other targets in Debug-arm64e behave identically to Debug, so the main app stays arm64-only and macro plugins are not forced to arm64e. The Xcode GUI Debug build path is therefore unaffected. Also pins SPM dependencies for RuntimeViewer-Debug.xcworkspace. --- .../xcshareddata/swiftpm/Package.resolved | 707 ++++++++++++++++++ .../project.pbxproj | 181 +++++ .../project.pbxproj | 254 +++++++ 3 files changed, 1142 insertions(+) create mode 100644 RuntimeViewer-Debug.xcworkspace/xcshareddata/swiftpm/Package.resolved diff --git a/RuntimeViewer-Debug.xcworkspace/xcshareddata/swiftpm/Package.resolved b/RuntimeViewer-Debug.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..78f632d --- /dev/null +++ b/RuntimeViewer-Debug.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,707 @@ +{ + "pins" : [ + { + "identity" : "associatedobject", + "kind" : "remoteSourceControl", + "location" : "https://github.com/p-x9/AssociatedObject", + "state" : { + "revision" : "f358e1ccf6761b9d1d53136022a65c601cdc4da3", + "version" : "0.15.0" + } + }, + { + "identity" : "asynchrone", + "kind" : "remoteSourceControl", + "location" : "https://github.com/MxIris-Library-Forks/Asynchrone", + "state" : { + "revision" : "b2e5d13c9741de58a62dbc40aefa9653c33c83ce", + "version" : "0.23.0-fork.1" + } + }, + { + "identity" : "binarycodable", + "kind" : "remoteSourceControl", + "location" : "https://github.com/christophhagen/BinaryCodable", + "state" : { + "revision" : "c2ef4834bf038a998c36301d910a8525de5e12b1", + "version" : "3.2.0" + } + }, + { + "identity" : "cocoacoordinator", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Mx-Iris/CocoaCoordinator", + "state" : { + "revision" : "8756b37cfc91918a6d92ba92125dd6f45e5a8aae", + "version" : "0.4.1" + } + }, + { + "identity" : "combine-schedulers", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/combine-schedulers", + "state" : { + "revision" : "dcccb979a2183b8df3334237e3dc1ae2b4116a86", + "version" : "1.2.0" + } + }, + { + "identity" : "differencekit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/ra1028/DifferenceKit", + "state" : { + "revision" : "073b9671ce2b9b5b96398611427a1f929927e428", + "version" : "1.3.0" + } + }, + { + "identity" : "dsfappearancemanager", + "kind" : "remoteSourceControl", + "location" : "https://github.com/dagronf/DSFAppearanceManager", + "state" : { + "revision" : "e9add5fdf05fe50950d105c77963b7373ddb5ad4", + "version" : "3.5.1" + } + }, + { + "identity" : "dsfquickactionbar", + "kind" : "remoteSourceControl", + "location" : "https://github.com/MxIris-macOS-Library-Forks/DSFQuickActionBar", + "state" : { + "revision" : "ae07ffcd50bedd418b46d096f4785f7c3bc96e3e", + "version" : "6.2.102" + } + }, + { + "identity" : "enumkit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/gringoireDM/EnumKit.git", + "state" : { + "revision" : "ae639dfac5c7116abb64c5f62124915f627140e4", + "version" : "1.1.3" + } + }, + { + "identity" : "filter-ui", + "kind" : "remoteSourceControl", + "location" : "https://github.com/MxIris-macOS-Library-Forks/filter-ui", + "state" : { + "revision" : "0d7d6d0fe5e478d7a70f6b1b014998b96e2b171e", + "version" : "0.1.2" + } + }, + { + "identity" : "frameworktoolbox", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Mx-Iris/FrameworkToolbox", + "state" : { + "revision" : "22f92afb2520417e60a464a6a5abb88621c2b43d", + "version" : "0.5.3" + } + }, + { + "identity" : "fuzzy-search", + "kind" : "remoteSourceControl", + "location" : "https://github.com/MxIris-Library-Forks/fuzzy-search", + "state" : { + "revision" : "1a88d6807a174ebb90e2a04e2071944e006847ef", + "version" : "0.1.0" + } + }, + { + "identity" : "ide-icons", + "kind" : "remoteSourceControl", + "location" : "https://github.com/MxIris-Library-Forks/ide-icons", + "state" : { + "revision" : "d262688aecaf1cdab961b2a504566ae5f71c29d1", + "version" : "0.1.3" + } + }, + { + "identity" : "ifrit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/ukushu/Ifrit", + "state" : { + "revision" : "9b9556e14cee24ad16b19d0eb099283cf79a7d94", + "version" : "3.0.0" + } + }, + { + "identity" : "keyboardshortcuts", + "kind" : "remoteSourceControl", + "location" : "https://github.com/sindresorhus/KeyboardShortcuts", + "state" : { + "revision" : "1aef85578fdd4f9eaeeb8d53b7b4fc31bf08fe27", + "version" : "2.4.0" + } + }, + { + "identity" : "kingfisher", + "kind" : "remoteSourceControl", + "location" : "https://github.com/onevcat/Kingfisher", + "state" : { + "revision" : "cf8be20d07654570554c8a8a4952bc8a5766a8b0", + "version" : "8.9.0" + } + }, + { + "identity" : "lateresponders", + "kind" : "remoteSourceControl", + "location" : "https://github.com/MxIris-Library-Forks/LateResponders", + "state" : { + "revision" : "0ac1dcad81858b6e532f5a0d8590fb9fb71a1024", + "version" : "1.1.0" + } + }, + { + "identity" : "launchservicesprivate", + "kind" : "remoteSourceControl", + "location" : "https://github.com/MxIris-Reverse-Engineering/LaunchServicesPrivate", + "state" : { + "revision" : "ee6dbcf2f13176c005337b37ba88431d40458a2b", + "version" : "0.1.0" + } + }, + { + "identity" : "machinjector", + "kind" : "remoteSourceControl", + "location" : "https://github.com/MxIris-Reverse-Engineering/MachInjector", + "state" : { + "revision" : "9badd94674dbcb9291458421e25a70971733a08f", + "version" : "0.2.0" + } + }, + { + "identity" : "metacodable", + "kind" : "remoteSourceControl", + "location" : "https://github.com/SwiftyLab/MetaCodable", + "state" : { + "revision" : "c2a6cc907e2f95463ba8f2b55432bd2aee8a4bfd", + "version" : "1.6.0" + } + }, + { + "identity" : "nsattributedstringbuilder", + "kind" : "remoteSourceControl", + "location" : "https://github.com/MxIris-Library-Forks/NSAttributedStringBuilder", + "state" : { + "revision" : "d0d35f858a556b7f7f6ad2da7d7a8b469a72fb5c", + "version" : "0.4.2" + } + }, + { + "identity" : "objectarchivekit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/p-x9/ObjectArchiveKit.git", + "state" : { + "revision" : "96d782a576273b73b277b577943a2a25b00b919e", + "version" : "0.5.0" + } + }, + { + "identity" : "openuxkit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/OpenUXKit/OpenUXKit", + "state" : { + "branch" : "main", + "revision" : "a8d89523afd0aa9e06e81ee9b7748eb288ff2630" + } + }, + { + "identity" : "rainbow", + "kind" : "remoteSourceControl", + "location" : "https://github.com/onevcat/Rainbow", + "state" : { + "revision" : "cdf146ae671b2624917648b61c908d1244b98ca1", + "version" : "4.2.1" + } + }, + { + "identity" : "rearrange", + "kind" : "remoteSourceControl", + "location" : "https://github.com/ChimeHQ/Rearrange.git", + "state" : { + "revision" : "4de8be41dba304192e87dc0a11e0aa39e72aa2e8", + "version" : "2.1.1" + } + }, + { + "identity" : "runningapplicationkit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Mx-Iris/RunningApplicationKit", + "state" : { + "revision" : "5ff991e2b32445cebce2514fbc428594dfa092cd", + "version" : "0.3.2" + } + }, + { + "identity" : "rxappkit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Mx-Iris/RxAppKit", + "state" : { + "revision" : "e4ea5c272acdc4f1c220bcc0a44d79cebf1ed98b", + "version" : "0.3.1" + } + }, + { + "identity" : "rxcombine", + "kind" : "remoteSourceControl", + "location" : "https://github.com/CombineCommunity/RxCombine", + "state" : { + "revision" : "19474c2ac9fde613bba8513bf98990e1aa9831cd", + "version" : "2.0.1" + } + }, + { + "identity" : "rxconcurrency", + "kind" : "remoteSourceControl", + "location" : "https://github.com/TrGiLong/RxConcurrency", + "state" : { + "revision" : "dadb16c54bd42ca83c08f3d80f61fbfca93a585c", + "version" : "0.1.1" + } + }, + { + "identity" : "rxenumkit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/gringoireDM/RxEnumKit", + "state" : { + "revision" : "a7572f7bcc69e458f74730098be97279a1b8c80f", + "version" : "2.0.0" + } + }, + { + "identity" : "rxswift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/ReactiveX/RxSwift", + "state" : { + "revision" : "132aea4f236ccadc51590b38af0357a331d51fa2", + "version" : "6.10.2" + } + }, + { + "identity" : "rxswiftplus", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Mx-Iris/RxSwiftPlus", + "state" : { + "revision" : "d40a7d551b58ce3006eaabcaa3721b99db72ea78", + "version" : "0.2.3" + } + }, + { + "identity" : "rxuikit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Mx-Iris/RxUIKit", + "state" : { + "revision" : "f4397315d83edf4f9390dbe96e212c892577c7eb", + "version" : "0.1.1" + } + }, + { + "identity" : "semaphore", + "kind" : "remoteSourceControl", + "location" : "https://github.com/MxIris-Library-Forks/Semaphore", + "state" : { + "revision" : "2543679282aa6f6c8ecf2138acd613ed20790bc2", + "version" : "0.1.0" + } + }, + { + "identity" : "sfsymbols", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Mx-Iris/SFSymbols", + "state" : { + "revision" : "98c7f4a22419d8034a058a8bfaec7cba4e53dcca", + "version" : "0.2.0" + } + }, + { + "identity" : "snapkit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/SnapKit/SnapKit", + "state" : { + "revision" : "2842e6e84e82eb9a8dac0100ca90d9444b0307f4", + "version" : "5.7.1" + } + }, + { + "identity" : "sourcekitd", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Mx-Iris/SourceKitD", + "state" : { + "revision" : "47ddc958a3962f9bb0fe08de1c8f39723e472228", + "version" : "0.1.0" + } + }, + { + "identity" : "sparkle", + "kind" : "remoteSourceControl", + "location" : "https://github.com/sparkle-project/Sparkle", + "state" : { + "revision" : "066e75a8b3e99962685d6a90cdd5293ebffd9261", + "version" : "2.9.1" + } + }, + { + "identity" : "swift-apinotes", + "kind" : "remoteSourceControl", + "location" : "https://github.com/MxIris-DeveloperTool/swift-apinotes", + "state" : { + "revision" : "2fe208c1824f053c04778c5dad2a6fe93d8ab3bf", + "version" : "0.1.0" + } + }, + { + "identity" : "swift-argument-parser", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-argument-parser", + "state" : { + "revision" : "626b5b7b2f45e1b0b1c6f4a309296d1d21d7311b", + "version" : "1.7.1" + } + }, + { + "identity" : "swift-asn1", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-asn1.git", + "state" : { + "revision" : "eb50cbd14606a9161cbc5d452f18797c90ef0bab", + "version" : "1.7.0" + } + }, + { + "identity" : "swift-async-algorithms", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-async-algorithms", + "state" : { + "revision" : "9d349bcc328ac3c31ce40e746b5882742a0d1272", + "version" : "1.1.3" + } + }, + { + "identity" : "swift-atomics", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-atomics.git", + "state" : { + "revision" : "b601256eab081c0f92f059e12818ac1d4f178ff7", + "version" : "1.3.0" + } + }, + { + "identity" : "swift-binary-parse-support", + "kind" : "remoteSourceControl", + "location" : "https://github.com/p-x9/swift-binary-parse-support.git", + "state" : { + "revision" : "5fb96b503672ea4752eded6b4e301fd87214b03b", + "version" : "0.2.1" + } + }, + { + "identity" : "swift-case-paths", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-case-paths", + "state" : { + "revision" : "206cbce3882b4de9aee19ce62ac5b7306cadd45b", + "version" : "1.7.3" + } + }, + { + "identity" : "swift-certificates", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-certificates.git", + "state" : { + "revision" : "bde8ca32a096825dfce37467137c903418c1893d", + "version" : "1.19.1" + } + }, + { + "identity" : "swift-clang", + "kind" : "remoteSourceControl", + "location" : "https://github.com/MxIris-DeveloperTool/swift-clang", + "state" : { + "revision" : "f92a834ed33249612d9ef30a41d8254d32a7602a", + "version" : "0.2.0" + } + }, + { + "identity" : "swift-clocks", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-clocks", + "state" : { + "revision" : "cc46202b53476d64e824e0b6612da09d84ffde8e", + "version" : "1.0.6" + } + }, + { + "identity" : "swift-collections", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-collections", + "state" : { + "revision" : "6675bc0ff86e61436e615df6fc5174e043e57924", + "version" : "1.4.1" + } + }, + { + "identity" : "swift-concurrency-extras", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-concurrency-extras", + "state" : { + "revision" : "5a3825302b1a0d744183200915a47b508c828e6f", + "version" : "1.3.2" + } + }, + { + "identity" : "swift-confidential", + "kind" : "remoteSourceControl", + "location" : "https://github.com/MxIris-Library-Forks/swift-confidential.git", + "state" : { + "revision" : "0e3e84cc18ffb4b39c4e51d9deacc3007e5fc67b", + "version" : "0.5.100" + } + }, + { + "identity" : "swift-crypto", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-crypto.git", + "state" : { + "revision" : "95ba0316a9b733e92bb6b071255ff46263bbe7dc", + "version" : "3.15.1" + } + }, + { + "identity" : "swift-custom-dump", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-custom-dump", + "state" : { + "revision" : "06c57924455064182d6b217f06ebc05d00cb2990", + "version" : "1.5.0" + } + }, + { + "identity" : "swift-dependencies", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-dependencies", + "state" : { + "revision" : "706feb7858a7f6c242879d137b8ee30926aa5b26", + "version" : "1.12.0" + } + }, + { + "identity" : "swift-dyld-private", + "kind" : "remoteSourceControl", + "location" : "https://github.com/MxIris-Reverse-Engineering/swift-dyld-private", + "state" : { + "revision" : "2f5ce94df9b1356d3c75793a659bf22f35bc8699", + "version" : "1.2.0" + } + }, + { + "identity" : "swift-fileio", + "kind" : "remoteSourceControl", + "location" : "https://github.com/p-x9/swift-fileio.git", + "state" : { + "revision" : "d589ff3966f9f064574780f527449a946736b989", + "version" : "0.13.0" + } + }, + { + "identity" : "swift-fileio-extra", + "kind" : "remoteSourceControl", + "location" : "https://github.com/p-x9/swift-fileio-extra.git", + "state" : { + "revision" : "8d83506dd4dff737807d90dbf2264096ed98c7a7", + "version" : "0.2.2" + } + }, + { + "identity" : "swift-literal-type-inference", + "kind" : "remoteSourceControl", + "location" : "https://github.com/p-x9/swift-literal-type-inference.git", + "state" : { + "revision" : "a67dc0c90511f0b036de8ee51ecba9243d1a5ec0", + "version" : "0.6.0" + } + }, + { + "identity" : "swift-log", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-log.git", + "state" : { + "revision" : "5073617dac96330a486245e4c0179cb0a6fd2256", + "version" : "1.12.0" + } + }, + { + "identity" : "swift-memberwise-init-macro", + "kind" : "remoteSourceControl", + "location" : "https://github.com/gohanlon/swift-memberwise-init-macro", + "state" : { + "revision" : "d0fb82bb6638051524214fb54524bfcd876735a1", + "version" : "0.6.0" + } + }, + { + "identity" : "swift-mobile-gestalt", + "kind" : "remoteSourceControl", + "location" : "https://github.com/p-x9/swift-mobile-gestalt", + "state" : { + "revision" : "aa9e0a9dde0be80f395a77888851e4afdd6f4252", + "version" : "0.4.0" + } + }, + { + "identity" : "swift-navigation", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-navigation", + "state" : { + "revision" : "32f35241b8be0719c4c7f00eb27713b1cadb6248", + "version" : "2.8.0" + } + }, + { + "identity" : "swift-nio", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-nio.git", + "state" : { + "revision" : "f71c8d2a5e74a2c6d11a0fbe324774b5d6084237", + "version" : "2.99.0" + } + }, + { + "identity" : "swift-objc-dump", + "kind" : "remoteSourceControl", + "location" : "https://github.com/MxIris-Reverse-Engineering/swift-objc-dump.git", + "state" : { + "revision" : "4206040acd64db453c5c28c1539b98fa5befa8fc", + "version" : "0.8.100" + } + }, + { + "identity" : "swift-object-association", + "kind" : "remoteSourceControl", + "location" : "https://github.com/p-x9/swift-object-association.git", + "state" : { + "revision" : "93806cfecae1f198c894ed5585b93aff0e2d1f5a", + "version" : "0.5.0" + } + }, + { + "identity" : "swift-perception", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-perception", + "state" : { + "revision" : "25ac73741c3436605d61eceb5207e896973918e7", + "version" : "2.0.10" + } + }, + { + "identity" : "swift-snapshot-testing", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-snapshot-testing", + "state" : { + "revision" : "ad5e3190cc63dc288f28546f9c6827efc1e9d495", + "version" : "1.19.2" + } + }, + { + "identity" : "swift-system", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-system.git", + "state" : { + "revision" : "7c6ad0fc39d0763e0b699210e4124afd5041c5df", + "version" : "1.6.4" + } + }, + { + "identity" : "swiftmcp", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Cocoanetics/SwiftMCP", + "state" : { + "revision" : "c96b2412b16fca49156d6914b18568dc07fe978e", + "version" : "1.4.4" + } + }, + { + "identity" : "swiftui-introspect", + "kind" : "remoteSourceControl", + "location" : "https://github.com/siteline/swiftui-introspect", + "state" : { + "revision" : "26986a57e31c813f98262ddb62d4b07d40008535", + "version" : "26.0.1" + } + }, + { + "identity" : "swiftyxpc", + "kind" : "remoteSourceControl", + "location" : "https://github.com/MxIris-macOS-Library-Forks/SwiftyXPC", + "state" : { + "revision" : "d56672e7939ae929e94d4ea66da3fc527a69724e", + "version" : "0.5.100" + } + }, + { + "identity" : "systemhud", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Mx-Iris/SystemHUD", + "state" : { + "revision" : "42d259b5d2b3d5cb4ce14281ce86f010034ff36c", + "version" : "0.1.0" + } + }, + { + "identity" : "uifoundation", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Mx-Iris/UIFoundation", + "state" : { + "revision" : "d7c490fd668e26ccf82e1776ce77c32e4ca8f3e3", + "version" : "0.5.1" + } + }, + { + "identity" : "uxkitcoordinator", + "kind" : "remoteSourceControl", + "location" : "https://github.com/OpenUXKit/UXKitCoordinator", + "state" : { + "branch" : "main", + "revision" : "6e103a7628d8c8108a3b5d6dabafb61ee6fffb09" + } + }, + { + "identity" : "version", + "kind" : "remoteSourceControl", + "location" : "https://github.com/mxcl/Version", + "state" : { + "revision" : "3043fcd2a50375db76d89ff206a612471833d1c2", + "version" : "2.2.1" + } + }, + { + "identity" : "xcoordinator", + "kind" : "remoteSourceControl", + "location" : "https://github.com/MxIris-Library-Forks/XCoordinator", + "state" : { + "revision" : "1d35f8bf10b9cf0ab49736493d2d8b6c27fc63c0", + "version" : "3.0.0-beta.1" + } + }, + { + "identity" : "xctest-dynamic-overlay", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/xctest-dynamic-overlay", + "state" : { + "revision" : "dfd70507def84cb5fb821278448a262c6ff2bbad", + "version" : "1.9.0" + } + }, + { + "identity" : "yams", + "kind" : "remoteSourceControl", + "location" : "https://github.com/jpsim/Yams", + "state" : { + "revision" : "deaf82e867fa2cbd3cd865978b079bfcf384ac28", + "version" : "6.2.1" + } + } + ], + "version" : 2 +} diff --git a/RuntimeViewerServer/RuntimeViewerServer.xcodeproj/project.pbxproj b/RuntimeViewerServer/RuntimeViewerServer.xcodeproj/project.pbxproj index b2f0883..02600a7 100644 --- a/RuntimeViewerServer/RuntimeViewerServer.xcodeproj/project.pbxproj +++ b/RuntimeViewerServer/RuntimeViewerServer.xcodeproj/project.pbxproj @@ -746,6 +746,184 @@ }; name = Release; }; + E9958CDE2FAB79270073036F /* Debug-arm64e */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COMPILATION_CACHE_ENABLE_CACHING = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = D5Q73692VW; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_ENABLE_EXPLICIT_MODULES = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = "Debug-arm64e"; + }; + E9958CDF2FAB79270073036F /* Debug-arm64e */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUILD_LIBRARY_FOR_DISTRIBUTION = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; + DEVELOPMENT_TEAM = D5Q73692VW; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + ENABLE_POINTER_AUTHENTICATION = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "@loader_path/Frameworks", + "@executable_path/Frameworks", + ); + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( + "@loader_path/Frameworks", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 12.0; + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + PRODUCT_BUNDLE_IDENTIFIER = com.MxIris.RuntimeViewerServer; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = auto; + SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SUPPORTED_PLATFORMS = macosx; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_MODULE = YES; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_UPCOMING_FEATURE_INTERNAL_IMPORTS_BY_DEFAULT = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 6; + TVOS_DEPLOYMENT_TARGET = 13.0; + WATCHOS_DEPLOYMENT_TARGET = 6.0; + XROS_DEPLOYMENT_TARGET = 1.0; + }; + name = "Debug-arm64e"; + }; + E9958CE02FAB79270073036F /* Debug-arm64e */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUILD_LIBRARY_FOR_DISTRIBUTION = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; + DEVELOPMENT_TEAM = D5Q73692VW; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = YES; + ENABLE_POINTER_AUTHENTICATION = NO; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "@loader_path/Frameworks", + "@executable_path/Frameworks", + ); + "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = ( + "@loader_path/Frameworks", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.15; + MARKETING_VERSION = 1.0; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; + PRODUCT_BUNDLE_IDENTIFIER = com.MxIris.RuntimeViewerServer; + PRODUCT_NAME = RuntimeViewerServer; + SDKROOT = auto; + SKIP_INSTALL = NO; + STRING_CATALOG_GENERATE_SYMBOLS = YES; + SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator watchos watchsimulator xros xrsimulator"; + SUPPORTS_MACCATALYST = YES; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_INSTALL_MODULE = YES; + SWIFT_INSTALL_OBJC_HEADER = NO; + SWIFT_UPCOMING_FEATURE_INTERNAL_IMPORTS_BY_DEFAULT = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,3,4,6,7"; + TVOS_DEPLOYMENT_TARGET = 15.0; + WATCHOS_DEPLOYMENT_TARGET = 8.0; + XROS_DEPLOYMENT_TARGET = 1.0; + }; + name = "Debug-arm64e"; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -753,6 +931,7 @@ isa = XCConfigurationList; buildConfigurations = ( E978F91E2F1BBB38004C09B4 /* Debug */, + E9958CDE2FAB79270073036F /* Debug-arm64e */, E978F91F2F1BBB38004C09B4 /* Release */, E9321B2A2F34A40A00665281 /* Distribution */, ); @@ -763,6 +942,7 @@ isa = XCConfigurationList; buildConfigurations = ( E978F9212F1BBB38004C09B4 /* Debug */, + E9958CDF2FAB79270073036F /* Debug-arm64e */, E978F9222F1BBB38004C09B4 /* Release */, E9321B2B2F34A40A00665281 /* Distribution */, ); @@ -773,6 +953,7 @@ isa = XCConfigurationList; buildConfigurations = ( E994E2942F323A51009DD28A /* Debug */, + E9958CE02FAB79270073036F /* Debug-arm64e */, E994E2952F323A51009DD28A /* Release */, E9321B2C2F34A40A00665281 /* Distribution */, ); diff --git a/RuntimeViewerUsingAppKit/RuntimeViewerUsingAppKit.xcodeproj/project.pbxproj b/RuntimeViewerUsingAppKit/RuntimeViewerUsingAppKit.xcodeproj/project.pbxproj index ec743ce..5f51097 100644 --- a/RuntimeViewerUsingAppKit/RuntimeViewerUsingAppKit.xcodeproj/project.pbxproj +++ b/RuntimeViewerUsingAppKit/RuntimeViewerUsingAppKit.xcodeproj/project.pbxproj @@ -1387,6 +1387,253 @@ }; name = Release; }; + E9958CD62FAB79100073036F /* Debug-arm64e configuration for PBXProject "RuntimeViewerUsingAppKit" */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COMPILATION_CACHE_ENABLE_CACHING = YES; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = D5Q73692VW; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_ENABLE_EXPLICIT_MODULES = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = "Debug-arm64e"; + }; + E9958CD72FAB79100073036F /* Debug-arm64e configuration for PBXNativeTarget "RuntimeViewerUsingAppKit" */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E95CDA672DAA970300D97B03 /* Debug.xcconfig */; + buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = NO; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; + AUTOMATION_APPLE_EVENTS = NO; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = RuntimeViewerUsingAppKit/RuntimeViewerUsingAppKit.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_HARDENED_RUNTIME = YES; + ENABLE_POINTER_AUTHENTICATION = NO; + ENABLE_RESOURCE_ACCESS_AUDIO_INPUT = NO; + ENABLE_RESOURCE_ACCESS_CALENDARS = NO; + ENABLE_RESOURCE_ACCESS_CAMERA = NO; + ENABLE_RESOURCE_ACCESS_CONTACTS = NO; + ENABLE_RESOURCE_ACCESS_LOCATION = NO; + ENABLE_RESOURCE_ACCESS_PHOTO_LIBRARY = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + EXCLUDED_SOURCE_FILE_NAMES = ( + com.mxiris.runtimeviewer.service.plist, + com.mxiris.runtimeviewer.service, + ); + FUSE_BUILD_SCRIPT_PHASES = NO; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = RuntimeViewerUsingAppKit/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = RuntimeViewer; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INFOPLIST_KEY_NSLocalNetworkUsageDescription = "RuntimeViewer requires local network permissions to use the Bonjour discovery service"; + INFOPLIST_KEY_NSMainNibFile = MainMenu; + INFOPLIST_KEY_NSPrincipalClass = NSApplication; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 15.0; + MARKETING_VERSION = 2.0.1; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = dev.JH.RuntimeViewer; + PRODUCT_NAME = "RuntimeViewer-Debug"; + RUNTIME_EXCEPTION_ALLOW_DYLD_ENVIRONMENT_VARIABLES = NO; + RUNTIME_EXCEPTION_ALLOW_JIT = NO; + RUNTIME_EXCEPTION_ALLOW_UNSIGNED_EXECUTABLE_MEMORY = NO; + RUNTIME_EXCEPTION_DEBUGGING_TOOL = YES; + RUNTIME_EXCEPTION_DISABLE_EXECUTABLE_PAGE_PROTECTION = NO; + RUNTIME_EXCEPTION_DISABLE_LIBRARY_VALIDATION = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = "Debug-arm64e"; + }; + E9958CD82FAB79100073036F /* Debug-arm64e configuration for PBXNativeTarget "RuntimeViewerCatalystHelper" */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALLOW_TARGET_PLATFORM_SPECIALIZATION = NO; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + BUILD_LIBRARY_FOR_DISTRIBUTION = NO; + CODE_SIGN_ENTITLEMENTS = RuntimeViewerCatalystHelper/RuntimeViewerCatalystHelper.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER = NO; + ENABLE_HARDENED_RUNTIME = YES; + ENABLE_POINTER_AUTHENTICATION = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = RuntimeViewerCatalystHelper/Info.plist; + INFOPLIST_KEY_LSBackgroundOnly = YES; + INFOPLIST_KEY_LSUIElement = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 18.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 2.0.1; + ONLY_ACTIVE_ARCH = NO; + PRODUCT_BUNDLE_IDENTIFIER = dev.JH.RuntimeViewerCatalystHelper; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = NO; + SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; + SUPPORTS_MACCATALYST = YES; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2,6"; + }; + name = "Debug-arm64e"; + }; + E9958CD92FAB79100073036F /* Debug-arm64e configuration for PBXNativeTarget "RuntimeViewerCatalystHelperPlugin" */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; + ENABLE_HARDENED_RUNTIME = YES; + ENABLE_POINTER_AUTHENTICATION = NO; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + INFOPLIST_KEY_NSPrincipalClass = AppKitPluginImpl; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + MACOSX_DEPLOYMENT_TARGET = 15.0; + MARKETING_VERSION = 2.0.1; + ONLY_ACTIVE_ARCH = NO; + PRODUCT_BUNDLE_IDENTIFIER = com.JH.RuntimeViewerCatalystHelperPlugin; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = "Debug-arm64e"; + }; + E9958CDA2FAB79100073036F /* Debug-arm64e configuration for PBXNativeTarget "com.JH.RuntimeViewerService" */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E95CDA652DAA6FA300D97B03 /* Debug.xcconfig */; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CREATE_INFOPLIST_SECTION_IN_BINARY = YES; + DEAD_CODE_STRIPPING = YES; + ENABLE_HARDENED_RUNTIME = YES; + ENABLE_POINTER_AUTHENTICATION = YES; + INFOPLIST_FILE = "$(SRCROOT)/$(TARGETNAME)/Info.plist"; + MACOSX_DEPLOYMENT_TARGET = 15.0; + ONLY_ACTIVE_ARCH = NO; + PRODUCT_BUNDLE_IDENTIFIER = com.JH.RuntimeViewerService; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + }; + name = "Debug-arm64e"; + }; + E9958CDB2FAB79100073036F /* Debug-arm64e configuration for PBXNativeTarget "dev.mxiris.runtimeviewer.service" */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = D5Q73692VW; + ENABLE_HARDENED_RUNTIME = YES; + ENABLE_POINTER_AUTHENTICATION = YES; + MACOSX_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + }; + name = "Debug-arm64e"; + }; + E9958CDC2FAB79100073036F /* Debug-arm64e configuration for PBXNativeTarget "com.mxiris.runtimeviewer.service" */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = D5Q73692VW; + ENABLE_HARDENED_RUNTIME = YES; + ENABLE_POINTER_AUTHENTICATION = NO; + MACOSX_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_APPROACHABLE_CONCURRENCY = YES; + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; + SWIFT_VERSION = 5.0; + }; + name = "Debug-arm64e"; + }; E9A9CCE52F5D880400A10DD3 /* Debug configuration for PBXNativeTarget "dev.mxiris.runtimeviewer.service" */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1550,6 +1797,7 @@ isa = XCConfigurationList; buildConfigurations = ( E9432FED2C0D614A00362862 /* Debug configuration for PBXProject "RuntimeViewerUsingAppKit" */, + E9958CD62FAB79100073036F /* Debug-arm64e configuration for PBXProject "RuntimeViewerUsingAppKit" */, E9432FEE2C0D614A00362862 /* Release configuration for PBXProject "RuntimeViewerUsingAppKit" */, ); defaultConfigurationName = Release; @@ -1558,6 +1806,7 @@ isa = XCConfigurationList; buildConfigurations = ( E9432FF02C0D614A00362862 /* Debug configuration for PBXNativeTarget "RuntimeViewerUsingAppKit" */, + E9958CD72FAB79100073036F /* Debug-arm64e configuration for PBXNativeTarget "RuntimeViewerUsingAppKit" */, E9432FF12C0D614A00362862 /* Release configuration for PBXNativeTarget "RuntimeViewerUsingAppKit" */, ); defaultConfigurationName = Release; @@ -1566,6 +1815,7 @@ isa = XCConfigurationList; buildConfigurations = ( E947C3782C2A4D0500296B2E /* Debug configuration for PBXNativeTarget "RuntimeViewerCatalystHelper" */, + E9958CD82FAB79100073036F /* Debug-arm64e configuration for PBXNativeTarget "RuntimeViewerCatalystHelper" */, E947C3792C2A4D0500296B2E /* Release configuration for PBXNativeTarget "RuntimeViewerCatalystHelper" */, ); defaultConfigurationName = Release; @@ -1574,6 +1824,7 @@ isa = XCConfigurationList; buildConfigurations = ( E9A9CCE52F5D880400A10DD3 /* Debug configuration for PBXNativeTarget "dev.mxiris.runtimeviewer.service" */, + E9958CDB2FAB79100073036F /* Debug-arm64e configuration for PBXNativeTarget "dev.mxiris.runtimeviewer.service" */, E9A9CCE62F5D880400A10DD3 /* Release configuration for PBXNativeTarget "dev.mxiris.runtimeviewer.service" */, ); defaultConfigurationName = Release; @@ -1582,6 +1833,7 @@ isa = XCConfigurationList; buildConfigurations = ( E9E900DE2C2CF9A500FADDCC /* Debug configuration for PBXNativeTarget "RuntimeViewerCatalystHelperPlugin" */, + E9958CD92FAB79100073036F /* Debug-arm64e configuration for PBXNativeTarget "RuntimeViewerCatalystHelperPlugin" */, E9E900DF2C2CF9A500FADDCC /* Release configuration for PBXNativeTarget "RuntimeViewerCatalystHelperPlugin" */, ); defaultConfigurationName = Release; @@ -1590,6 +1842,7 @@ isa = XCConfigurationList; buildConfigurations = ( E9E900ED2C2D0D5B00FADDCC /* Debug configuration for PBXNativeTarget "com.JH.RuntimeViewerService" */, + E9958CDA2FAB79100073036F /* Debug-arm64e configuration for PBXNativeTarget "com.JH.RuntimeViewerService" */, E9E900EE2C2D0D5B00FADDCC /* Release configuration for PBXNativeTarget "com.JH.RuntimeViewerService" */, ); defaultConfigurationName = Release; @@ -1598,6 +1851,7 @@ isa = XCConfigurationList; buildConfigurations = ( E9EC5BCA2F1CBDBA00859091 /* Debug configuration for PBXNativeTarget "com.mxiris.runtimeviewer.service" */, + E9958CDC2FAB79100073036F /* Debug-arm64e configuration for PBXNativeTarget "com.mxiris.runtimeviewer.service" */, E9EC5BCB2F1CBDBA00859091 /* Release configuration for PBXNativeTarget "com.mxiris.runtimeviewer.service" */, ); defaultConfigurationName = Release; From 63688336bf05f888ab747babb9aee6cefcfe07d2 Mon Sep 17 00:00:00 2001 From: Mx-Iris Date: Wed, 6 May 2026 21:35:27 +0800 Subject: [PATCH 7/8] refactor(debug-arm64e-runscript): use Debug-arm64e configuration Switches RunScript.sh to the new Debug-arm64e configuration instead of forcing ARCHS=arm64e ONLY_ACTIVE_ARCH=NO on the command line. The previous override broke macro plugins (FrameworkToolboxMacros, MemberwiseInitMacros, MachOMacros, etc.) because they have VALID_ARCHS=arm64 and cannot be built for arm64e. The Debug-arm64e configuration applies EPA=YES only to the two targets that need an arm64e slice (RuntimeViewerServer.framework, dev.mxiris.runtimeviewer.service); macros and the main app continue to build arm64-only. Also tightens the .app discovery to skip RuntimeViewerCatalystHelper.app, and updates the script header to describe the new approach. --- RunScript.sh | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/RunScript.sh b/RunScript.sh index 4575285..2058d66 100755 --- a/RunScript.sh +++ b/RunScript.sh @@ -1,7 +1,11 @@ #!/usr/bin/env bash -# RunScript.sh — Build and launch a Debug + arm64e RuntimeViewer using -# xcodebuild from the command line. The Xcode GUI fails to compile under -# iOSPackagesShouldBuildARM64e=true; this script bypasses that bug. +# RunScript.sh — Build and launch RuntimeViewer with the Debug-arm64e +# configuration via xcodebuild. The Debug-arm64e configuration adds an +# arm64e slice only to the targets that need to inspect arm64e processes +# (RuntimeViewerServer.framework, dev.mxiris.runtimeviewer.service); the +# main app stays arm64-only just like Debug. The Xcode GUI fails to +# compile under iOSPackagesShouldBuildARM64e=true, so xcodebuild from the +# command line is the only working path. # # Usage: # ./RunScript.sh # build + launch @@ -21,7 +25,7 @@ cd "$PROJECT_DIR" WORKSPACE="RuntimeViewer-Debug.xcworkspace" SCHEME="RuntimeViewer macOS" CATALYST_SCHEME="RuntimeViewerCatalystHelper" -CONFIGURATION="Debug" +CONFIGURATION="Debug-arm64e" BUILD_NUMBER="$(date +"%Y%m%d.%H.%M")" DERIVED_DATA="$PROJECT_DIR/DerivedData/Debug-arm64e" @@ -79,7 +83,7 @@ while [[ $# -gt 0 ]]; do --update-packages) UPDATE_PACKAGES=true; shift;; --no-launch) LAUNCH=false; shift;; --dry-run) DRY_RUN=true; shift;; - -h|--help) sed -n '2,14p' "$0" | sed 's/^# *//'; exit 0;; + -h|--help) sed -n '2,18p' "$0" | sed 's/^# *//'; exit 0;; *) fail "unknown argument: $1";; esac done @@ -124,7 +128,7 @@ if $UPDATE_PACKAGES; then update_packages fi -log "Building Catalyst helper (arm64e)" +log "Building Catalyst helper" XCODEBUILD_LOG_NAME="build-catalyst-helper" run_piped xcodebuild build \ -workspace "$WORKSPACE" \ -scheme "$CATALYST_SCHEME" \ @@ -132,10 +136,9 @@ XCODEBUILD_LOG_NAME="build-catalyst-helper" run_piped xcodebuild build \ -destination 'generic/platform=macOS,variant=Mac Catalyst' \ -derivedDataPath "$DERIVED_DATA" \ -skipPackagePluginValidation -skipMacroValidation \ - ARCHS=arm64e ONLY_ACTIVE_ARCH=NO \ "CURRENT_PROJECT_VERSION=$BUILD_NUMBER" -log "Building main app (arm64e)" +log "Building main app" XCODEBUILD_LOG_NAME="build-main" run_piped xcodebuild build \ -workspace "$WORKSPACE" \ -scheme "$SCHEME" \ @@ -143,13 +146,13 @@ XCODEBUILD_LOG_NAME="build-main" run_piped xcodebuild build \ -destination 'generic/platform=macOS' \ -derivedDataPath "$DERIVED_DATA" \ -skipPackagePluginValidation -skipMacroValidation \ - ARCHS=arm64e ONLY_ACTIVE_ARCH=NO \ "CURRENT_PROJECT_VERSION=$BUILD_NUMBER" PRODUCTS_DIR="$DERIVED_DATA/Build/Products/$CONFIGURATION" APP_PATH="" if [[ -d "$PRODUCTS_DIR" ]]; then - APP_PATH=$(find "$PRODUCTS_DIR" -maxdepth 1 -type d -name '*.app' | head -1) + APP_PATH=$(find "$PRODUCTS_DIR" -maxdepth 1 -type d -name 'RuntimeViewer*.app' \ + -not -name 'RuntimeViewerCatalystHelper.app' | head -1) fi if $DRY_RUN; then APP_PATH="${APP_PATH:-}" From 85599d57b289e7ae2df69c726605a9e88f7cc357 Mon Sep 17 00:00:00 2001 From: Mx-Iris Date: Wed, 6 May 2026 21:42:31 +0800 Subject: [PATCH 8/8] docs(debug-arm64e-runscript): align design and plan with Debug-arm64e configuration Updates the design and plan to reflect the final approach: a Debug-arm64e build configuration (per-target EPA=YES on the two arm64e-needing targets) instead of a command-line ARCHS=arm64e override that broke macro plugins. The lipo verification steps are also rewritten to check RuntimeViewerServer.framework and dev.mxiris.runtimeviewer.service instead of the main app, which deliberately stays arm64-only under Debug-arm64e. --- ...026-05-06-debug-arm64e-runscript-design.md | 79 ++++++++++++++----- .../2026-05-06-debug-arm64e-runscript-plan.md | 55 +++++++------ 2 files changed, 91 insertions(+), 43 deletions(-) diff --git a/Documentations/Plans/2026-05-06-debug-arm64e-runscript-design.md b/Documentations/Plans/2026-05-06-debug-arm64e-runscript-design.md index 89a0296..88783cd 100644 --- a/Documentations/Plans/2026-05-06-debug-arm64e-runscript-design.md +++ b/Documentations/Plans/2026-05-06-debug-arm64e-runscript-design.md @@ -23,8 +23,11 @@ - 提供 `RuntimeViewer-Debug.xcworkspace`:内容等于 `RuntimeViewer.xcworkspace`(保留本地兄弟仓库引用)+ `iOSPackagesShouldBuildARM64e=true`。 -- 提供 `RunScript.sh`:用 `xcodebuild` 命令行构建并启动 Debug + arm64e - 版本的主 app,避开 GUI bug。 +- 在 `RuntimeViewerUsingAppKit.xcodeproj` 与 `RuntimeViewerServer.xcodeproj` + 里新增 `Debug-arm64e` build configuration,专为 RunScript.sh 服务, + 其他时候(GUI 编 Debug、ArchiveScript 编 Release/Distribution)完全不受影响。 +- 提供 `RunScript.sh`:用 `xcodebuild` 命令行 + `Debug-arm64e` configuration + 构建并启动主 app,避开 GUI bug。 - 不引入 archive / export / notarize / appcast / upload / commit 等发版步骤 (这些归 `ArchiveScript.sh` 管)。 @@ -68,7 +71,31 @@ RuntimeViewer-Debug.xcworkspace/ 不创建 `xcuserdata` 目录(按需自动生成)。 -### 2. 新增 `RunScript.sh` +### 2. 新增 Debug-arm64e build configuration + +在两个 `.xcodeproj` 里都加一条与 `Debug` 平行的 `Debug-arm64e` +configuration。它是 `Debug` 的复制,唯一差别在于以下两个 target 的 +`ENABLE_POINTER_AUTHENTICATION` 设为 `YES`: + +- `RuntimeViewerServer.framework` (RuntimeViewerServer.xcodeproj) +- `dev.mxiris.runtimeviewer.service` (RuntimeViewerUsingAppKit.xcodeproj) + +这两个 target 是 inspect 别的 arm64e 进程的执行体;只有它们需要 arm64e +切片,其它 target(主 app、Catalyst helper、bundle 等)保持 `EPA=NO`, +跟 Debug 行为一致。 + +为什么不在命令行用 `ARCHS=arm64e ONLY_ACTIVE_ARCH=NO` 强制: +项目依赖里有大量 SwiftMacro plugin(`FrameworkToolboxMacros` / +`MemberwiseInitMacros` / `MachOMacros` 等),它们是 build-host +executable,`VALID_ARCHS=arm64`,不能被强制成 arm64e。命令行 ARCHS +override 是全局的,会一并污染这些 plugin → plugin 编不出来 → 主 target +找不到 plugin → build 整体失败。 + +`ENABLE_POINTER_AUTHENTICATION=YES` 是 per-target build setting, +让 Apple Silicon 上的 `ARCHS_STANDARD` 自动展开为 `arm64 arm64e`, +不影响 macros,也不需要任何命令行 override。 + +### 3. 新增 `RunScript.sh` 模仿 `ArchiveScript.sh` 的骨架,复用其工具函数和参数解析风格。 @@ -79,7 +106,7 @@ RuntimeViewer-Debug.xcworkspace/ | `WORKSPACE` | `RuntimeViewer-Debug.xcworkspace` | | `SCHEME` | `RuntimeViewer macOS` | | `CATALYST_SCHEME` | `RuntimeViewerCatalystHelper` | -| `CONFIGURATION` | `Debug` | +| `CONFIGURATION` | `Debug-arm64e` | | `BUILD_NUMBER` | `$(date +"%Y%m%d.%H.%M")` | | `DERIVED` | `$PROJECT_DIR/DerivedData/Debug-arm64e` | | `LAUNCH` | `true` | @@ -135,7 +162,6 @@ DerivedData 互相污染(GUI 那份编译失败的产物不会被命令行复 -destination 'generic/platform=macOS,variant=Mac Catalyst' \ -derivedDataPath "$DERIVED" \ -skipPackagePluginValidation -skipMacroValidation \ - ARCHS=arm64e ONLY_ACTIVE_ARCH=NO \ "CURRENT_PROJECT_VERSION=$BUILD_NUMBER" ``` @@ -149,21 +175,22 @@ DerivedData 互相污染(GUI 那份编译失败的产物不会被命令行复 -destination 'generic/platform=macOS' \ -derivedDataPath "$DERIVED" \ -skipPackagePluginValidation -skipMacroValidation \ - ARCHS=arm64e ONLY_ACTIVE_ARCH=NO \ "CURRENT_PROJECT_VERSION=$BUILD_NUMBER" ``` -5. 在 `$DERIVED/Build/Products/Debug/` 下定位 `*.app`,记录路径。 +5. 在 `$DERIVED/Build/Products/Debug-arm64e/` 下定位 `RuntimeViewer*.app` + (排除 `RuntimeViewerCatalystHelper.app`),记录路径。 6. 默认 `open "$APP_PATH"`(`--no-launch` 跳过)。 7. log 输出主 app 路径。 -#### 强制 arm64e 的两层保险 +#### arm64e 切片的来源 -- workspace 层:`iOSPackagesShouldBuildARM64e=true` 让 SPM 包构建 arm64e -- 命令行层:`ARCHS=arm64e ONLY_ACTIVE_ARCH=NO` 强制主 app target - 只产 arm64e 切片(覆盖工程 default ARCHS) +- workspace 层:`iOSPackagesShouldBuildARM64e=true` 让 SPM 包带 arm64e 切片 +- 工程层:`Debug-arm64e` configuration 给两个目标 target 设 + `ENABLE_POINTER_AUTHENTICATION=YES`,使其 binary 在 Apple Silicon 上 + 自动包含 arm64e 切片 -两层一起保证产物纯 arm64e,方便挂调试器时不会因架构不匹配出错。 +不传任何命令行 ARCHS override,避免污染 macro plugin 等 build-host 工具。 ## 验证与回退 @@ -173,23 +200,37 @@ DerivedData 互相污染(GUI 那份编译失败的产物不会被命令行复 2. 确认 `Products/Logs/01-build-catalyst-helper.log` 与 `Products/Logs/02-build-main.log` 都存在且无错误。 3. `.app` 自动启动,菜单 → "About RuntimeViewer" 看到 build number。 -4. 终端运行 `lipo -info "/Contents/MacOS/"`, - 预期输出包含 `arm64e`,**不**包含 `arm64`。 +4. 终端运行(`` 为 `RuntimeViewer-Debug.app` 路径): + + ```bash + lipo -info "/Contents/Resources/RuntimeViewerServer.framework/RuntimeViewerServer" + lipo -info "/Contents/Library/LaunchServices/dev.mxiris.runtimeviewer.service" + lipo -info "/Contents/MacOS/RuntimeViewer-Debug" + ``` + + 预期前两个输出包含 `arm64e`,第三个(主 app)**不**包含 + `arm64e`(主 app 在 Debug-arm64e 下保持 `EPA=NO`,跟 Debug 一致)。 5. 重跑 `./RunScript.sh --no-launch`,验证不会自动启动。 6. 重跑 `./RunScript.sh --dry-run`,验证只打印命令。 ### 回退方案 -- 若发现 workspace 写法或脚本有问题,可直接删除 - `RuntimeViewer-Debug.xcworkspace` 与 `RunScript.sh`,不影响其他流程。 -- 任何 commit 都拆成可单独 revert 的小 commit(workspace 一个,脚本一个)。 +- 若 RunScript 出问题:删除 `RunScript.sh` 即可。 +- 若 `Debug-arm64e` configuration 有问题:在 Xcode 里 Project → Editor → + 删 Debug-arm64e configuration(两个 .xcodeproj 各一次)。 +- 若 Debug workspace 有问题:删除 `RuntimeViewer-Debug.xcworkspace/` 整个目录。 +- commit 拆成可单独 revert 的部分(workspace、configuration、脚本各自一个 commit)。 ## 风险 - **Xcode GUI bug 依旧存在**:用户若直接在 Xcode 里 ⌘B 这个 Debug - workspace 仍会失败。脚本只解决命令行编译,不解决 GUI 编译。 - 在脚本头部 / README 注释里需要说明这一点。 + workspace 仍会失败(`iOSPackagesShouldBuildARM64e=true` 在 GUI 下触发 + Xcode bug)。脚本只解决命令行编译,不解决 GUI 编译。 - **DerivedData 体积**:`Debug-arm64e` 与 GUI DerivedData 并存可能多 占几 GB 磁盘。可接受,必要时手动删除。 - **arm64e 调试器**:arm64e 在非 Apple 内部环境下需要启动 `boot-args` 加 `-arm64e_preview_abi`。这是已有约束,本设计不解决。 +- **新 configuration 的维护成本**:将来给项目加新 target 时,要记得给 + `Debug-arm64e` 也建对应的 build configuration block,否则该 target 在 + RunScript 跑时会回落到 project-level default 行为。Xcode 加 target 的 + GUI 流程会自动处理,手写 .pbxproj 才需要注意。 diff --git a/Documentations/Plans/2026-05-06-debug-arm64e-runscript-plan.md b/Documentations/Plans/2026-05-06-debug-arm64e-runscript-plan.md index 18cdcca..bd1c026 100644 --- a/Documentations/Plans/2026-05-06-debug-arm64e-runscript-plan.md +++ b/Documentations/Plans/2026-05-06-debug-arm64e-runscript-plan.md @@ -2,9 +2,9 @@ > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. -**Goal:** 新增 `RuntimeViewer-Debug.xcworkspace` 与 `RunScript.sh`,通过命令行 xcodebuild 编译并启动 Debug + arm64e 版本主 app,绕开 Xcode GUI 在 arm64e 模式下的编译 bug。 +**Goal:** 新增 `RuntimeViewer-Debug.xcworkspace`、`Debug-arm64e` build configuration、`RunScript.sh`,通过命令行 xcodebuild 编译并启动只在两个目标 target 带 arm64e 切片的 Debug 版本主 app,绕开 Xcode GUI 在 arm64e 模式下的编译 bug。 -**Architecture:** 复制 `RuntimeViewer.xcworkspace` 的本地依赖工作区,叠加 `iOSPackagesShouldBuildARM64e=true`;脚本骨架与工具函数模仿 `ArchiveScript.sh`,但只保留构建 + launch 流程,去除 archive / export / notarize / appcast / upload 等发版步骤;通过命令行参数 `ARCHS=arm64e ONLY_ACTIVE_ARCH=NO` 强制主 app 切片为纯 arm64e。 +**Architecture:** 复制 `RuntimeViewer.xcworkspace` 的本地依赖工作区,叠加 `iOSPackagesShouldBuildARM64e=true`;在 `RuntimeViewerUsingAppKit.xcodeproj` 与 `RuntimeViewerServer.xcodeproj` 里增加 `Debug-arm64e` configuration(基于 Debug,仅给 `RuntimeViewerServer.framework` 和 `dev.mxiris.runtimeviewer.service` 两个 target 设 `EPA=YES`);脚本骨架与工具函数模仿 `ArchiveScript.sh`,去除发版步骤,使用 `-configuration Debug-arm64e` 让需要 arm64e 切片的 target 自然拿到该切片;不传命令行 ARCHS override 以避免污染 SwiftMacro plugin 等 build-host 工具。 **Tech Stack:** bash, xcodebuild, xcbeautify(可选) @@ -18,7 +18,9 @@ |------|------|------| | 创建 | `RuntimeViewer-Debug.xcworkspace/contents.xcworkspacedata` | 工作区文件引用列表(与 `RuntimeViewer.xcworkspace` 一致,含本地兄弟仓库) | | 创建 | `RuntimeViewer-Debug.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings` | `iOSPackagesShouldBuildARM64e=true` 等 workspace 级开关 | -| 创建 | `RunScript.sh` | 命令行 Debug + arm64e 构建 / 启动入口 | +| 修改 | `RuntimeViewerUsingAppKit/RuntimeViewerUsingAppKit.xcodeproj/project.pbxproj` | 给所有 target + project 增加 `Debug-arm64e` build configuration(dev.mxiris.runtimeviewer.service 设 `EPA=YES`,其余沿用 Debug) | +| 修改 | `RuntimeViewerServer/RuntimeViewerServer.xcodeproj/project.pbxproj` | 给 RuntimeViewerServer/RuntimeViewerMobileServer + project 增加 `Debug-arm64e`(RuntimeViewerServer 设 `EPA=YES`) | +| 创建 | `RunScript.sh` | 命令行 `Debug-arm64e` 配置构建 / 启动入口 | --- @@ -156,7 +158,7 @@ cd "$PROJECT_DIR" WORKSPACE="RuntimeViewer-Debug.xcworkspace" SCHEME="RuntimeViewer macOS" CATALYST_SCHEME="RuntimeViewerCatalystHelper" -CONFIGURATION="Debug" +CONFIGURATION="Debug-arm64e" BUILD_NUMBER="$(date +"%Y%m%d.%H.%M")" DERIVED_DATA="$PROJECT_DIR/DerivedData/Debug-arm64e" @@ -343,7 +345,7 @@ fi 继续追加: ```bash -log "Building Catalyst helper (arm64e)" +log "Building Catalyst helper" XCODEBUILD_LOG_NAME="build-catalyst-helper" run_piped xcodebuild build \ -workspace "$WORKSPACE" \ -scheme "$CATALYST_SCHEME" \ @@ -351,7 +353,6 @@ XCODEBUILD_LOG_NAME="build-catalyst-helper" run_piped xcodebuild build \ -destination 'generic/platform=macOS,variant=Mac Catalyst' \ -derivedDataPath "$DERIVED_DATA" \ -skipPackagePluginValidation -skipMacroValidation \ - ARCHS=arm64e ONLY_ACTIVE_ARCH=NO \ "CURRENT_PROJECT_VERSION=$BUILD_NUMBER" ``` @@ -360,7 +361,7 @@ XCODEBUILD_LOG_NAME="build-catalyst-helper" run_piped xcodebuild build \ 继续追加: ```bash -log "Building main app (arm64e)" +log "Building main app" XCODEBUILD_LOG_NAME="build-main" run_piped xcodebuild build \ -workspace "$WORKSPACE" \ -scheme "$SCHEME" \ @@ -368,13 +369,13 @@ XCODEBUILD_LOG_NAME="build-main" run_piped xcodebuild build \ -destination 'generic/platform=macOS' \ -derivedDataPath "$DERIVED_DATA" \ -skipPackagePluginValidation -skipMacroValidation \ - ARCHS=arm64e ONLY_ACTIVE_ARCH=NO \ "CURRENT_PROJECT_VERSION=$BUILD_NUMBER" PRODUCTS_DIR="$DERIVED_DATA/Build/Products/$CONFIGURATION" APP_PATH="" if [[ -d "$PRODUCTS_DIR" ]]; then - APP_PATH=$(find "$PRODUCTS_DIR" -maxdepth 1 -type d -name '*.app' | head -1) + APP_PATH=$(find "$PRODUCTS_DIR" -maxdepth 1 -type d -name 'RuntimeViewer*.app' \ + -not -name 'RuntimeViewerCatalystHelper.app' | head -1) fi if $DRY_RUN; then APP_PATH="${APP_PATH:-}" @@ -477,29 +478,35 @@ EOF - `iOSPackagesShouldBuildARM64e` 未生效(确认 Task 1 Step 2 的 plist 写对了) - 本地兄弟仓库不存在(确认 `../MachOKit` 等仓库都在) -- [ ] **Step 2: 用 lipo 验证主 app 切片** +- [ ] **Step 2: 用 lipo 验证关键二进制的切片** ```bash -APP_PATH=$(find DerivedData/Debug-arm64e/Build/Products/Debug -maxdepth 1 -type d -name '*.app' | head -1) -BINARY_NAME=$(/usr/libexec/PlistBuddy -c "Print :CFBundleExecutable" "$APP_PATH/Contents/Info.plist") -lipo -info "$APP_PATH/Contents/MacOS/$BINARY_NAME" -``` +APP_PATH=$(find DerivedData/Debug-arm64e/Build/Products/Debug-arm64e \ + -maxdepth 1 -type d -name 'RuntimeViewer*.app' \ + -not -name 'RuntimeViewerCatalystHelper.app' | head -1) -预期: +# 主 app(EPA=NO,预期 arm64-only,不含 arm64e) +lipo -info "$APP_PATH/Contents/MacOS/RuntimeViewer-Debug" -``` -Non-fat file: .../Contents/MacOS/RuntimeViewer is architecture: arm64e +# RuntimeViewerServer.framework(EPA=YES,预期含 arm64e) +lipo -info "$APP_PATH/Contents/Resources/RuntimeViewerServer.framework/RuntimeViewerServer" + +# dev.mxiris.runtimeviewer.service(EPA=YES,预期含 arm64e) +lipo -info "$APP_PATH/Contents/Library/LaunchServices/dev.mxiris.runtimeviewer.service" ``` -或: +预期输出: ``` -Architectures in the fat file: ... are: arm64e +... RuntimeViewer-Debug are: x86_64 arm64 +... RuntimeViewerServer are: x86_64 arm64 arm64e +... dev.mxiris.runtimeviewer.service are: x86_64 arm64 arm64e ``` -**必须** 输出 `arm64e`,**不应**单独出现 `arm64`(无 e 后缀)。 - -如果出现 `arm64` 而非 `arm64e`,说明命令行 `ARCHS=arm64e` 未生效,回到 Task 3 Step 2/3 检查命令行参数。 +主 app **不应**含 `arm64e`(因为它在 Debug-arm64e 下保持 EPA=NO)。 +后两者**必须**含 `arm64e`,否则说明 Debug-arm64e configuration 在该 +target 上的 `ENABLE_POINTER_AUTHENTICATION=YES` 设置丢失,回到工程 +build settings 检查。 - [ ] **Step 3: 真实启动** @@ -531,7 +538,7 @@ git status - ✅ Catalyst helper 不可跳过 → Task 3 Step 2(无 `--skip-catalyst-helper` 开关) - ✅ 主 app build → Task 3 Step 3 - ✅ 编译完默认 `open .app` → Task 3 Step 4 -- ✅ 强制 arm64e(命令行 `ARCHS=arm64e ONLY_ACTIVE_ARCH=NO`)→ Task 3 Step 2/3 +- ✅ arm64e 切片只落到目标 target(RuntimeViewerServer.framework、dev.mxiris.runtimeviewer.service)→ 由 `Debug-arm64e` configuration 的 `ENABLE_POINTER_AUTHENTICATION=YES` 提供(前置 Setup,已 commit),脚本不传任何 ARCHS override - ✅ Workspace 层 arm64e(`iOSPackagesShouldBuildARM64e=true`)→ Task 1 Step 2 - ✅ DerivedData 独立路径 → Task 2 Step 1 - ✅ lipo 验证 arm64e → Task 4 Step 2 @@ -541,6 +548,6 @@ git status **Type / 命名一致性:** 变量名 `WORKSPACE` / `SCHEME` / `CATALYST_SCHEME` / `CONFIGURATION` / `BUILD_NUMBER` / `DERIVED_DATA` / `UPDATE_PACKAGES` / `LAUNCH` / `DRY_RUN` / `LOG_DIR` / `XCODEBUILD_LOG_INDEX` / `XCODEBUILD_LOG_NAME` 在 Task 2 / Task 3 之间引用一致;函数名 `fail` / `log` / `pretty` / `run` / `run_piped` / `update_packages` 一致。 -**Commit 边界:** 三个 commit(workspace / 脚本骨架 / 编译流程)独立可 revert,不互相依赖到对方未 commit 的代码。 +**Commit 边界:** workspace、Debug-arm64e configuration、脚本骨架、编译流程各自独立 commit,可单独 revert,互不依赖对方未 commit 的代码。 无需修改,进入 handoff。