xcode-mcp
MCP(模型上下文协议)服务器提供与 Xcode 相关的操作工具,方便用户通过 Claude Desktop 等 MCP 客户端处理 Xcode 项目。该服务器提供各种实用程序,用于 Xcode 项目管理、构建、测试、归档、代码签名以及相关的 iOS 开发工具。
特征
- Xcode 项目信息检索和方案列表
- 通过干净和自定义的输出选项增强构建功能
- 全面的测试执行和精细的控制
- 应用程序存档和 IPA 导出以供分发
- 代码签名和配置文件管理
- Swift 包管理器集成
- 通过 simctl 管理 iOS 模拟器
- 新功能:真实设备应用程序部署和启动,自动检测 Xcode 安装并改进设备管理
- 通过自动重试智能处理应用安装失败
- 智能缓存设备和 Xcode 信息以获得更好的性能
安装
npm install @devyhan/xcode-mcp
用法
与 Claude Desktop 一起使用
- 打开 Claude Desktop 配置文件:
# macOS
open ~/Library/Application\ Support/Claude/claude_desktop_config.json
- 添加或修改以下配置:
{
"mcpServers": {
"xcode-mcp": {
"command": "npx",
"args": [
"@devyhan/xcode-mcp",
"-y"
]
}
}
}
- 重新启动 Claude Desktop。
可用工具
1. xcode-项目信息
检索有关 Xcode 项目或工作区的详细信息,包括目标、配置和方案。
参数:
projectPath
(必需):Xcode 项目(.xcodeproj)或工作区(.xcworkspace)的路径
例子:
Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj
示例输出:
{
"project": {
"name": "MyApp",
"targets": ["MyApp", "MyAppTests", "MyAppUITests"],
"configurations": ["Debug", "Release"],
"schemes": ["MyApp"]
}
}
2. xcode-list-schemes
提供 Xcode 项目或工作区中所有可用方案、目标和配置的综合列表。
参数:
projectPath
(必需):Xcode 项目(.xcodeproj)或工作区(.xcworkspace)的路径
例子:
Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj
示例输出:
Information about project "MyApp":
Targets:
MyApp
MyAppTests
MyAppUITests
Build Configurations:
Debug
Release
Schemes:
MyApp
MyAppTests
3. xcode 构建
使用增强选项构建 Xcode 项目或工作区。支持工作区和项目构建、全新构建以及自定义输出目录。
参数:
projectPath
(必需):Xcode 项目(.xcodeproj)或工作区(.xcworkspace)的路径scheme
(必需):要构建的方案configuration
(可选):构建配置(例如,调试、发布)destination
(可选):构建目标(例如,“platform=iOS Simulator,name=iPhone 14”)extraArgs
(可选):作为字符串数组的附加 xcodebuild 参数outputDir
(可选):自定义构建输出目录(SYMROOT)clean
(可选):是否执行干净构建(默认值:false)
例子:
Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj
Scheme: MyAppScheme
Configuration: Debug
Destination: platform=iOS Simulator,name=iPhone 14
Clean: true
OutputDir: /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"
4. xcode 测试
使用丰富的选项为 Xcode 项目或工作区运行测试。提供对测试执行的细粒度控制,包括运行特定测试、测试计划和各种测试模式。
参数:
projectPath
(必需):Xcode 项目(.xcodeproj)或工作区(.xcworkspace)的路径scheme
(必需):要测试的方案destination
(必填):测试目的地(例如,“platform=iOS Simulator,name=iPhone 14”)testPlan
(可选):要使用的测试计划的名称onlyTesting
(可选):要运行的特定测试标识符数组skipTesting
(可选):要跳过的测试标识符数组resultBundlePath
(可选):保存测试结果包的路径buildForTesting
(可选):仅为测试而构建,不运行测试testWithoutBuilding
(可选):无需构建即可运行测试
例子:
Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj
Scheme: MyAppScheme
Destination: platform=iOS Simulator,name=iPhone 14
OnlyTesting: ["MyAppTests/LoginTests"]
ResultBundlePath: /Users/username/Desktop/TestResults
生成的命令:
xcodebuild -project "/Users/username/Projects/MyApp/MyApp.xcodeproj" -scheme "MyAppScheme" -destination "platform=iOS Simulator,name=iPhone 14" test -only-testing:"MyAppTests/LoginTests" -resultBundlePath "/Users/username/Desktop/TestResults"
5. xcode-archive
创建 Xcode 项目的存档 (.xcarchive),并可选择将其导出为 IPA 文件进行分发。通过导出选项 plist 支持 App Store、ad-hoc 和企业分发方式。
参数:
projectPath
(必需):Xcode 项目(.xcodeproj)或工作区(.xcworkspace)的路径scheme
(必需):要存档的方案configuration
(可选):构建配置(例如,发布)archivePath
(必需):保存 .xcarchive 文件的路径exportPath
(可选):导出档案的路径(例如 IPA 文件)exportOptionsPlist
(可选):exportOptions.plist 文件的路径
例子:
Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj
Scheme: MyAppScheme
Configuration: Release
ArchivePath: /Users/username/Desktop/MyApp.xcarchive
ExportPath: /Users/username/Desktop/Export
ExportOptionsPlist: /Users/username/Projects/MyApp/exportOptions.plist
生成的命令:
# Archive command
xcodebuild -project "/Users/username/Projects/MyApp/MyApp.xcodeproj" -scheme "MyAppScheme" -configuration "Release" archive -archivePath "/Users/username/Desktop/MyApp.xcarchive"
# Export command (if exportPath and exportOptionsPlist are provided)
xcodebuild -exportArchive -archivePath "/Users/username/Desktop/MyApp.xcarchive" -exportPath "/Users/username/Desktop/Export" -exportOptionsPlist "/Users/username/Projects/MyApp/exportOptions.plist"
6. xcode-codesign-info
检索 Xcode 项目的全面代码签名和配置文件信息。显示系统中已安装的代码签名标识、项目代码签名设置和配置文件。
参数:
projectPath
(必需):Xcode 项目(.xcodeproj)或工作区(.xcworkspace)的路径target
(可选):具体目标名称
例子:
Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj
Target: 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
7. swift 包管理器
提供对 Swift 包管理器 (SPM) 功能的访问,用于管理 Swift 包。支持 init、update、resolve、reset 和 clean 等常用 SPM 命令。
参数:
command
(必需):要执行的 SPM 命令(“init”、“update”、“resolve”、“reset”、“clean”)packageDir
(必需):Swift 包的目录路径extraArgs
(可选):作为字符串数组的附加 SPM 参数
例子:
Command: update
PackageDir: /Users/username/Projects/MySwiftPackage
ExtraArgs: ["--enable-pubgrub-resolver"]
生成的命令:
cd "/Users/username/Projects/MySwiftPackage" && swift package update --enable-pubgrub-resolver
示例输出:
Resolving dependencies...
Fetching https://github.com/example/example-package.git
Checking out https://github.com/example/example-package.git at 1.2.3
8. simctl 管理器
通过simctl
命令行工具提供对 iOS 模拟器管理功能的访问。支持列出、创建、启动、安装应用程序以及管理模拟器设备。
参数:
command
(必需):SimCtl 命令(“列表”、“创建”、“启动”、“关机”、“擦除”、“安装”、“启动”、“删除”)extraArgs
(可选):作为字符串数组的附加 simctl 参数
例子:
Command: list
ExtraArgs: ["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
}
]
}
}
9. 在设备上运行
在实体 iOS 设备上构建、安装并运行应用。支持使用设备名称(包括韩文名称)或 UUID 进行设备选择、环境变量和日志流传输。现支持直接指定 bundleId、跳过构建选项以及其他启动参数。
参数:
projectPath
(必需):Xcode 项目(.xcodeproj)或工作区(.xcworkspace)的路径scheme
(必需):要构建和运行的方案device
(必填):设备标识符或名称(支持韩文名称)configuration
(可选):构建配置(例如,调试、发布)streamLogs
(可选):启动后是否流式传输设备日志startStopped
(可选):是否在暂停状态下启动应用程序以进行调试器连接environmentVars
(可选):传递给应用程序的环境变量(key1=value1,key2=value2 格式)xcodePath
(可选):Xcode 应用程序路径(默认值:“/Applications/Xcode-16.2.0.app”)listDevices
(可选):运行前显示所有检测到的设备及其 IDskipBuild
(可选):跳过已安装应用程序的构建和安装步骤extraLaunchArgs
(可选):传递给 devicectl launch 命令的附加参数directBundleId
(可选):直接指定 bundle ID,而不是从项目中提取
例子:
Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj
Scheme: MyAppScheme
Device: "Your-iPhone"
Configuration: Debug
StreamLogs: true
EnvironmentVars: "DEBUG_MODE=1,API_URL=https://test-api.example.com"
过程:
- 该工具可识别指定设备的 Xcode UDID 和 CoreDevice UUID
- 它使用 Xcode UDID 来构建和安装应用程序
- 它使用 CoreDevice UUID 通过
devicectl
启动应用程序 - 它检索应用程序的包标识符
- 如果需要,它会传输设备日志
v0.4.0 中的关键改进:
- 无需项目即可直接指定 bundleId
- 跳过已安装应用程序的构建和安装步骤
- 支持额外的 devicectl 启动命令参数
- 更好的设备型号和操作系统版本信息显示
- 改进了 devicectl 命令的路径处理和日志记录
示例输出:
// Standard output with build and install
앱 실행 결과:
Launched application with com.example.myapp bundle identifier.
로그 스트리밍이 시작되었습니다. 로그는 터미널에서 확인할 수 있습니다.
// Direct bundle ID usage with skip build
기기 모델: iPhone14,7
기기 OS 버전: 17.0
사용자 지정 번들 ID 사용: com.example.myapp
빌드 및 설치 과정 건너뛰기
앱 실행 결과:
Launched application with com.example.myapp bundle identifier.
示例场景:与 LLM 一起使用
下面是一个示例,说明如何提示像 Claude 这样的法学硕士按顺序使用这些工具:
用户提示 Claude:
I need to inspect my Xcode project, run some tests, and then archive it for distribution.
1. First, use the xcode-list-schemes tool to get all available schemes for my project at /Users/username/Projects/MyApp/MyApp.xcodeproj
2. After you see the schemes, run tests for the first available scheme on the iPhone 14 simulator.
3. Then archive the app for distribution using the Release configuration.
预期工作流程:
- Claude 将执行
xcode-list-schemes
工具来检索所有方案:Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj
- Claude 将使用已识别的方案执行
xcode-test
工具:Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj
Scheme: [First scheme from output]
Destination: platform=iOS Simulator,name=iPhone 14
- 然后,Claude 将使用
xcode-archive
工具创建一个档案:Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj
Scheme: [First scheme from output]
Configuration: Release
ArchivePath: /Users/username/Desktop/MyApp.xcarchive
此工作流程演示了如何将多个工具链接在一起,使用一个工具的输出来通知另一个工具的参数。
示例:在真实设备上运行
用户提示 Claude:
I need to test my app on a real device:
1. Get the list of available devices (including connected physical devices)
2. Run my app on my connected iPhone
预期工作流程:
- Claude 首先会获取设备列表:
- Claude 将识别您的物理设备并在其上运行该应用程序:
Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj
Scheme: MyApp
Device: "Your iPhone" (or the device UUID)
StreamLogs: true
- 无需重建即可快速重新启动:
Device: "Your iPhone"
DirectBundleId: "com.example.myapp"
SkipBuild: true
安全注意事项
此工具可执行Xcode相关命令,存在安全风险,请注意:
- 仅与受信任的 Xcode 项目一起使用。
- 对来源不明的项目要谨慎。
- 不要在构建参数中包含敏感信息。
发展
要求
- Node.js 16 或更高版本
- npm 6 或更高版本
- Xcode 14 或更高版本(适用于所有功能)
- Xcode 16 或更高版本(
devicectl
和真实设备功能所需)
本地开发和测试
# Clone the repository
git clone https://github.com/devyhan/xcode-mcp.git
cd xcode-mcp
# Install dependencies
npm install
# Run in development mode
npm run dev
# Build
npm run build
# Test
npm test
执照
麻省理工学院