You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用AppleScript获取Xcode当前项目/工作区路径?

如何用AppleScript获取Xcode当前项目/工作区路径并集成Git Diff工具

作为有20多年编程经验的开发者,AppleScript的语法确实有点反直觉,我来帮你搞定这个问题——先解决获取Xcode项目路径的核心需求,再把整个流程整合到Xcode行为里。

第一步:用AppleScript获取当前项目/工作区路径

下面的AppleScript代码可以直接和Xcode交互,拿到当前打开的项目或工作区的父目录(也就是你的Git仓库根目录,这才是bash脚本需要的路径):

tell application "Xcode"
    set currentDoc to document 1
    if currentDoc exists then
        -- 获取项目/工作区文件的路径
        set projectFilePath to path of currentDoc
        -- 转换为POSIX路径,并获取它的父文件夹(Git仓库所在目录)
        set projectRepoDir to POSIX path of (projectFilePath as alias)'s container
        -- 调用你的bash脚本,注意用quoted form处理带空格的路径
        do shell script "/绝对路径/到你的/diff-script.sh " & quoted form of projectRepoDir
    else
        display alert "Xcode提示" message "当前没有打开任何项目或工作区,请先打开一个Git仓库项目!"
    end if
end tell

代码说明:

  • tell application "Xcode":告诉系统我们要和Xcode应用交互
  • document 1:指向Xcode当前激活的项目/工作区文档
  • container:获取文件的父文件夹,因为.xcodeproj或.xcworkspace本身是一个包文件,我们需要进入它所在的Git仓库目录
  • quoted form:自动处理路径中的空格或特殊字符,避免bash执行出错

第二步:编写你的Git Diff Bash脚本

创建一个名为diff-script.sh的文件,内容如下,它会自动识别远程默认分支并执行git difftool:

#!/bin/bash

# 接收AppleScript传入的Git仓库路径
PROJECT_DIR="$1"

# 进入仓库目录,失败则退出
cd "$PROJECT_DIR" || exit 1

# 获取远程默认分支(Git 2.22+推荐用法,最准确)
DEFAULT_BRANCH=$(git symbolic-ref --short refs/remotes/origin/HEAD 2>/dev/null | sed 's/origin\///')

# 兼容旧版本Git:如果上面的命令失败,尝试常见的默认分支名
if [ -z "$DEFAULT_BRANCH" ]; then
    DEFAULT_BRANCH="main"
    # 检查main分支是否存在,不存在则用master
    if ! git rev-parse --verify "$DEFAULT_BRANCH" >/dev/null 2>&1; then
        DEFAULT_BRANCH="master"
    fi
fi

# 执行git difftool
echo "正在对比当前分支与默认分支:$DEFAULT_BRANCH"
git difftool "$DEFAULT_BRANCH"

脚本配置:

  1. 给脚本添加执行权限:
    chmod +x /绝对路径/到你的/diff-script.sh
    
  2. 记得把AppleScript里的/绝对路径/到你的/diff-script.sh替换成你实际的脚本路径

第三步:集成到Xcode行为

  1. 打开Xcode,进入Xcode > 设置 > 行为(英文是Xcode > Settings > Behaviors)
  2. 点击左下角的+号,新建一个行为,命名为「对比默认分支」(或你喜欢的名字)
  3. 在右侧「执行」区域,勾选「运行AppleScript」,把第一步的AppleScript代码粘贴进去
  4. 可选:给这个行为设置一个快捷键,方便快速调用

这样以后你在Xcode里打开项目时,触发这个行为就能自动打开diff工具对比当前分支和默认分支了!

内容的提问来源于stack exchange,提问作者Benedict Cohen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:10:23