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 之间的通信数据,同时解决两个已知的兼容性问题:
- 移除 Xcode 请求中不被接受的
tools
字段。 - 修正
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"
步骤三:如何使用
-
授予权限:为管理脚本添加执行权限(只需操作一次)。我们已经执行过此操作。
bashchmod +x /Users/apple/proxy_manager.sh
-
启动代理:在终端中,直接运行脚本即可。
bash/Users/apple/proxy_manager.sh
-
安装证书 (首次运行) :如果这是您第一次使用
mitmproxy
,您可能需要安装它的证书。在代理运行时,用浏览器访问http://mitm.it
,然后根据页面提示点击对应图标安装并信任证书。 -
开始使用 :现在 Xcode 的 AI 功能应该可以正常工作了。
mitmproxy
窗口会显示脚本执行的日志。 -
关闭代理 :在运行脚本的终端窗口中,按
Ctrl + C
即可。脚本会自动关闭mitmproxy
并恢复您的网络设置。