返回市场
xcode麦普

xcode麦普

作者:devyhan7 星标更新:2025-03-28

项目介绍

技术文档摘要

xcode-mcp

一个提供与Xcode操作相关的工具的MCP(模型上下文协议)服务器,使得从如Claude Desktop这样的MCP客户端更容易地处理Xcode项目。该服务器提供了各种用于Xcode项目管理、构建、测试、归档、代码签名以及相关iOS开发工具的实用程序。

功能

  • 获取Xcode项目信息和方案列表
  • 增强的构建能力,包括清理和自定义输出选项
  • 细粒度控制的全面测试执行
  • 应用归档和IPA导出以进行分发
  • 代码签名和配置文件管理
  • Swift包管理器集成
  • 通过simctl管理iOS模拟器
  • 新功能:真实设备应用部署和启动,自动检测Xcode安装并改进设备管理
  • 智能处理应用安装失败,自动重试
  • 智能缓存设备和Xcode信息以提高性能

安装

npm install @devyhan/xcode-mcp

使用方法

与Claude Desktop一起使用

  1. 打开Claude Desktop配置文件:

    # macOS
    open ~/Library/Application\ Support/Claude/claude_desktop_config.json
    
  2. 添加或修改以下配置:

    {
      "mcpServers": {
        "xcode-mcp": {
          "command": "npx",
          "args": [
            "@devyhan/xcode-mcp",
            "-y"
          ]
        }
      }
    }
    
  3. 重启Claude Desktop。

可用工具

1. xcode-project-info

获取有关Xcode项目或工作区的详细信息,包括目标、配置和方案。

参数

  • projectPath(必需):指向Xcode项目(.xcodeproj)或工作区(.xcworkspace)的路径

示例

项目路径: /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)的路径

示例

项目路径: /Users/username/Projects/MyApp/MyApp.xcodeproj

样本输出

关于项目"MyApp"的信息:
    目标:
        MyApp
        MyAppTests
        MyAppUITests

    构建配置:
        Debug
        Release

    方案:
        MyApp
        MyAppTests

3. xcode-build

构建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"

4. xcode-test

运行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"

5. xcode-archive

创建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"

6. xcode-codesign-info

获取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

7. swift-package-manager

提供访问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

8. simctl-manager

通过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
      }
    ]
  }
}

9. run-on-device

在物理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(可选):在运行前显示所有检测到的设备及其ID
  • skipBuild(可选):跳过已安装应用的构建和安装步骤
  • 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"

过程

  1. 工具识别指定设备的Xcode UDID和CoreDevice UUID
  2. 使用Xcode UDID进行构建和安装应用
  3. 使用CoreDevice UUID通过devicectl启动应用
  4. 获取应用的bundle标识符
  5. 如果请求,则开始流式传输设备日志

v0.4.0中的关键改进

  • 能够直接指定bundleId而无需项目
  • 对于已安装的应用,可以跳过构建和安装步骤
  • 支持附加的devicectl启动命令参数
  • 更好的设备型号和操作系统版本信息显示
  • 改进的devicectl命令路径处理和日志记录

样本输出

// 标准输出,包含构建和安装
应用运行结果:
使用com.example.myapp bundle标识符启动了应用。
日志流式传输已开始。可以在终端中查看日志。

// 直接使用bundleId跳过构建
设备型号: iPhone14,7
设备操作系统版本: 17.0
使用用户指定的bundleId: com.example.myapp
跳过构建和安装步骤
应用运行结果:
使用com.example.myapp bundle标识符启动了应用。

示例场景:与LLMs一起使用

以下是如何提示像Claude这样的LLM按顺序使用这些工具的一个示例:

用户提示给Claude

我需要检查我的Xcode项目,运行一些测试,然后归档它以进行分发。

1. 首先,使用xcode-list-schemes工具获取我在/Users/username/Projects/MyApp/MyApp.xcodeproj项目中的所有可用方案。
2. 查看方案后,在iPhone 14模拟器上运行第一个可用方案的测试。
3. 然后使用Release配置归档应用。

预期流程

  1. Claude将执行xcode-list-schemes工具以检索所有方案:

    项目路径: /Users/username/Projects/MyApp/MyApp.xcodeproj
    
  2. Claude将执行xcode-test工具,使用确定的方案:

    项目路径: /Users/username/Projects/MyApp/MyApp.xcodeproj
    方案: [从输出中获得的第一个方案]
    目标: platform=iOS Simulator,name=iPhone 14
    
  3. 然后,Claude将使用xcode-archive工具创建归档:

    项目路径: /Users/username/Projects/MyApp/MyApp.xcodeproj
    方案: [从输出中获得的第一个方案]
    配置: Release
    归档路径: /Users/username/Desktop/MyApp.xcarchive
    

此流程演示了如何将多个工具链接在一起,使用一个工具的输出来告知另一个工具的参数。

示例:在真实设备上运行

用户提示给Claude

我需要在我的真实设备上测试我的应用:

1. 获取可用设备列表(包括连接的物理设备)
2. 在我的连接的iPhone上运行我的应用

预期流程

  1. Claude首先获取设备列表:

    listDevices: true
    
  2. Claude识别您的物理设备并在其上运行应用:

    项目路径: /Users/username/Projects/MyApp/MyApp.xcodeproj
    方案: MyApp
    设备: "Your iPhone"(或设备UUID)
    流式传输日志: true
    
  3. 快速重新启动而不重新构建:

    设备: "Your iPhone"
    直接bundleId: "com.example.myapp"
    跳过构建: true
    

安全注意事项

此工具可以执行与Xcode相关的命令,这存在安全风险。请注意:

  • 仅使用受信任的Xcode项目。
  • 对来自未知来源的项目要谨慎。
  • 不要在构建参数中包含敏感信息。

开发

要求

  • Node.js 16或更高版本
  • npm 6或更高版本
  • Xcode 14或更高版本(适用于所有功能)
  • Xcode 16或更高版本(对于devicectl和真实设备功能是必需的)

本地开发和测试

# 克隆仓库
git clone https://github.com/devyhan/xcode-mcp.git
cd xcode-mcp

# 安装依赖
npm install

# 开发模式运行
npm run dev

# 构建
npm run build

# 测试
npm test

许可证

MIT