macOS 下使用 mitmproxy 增强 Xcode AI 能力配置指南 (v2 - 自动化脚本版)

macOS 下使用 mitmproxy 增强 Xcode AI 能力配置指南 (v2 - 自动化脚本版)

本文档总结了通过 mitmproxy 工具,解决国行 macOS 系统下 Xcode 26 的 AI 功能与 DeepSeek API 不兼容问题的完整配置流程。该版本使用一个管理脚本来简化启动、关闭和系统代理配置。


步骤一:安装 mitmproxy

如果尚未安装,请使用 Homebrew 包管理器一键安装 mitmproxy

bash 复制代码
brew install mitmproxy

步骤二:创建修复脚本和管理脚本

我们将创建两个文件:一个 Python 脚本负责核心的 API 数据修复,一个 Shell 脚本负责自动化管理。这两个文件都已在之前的步骤中创建在您的主目录 (/Users/apple/) 下。

2.1 API 修复脚本 (deepseek_script.py)

该脚本会实时修改 Xcode 与 DeepSeek API 之间的通信数据,同时解决两个已知的兼容性问题:

  1. 移除 Xcode 请求中不被接受的 tools 字段。
  2. 修正 messages.content 字段的格式,将其从数组(列表)转为 API 期望的字符串。

脚本内容 (/Users/apple/deepseek_script.py):

python 复制代码
import json
from mitmproxy import http

class DeepSeekEditor:
    def request(self, flow: http.HTTPFlow) -> None:
        if "api.deepseek.com/v1/chat/completions" in flow.request.pretty_url:
            try:
                data = json.loads(flow.request.get_text())
                modified = False

                # --- 修复1:移除 'tools' 字段 ---
                if "tools" in data:
                    print("[DeepSeek Script] 找到并移除了 'tools' 字段。")
                    del data["tools"]
                    modified = True

                # --- 修复2:将 'content' 数组扁平化为字符串 ---
                if "messages" in data:
                    for message in data["messages"]:
                        if "content" in message and isinstance(message["content"], list):
                            print("[DeepSeek Script] 发现 'content' 是一个数组,正在将其转为字符串。")
                            new_content = ""
                            for part in message["content"]:
                                if isinstance(part, dict) and "text" in part:
                                    new_content += part.get("text", "")
                                elif isinstance(part, str):
                                    new_content += part
                            message["content"] = new_content
                            modified = True
                
                # 如果做出了任何修改,则将更新后的JSON写回请求体
                if modified:
                    flow.request.text = json.dumps(data)

            except json.JSONDecodeError:
                pass

addons = [
    DeepSeekEditor()
]

2.2 自动化管理脚本 (proxy_manager.sh)

该脚本可以一键完成"开启代理 -> 运行 mitmproxy -> 关闭代理"的整个流程。

脚本内容 (/Users/apple/proxy_manager.sh):

bash 复制代码
#!/bin/bash

# --- 配置 ---
# 脚本已根据您的网络设置为 "USB 10/100/1000 LAN"
NETWORK_SERVICE="USB 10/100/1000 LAN"
PROXY_DOMAIN="127.0.0.1"
PROXY_PORT="8080"
MITM_SCRIPT="/Users/apple/deepseek_script.py"

# --- 清理函数 ---
cleanup() {
    echo "
正在关闭系统代理..."
    networksetup -setwebproxystate "$NETWORK_SERVICE" off
    networksetup -setsecurewebproxystate "$NETWORK_SERVICE" off
    echo "代理已关闭。"
}

# 捕捉脚本退出信号,自动执行清理
trap cleanup EXIT

# 设置系统代理
echo "正在为 '$NETWORK_SERVICE' 设置系统代理..."
networksetup -setwebproxy "$NETWORK_SERVICE" "$PROXY_DOMAIN" "$PROXY_PORT"
networksetup -setsecurewebproxy "$NETWORK_SERVICE" "$PROXY_DOMAIN" "$PROXY_PORT"
echo "代理已开启。"
echo "---"

# 启动 mitmproxy
echo "正在启动 mitmproxy... 按 Ctrl+C 可退出并自动关闭代理。"
mitmproxy -s "$MITM_SCRIPT"

步骤三:如何使用

  1. 授予权限:为管理脚本添加执行权限(只需操作一次)。我们已经执行过此操作。

    bash 复制代码
    chmod +x /Users/apple/proxy_manager.sh
  2. 启动代理:在终端中,直接运行脚本即可。

    bash 复制代码
    /Users/apple/proxy_manager.sh
  3. 安装证书 (首次运行) :如果这是您第一次使用 mitmproxy,您可能需要安装它的证书。在代理运行时,用浏览器访问 http://mitm.it,然后根据页面提示点击对应图标安装并信任证书。

  4. 开始使用 :现在 Xcode 的 AI 功能应该可以正常工作了。mitmproxy 窗口会显示脚本执行的日志。

  5. 关闭代理 :在运行脚本的终端窗口中,按 Ctrl + C 即可。脚本会自动关闭 mitmproxy 并恢复您的网络设置。

相关推荐
Stars20241 天前
【gin框架读取参数的方式】
iphone·xcode·gin
阿里云云原生2 天前
让每次语音唤醒都可靠,公牛沐光重构可观测体系
macos·阿里云·重构·xcode·可观测
00后程序员张4 天前
iOS 开发环境搭建完整指南 Xcode 安装配置、iOS 开发工具选择、ipa 打包与 App Store 上架实战经验
android·macos·ios·小程序·uni-app·iphone·xcode
zzywxc7874 天前
AI 行业应用:AI 在金融、医疗、教育、制造业等领域的落地案例
人工智能·spring·金融·prompt·语音识别·xcode
天堂罗恋歌4 天前
CocoaPods 安装 Masonry 库时出现的网络连接问题处理
ios·iphone·xcode·cocoapods·app store
xo198820115 天前
Xcode 26 could not locate developer disk image for this device 无法定位开发者磁盘镜像
ide·macos·xcode
天堂罗恋歌6 天前
iOS PPBluetoothKit接入无法找到头文件问题
ios·objective-c·xcode·app store