一个提供与Xcode操作相关的工具的MCP(模型上下文协议)服务器,使得从如Claude Desktop这样的MCP客户端更容易地处理Xcode项目。该服务器提供了各种用于Xcode项目管理、构建、测试、归档、代码签名以及相关iOS开发工具的实用程序。
npm install @devyhan/xcode-mcp
打开Claude Desktop配置文件:
# macOS
open ~/Library/Application\ Support/Claude/claude_desktop_config.json
添加或修改以下配置:
{
"mcpServers": {
"xcode-mcp": {
"command": "npx",
"args": [
"@devyhan/xcode-mcp",
"-y"
]
}
}
}
重启Claude Desktop。
获取有关Xcode项目或工作区的详细信息,包括目标、配置和方案。
参数:
projectPath(必需):指向Xcode项目(.xcodeproj)或工作区(.xcworkspace)的路径示例:
项目路径: /Users/username/Projects/MyApp/MyApp.xcodeproj
样本输出:
{
"project": {
"name": "MyApp",
"targets": ["MyApp", "MyAppTests", "MyAppUITests"],
"configurations": ["Debug", "Release"],
"schemes": ["MyApp"]
}
}
提供Xcode项目或工作区中所有可用方案、目标和配置的综合列表。
参数:
projectPath(必需):指向Xcode项目(.xcodeproj)或工作区(.xcworkspace)的路径示例:
项目路径: /Users/username/Projects/MyApp/MyApp.xcodeproj
样本输出:
关于项目"MyApp"的信息:
目标:
MyApp
MyAppTests
MyAppUITests
构建配置:
Debug
Release
方案:
MyApp
MyAppTests
构建Xcode项目或工作区,支持增强选项。支持工作区和项目的构建、清理构建和自定义输出目录。
参数:
projectPath(必需):指向Xcode项目(.xcodeproj)或工作区(.xcworkspace)的路径scheme(必需):要构建的方案configuration(可选):构建配置(例如,Debug,Release)destination(可选):构建目标(例如,'platform=iOS Simulator,name=iPhone 14')extraArgs(可选):附加的xcodebuild参数字符串数组outputDir(可选):自定义构建输出目录(SYMROOT)clean(可选):是否执行清理构建(默认:false)示例:
项目路径: /Users/username/Projects/MyApp/MyApp.xcodeproj
方案: MyAppScheme
配置: Debug
目标: platform=iOS Simulator,name=iPhone 14
清理: true
输出目录: /Users/username/Desktop/build
生成命令:
xcodebuild -project "/Users/username/Projects/MyApp/MyApp.xcodeproj" -scheme "MyAppScheme" clean build -configuration "Debug" -destination "platform=iOS Simulator,name=iPhone 14" SYMROOT="/Users/username/Desktop/build"
运行Xcode项目或工作区的测试,支持广泛的选项。提供对测试执行的细粒度控制,包括运行特定测试、测试计划和各种测试模式。
参数:
projectPath(必需):指向Xcode项目(.xcodeproj)或工作区(.xcworkspace)的路径scheme(必需):要测试的方案destination(必需):测试目标(例如,'platform=iOS Simulator,name=iPhone 14')testPlan(可选):要使用的测试计划名称onlyTesting(可选):要运行的具体测试标识符数组skipTesting(可选):要跳过的测试标识符数组resultBundlePath(可选):保存测试结果捆绑包的路径buildForTesting(可选):仅构建而不运行测试testWithoutBuilding(可选):不构建而运行测试示例:
项目路径: /Users/username/Projects/MyApp/MyApp.xcodeproj
方案: MyAppScheme
目标: platform=iOS Simulator,name=iPhone 14
仅测试: ["MyAppTests/LoginTests"]
结果捆绑包路径: /Users/username/Desktop/TestResults
生成命令:
xcodebuild -project "/Users/username/Projects/MyApp/MyApp.xcodeproj" -scheme "MyAppScheme" -destination "platform=i
OS Simulator,name=iPhone 14" test -only-testing:"MyAppTests/LoginTests" -resultBundlePath "/Users/username/Desktop/TestResults"
创建Xcode项目的归档(.xcarchive),并可选择导出为IPA文件以进行分发。支持通过导出选项plist进行App Store、ad-hoc和企业分发方法。
参数:
projectPath(必需):指向Xcode项目(.xcodeproj)或工作区(.xcworkspace)的路径scheme(必需):要归档的方案configuration(可选):构建配置(例如,Release)archivePath(必需):保存.xcarchive文件的路径exportPath(可选):导出归档的路径(例如,IPA文件)exportOptionsPlist(可选):导出选项.plist文件的路径示例:
项目路径: /Users/username/Projects/MyApp/MyApp.xcodeproj
方案: MyAppScheme
配置: Release
归档路径: /Users/username/Desktop/MyApp.xcarchive
导出路径: /Users/username/Desktop/Export
导出选项Plist: /Users/username/Projects/MyApp/exportOptions.plist
生成命令:
# 归档命令
xcodebuild -project "/Users/username/Projects/MyApp/MyApp.xcodeproj" -scheme "MyAppScheme" -configuration "Release" archive -archivePath "/Users/username/Desktop/MyApp.xcarchive"
# 导出命令(如果提供了exportPath和exportOptionsPlist)
xcodebuild -exportArchive -archivePath "/Users/username/Desktop/MyApp.xcarchive" -exportPath "/Users/username/Desktop/Export" -exportOptionsPlist "/Users/username/Projects/MyApp/exportOptions.plist"
获取Xcode项目的全面代码签名和配置文件信息。显示已安装的代码签名身份、项目代码签名设置以及系统上的配置文件。
参数:
projectPath(必需):指向Xcode项目(.xcodeproj)或工作区(.xcworkspace)的路径target(可选):具体的目标名称示例:
项目路径: /Users/username/Projects/MyApp/MyApp.xcodeproj
目标: MyAppTarget
样本输出:
代码签名证书列表:
1) 01AB2345CD6789EF0123456789ABCDEF01234567 "Apple Development: John Doe (ABC12DEF34)"
2) 9876543210FEDCBA98765432109876543210FEDC "Apple Distribution: Example Corp (XYZ12ABC3)"
项目代码签名设置:
CODE_SIGN_IDENTITY = Apple Development
CODE_SIGN_STYLE = Automatic
DEVELOPMENT_TEAM = ABC123DEF4
PROVISIONING_PROFILE_SPECIFIER =
已安装的配置文件:
-rw-r--r-- 1 username staff 12345 Feb 1 12:34 01234567-89ab-cdef-0123-456789abcdef.mobileprovision
-rw-r--r-- 1 username staff 23456 Mar 15 09:12 fedcba98-7654-3210-fedc-ba9876543210.mobileprovision
提供访问Swift包管理器(SPM)功能以管理Swift包。支持常见的SPM命令,如初始化、更新、解析、重置和清理。
参数:
command(必需):要执行的SPM命令("init","update","resolve","reset","clean")packageDir(必需):Swift包的目录路径extraArgs(可选):附加的SPM参数字符串数组示例:
命令: update
包目录: /Users/username/Projects/MySwiftPackage
额外参数: ["--enable-pubgrub-resolver"]
生成命令:
cd "/Users/username/Projects/MySwiftPackage" && swift package update --enable-pubgrub-resolver
样本输出:
正在解析依赖项...
正在获取 https://github.com/example/example-package.git
正在检出 https://github.com/example/example-package.git 在 1.2.3
通过simctl命令行工具提供访问iOS模拟器管理功能的能力。支持列出、创建、启动、安装应用和管理模拟器设备。
参数:
command(必需):SimCtl命令("list","create","boot","shutdown","erase","install","launch","delete")extraArgs(可选):附加的simctl参数字符串数组示例:
命令: list
额外参数: ["devices", "--json"]
生成命令:
xcrun simctl list devices --json
样本输出(简化):
{
"devices": {
"com.apple.CoreSimulator.SimRuntime.iOS-17-0": [
{
"name": "iPhone 14",
"udid": "12345678-1234-1234-1234-123456789ABC",
"state": "Booted",
"isAvailable": true
}
]
}
}
在物理iOS设备上构建、安装和运行应用。支持设备名称(包括韩语名称)或UUID选择设备、环境变量和日志流。现在支持直接指定bundleId、跳过构建选项和附加启动参数。
参数:
projectPath(必需):指向Xcode项目(.xcodeproj)或工作区(.xcworkspace)的路径scheme(必需):要构建和运行的方案device(必需):设备标识符或名称(支持韩语名称)configuration(可选):构建配置(例如,Debug,Release)streamLogs(可选):启动后是否流式传输设备日志startStopped(可选):是否以暂停状态启动应用程序以便调试器连接environmentVars(可选):传递给应用的环境变量(key1=value1,key2=value2格式)xcodePath(可选):Xcode应用程序路径(默认:"/Applications/Xcode-16.2.0.app")listDevices(可选):在运行前显示所有检测到的设备及其IDskipBuild(可选):跳过已安装应用的构建和安装步骤extraLaunchArgs(可选):传递给devicectl启动命令的附加参数directBundleId(可选):直接指定bundleId而不是从项目中提取示例:
项目路径: /Users/username/Projects/MyApp/MyApp.xcodeproj
方案: MyAppScheme
设备: "Your-iPhone"
配置: Debug
流式传输日志: true
环境变量: "DEBUG_MODE=1,API_URL=https://test-api.example.com"
过程:
devicectl启动应用v0.4.0中的关键改进:
样本输出:
// 标准输出,包含构建和安装
应用运行结果:
使用com.example.myapp bundle标识符启动了应用。
日志流式传输已开始。可以在终端中查看日志。
// 直接使用bundleId跳过构建
设备型号: iPhone14,7
设备操作系统版本: 17.0
使用用户指定的bundleId: com.example.myapp
跳过构建和安装步骤
应用运行结果:
使用com.example.myapp bundle标识符启动了应用。
以下是如何提示像Claude这样的LLM按顺序使用这些工具的一个示例:
用户提示给Claude:
我需要检查我的Xcode项目,运行一些测试,然后归档它以进行分发。
1. 首先,使用xcode-list-schemes工具获取我在/Users/username/Projects/MyApp/MyApp.xcodeproj项目中的所有可用方案。
2. 查看方案后,在iPhone 14模拟器上运行第一个可用方案的测试。
3. 然后使用Release配置归档应用。
预期流程:
Claude将执行xcode-list-schemes工具以检索所有方案:
项目路径: /Users/username/Projects/MyApp/MyApp.xcodeproj
Claude将执行xcode-test工具,使用确定的方案:
项目路径: /Users/username/Projects/MyApp/MyApp.xcodeproj
方案: [从输出中获得的第一个方案]
目标: platform=iOS Simulator,name=iPhone 14
然后,Claude将使用xcode-archive工具创建归档:
项目路径: /Users/username/Projects/MyApp/MyApp.xcodeproj
方案: [从输出中获得的第一个方案]
配置: Release
归档路径: /Users/username/Desktop/MyApp.xcarchive
此流程演示了如何将多个工具链接在一起,使用一个工具的输出来告知另一个工具的参数。
用户提示给Claude:
我需要在我的真实设备上测试我的应用:
1. 获取可用设备列表(包括连接的物理设备)
2. 在我的连接的iPhone上运行我的应用
预期流程:
Claude首先获取设备列表:
listDevices: true
Claude识别您的物理设备并在其上运行应用:
项目路径: /Users/username/Projects/MyApp/MyApp.xcodeproj
方案: MyApp
设备: "Your iPhone"(或设备UUID)
流式传输日志: true
快速重新启动而不重新构建:
设备: "Your iPhone"
直接bundleId: "com.example.myapp"
跳过构建: true
此工具可以执行与Xcode相关的命令,这存在安全风险。请注意:
devicectl和真实设备功能是必需的)# 克隆仓库
git clone https://github.com/devyhan/xcode-mcp.git
cd xcode-mcp
# 安装依赖
npm install
# 开发模式运行
npm run dev
# 构建
npm run build
# 测试
npm test
MIT