
使用 Theos 在 macOS 上开发企业微信 dylib 插件(示例)
本文适用于 macOS Sequoia + Apple M 系列芯片(M1/M2/M3/M4)用户,目标是为越狱设备(通过 TrollStore + Injective)开发动态库(dylib)插件,以增强企业微信等 App 的功能。
一、环境准备
- 安装 Homebrew(如未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- 安装必要工具
brew install dpkg ldid git cmake make
ldid:用于对 dylib 进行伪签名(无需 Apple 证书)dpkg:Theos 打包依赖
- 安装 Xcode 命令行工具
xcode-select --install
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
二、安装 Theos
- 克隆 Theos 到系统目录
export THEOS=/opt/theos
sudo git clone --recursive https://github.com/theos/theos $THEOS
- 配置环境变量(zsh 用户)
echo 'export THEOS=/opt/theos' >> ~/.zprofile
echo 'export PATH=$THEOS/bin:$PATH' >> ~/.zprofile
source ~/.zprofile
✅ 验证:运行
nic.pl应显示项目模板选择界面。
三、创建 Tweak 项目
在终端执行:
cd ~
nic.pl
按提示选择:
- Template:
iphone/tweak - Project Name:
WeComAutoSelect - Package Name:
com.yourname.wecomautoselect - Bundle ID:
com.tencent.WeChat.Work(企业微信)
生成的项目结构如下:
WeComAutoSelect/
├── Makefile
├── Tweak.xm
└── WeComAutoSelect.plist
四、关键文件配置
Tweak.xm—— 核心逻辑
#import <Foundation/Foundation.h>
#import <WebKit/WebKit.h>
%hook WKWebView
- (void)webView:(WKWebView *)webView didFinishNavigation:(id)navigation {
%orig;
NSString *url = webView.URL.absoluteString;
if ([url containsString:@"work.weixin.qq.com"]) {
[webView evaluateJavaScript:@"(function(){if(document.getElementById('wecom-auto-select-btn'))return;const btn=document.createElement('button');btn.id='wecom-auto-select-btn';btn.innerText='✅ 全选';btn.style.cssText='position:fixed;top:20px;right:20px;z-index:999999;padding:8px 16px;background:#07c160;color:white;border:none;border-radius:4px;font-size:14px;box-shadow:0 2px 6px rgba(0,0,0,0.3);cursor:pointer;';btn.onclick=function(){document.querySelectorAll('.van-checkbox').forEach(e=>e.click());alert(\"✅ 已全选!\");};document.body.appendChild(btn);})();" completionHandler:nil];
}
}
%end
功能说明:监听页面加载完成,在企业微信表单页面注入一个绿色「✅ 全选」按钮,点击后自动勾选所有
.van-checkbox元素。
WeComAutoSelect.plist—— 注入范围控制
{ Filter = { Bundles = ( "com.tencent.WeChat.Work" ); }; }
⚠️ 必须指定 Bundle ID,否则插件可能被注入到所有 App,导致系统不稳定。
Makefile—— 构建配置
export ARCHS = arm64
export TARGET = iphone:latest:12.0
include $(THEOS)/makefiles/common.mk
TWEAK_NAME = WeComAutoSelect
WeComAutoSelect_FILES = Tweak.xm
WeComAutoSelect_FRAMEWORKS = WebKit
export THEOS_SKIP_CODESIGN=1
include $(THEOS_MAKE_PATH)/tweak.mk
🔑 关键点:
ARCHS = arm64:适配 Apple Silicon 设备THEOS_SKIP_CODESIGN=1:跳过 Theos 自动签名,避免兼容性问题WebKit:链接 WebKit 框架(因 hook 了WKWebView)
五、编译与签名
- 编译项目
cd ~/WeComAutoSelect
make clean
make
✅ 成功标志:无报错,最后显示 ==> Signing WeComAutoSelect…
- 手动签名(推荐)
ldid -S ./.theos/obj/debug/WeComAutoSelect.dylib
💡 输出路径:
./.theos/obj/debug/WeComAutoSelect.dylib
Theos 默认将构建产物放在隐藏目录.theos/obj/,而非.obj/。
六、部署到 iPhone
方式 1:通过 scp(需开启 SSH)
scp ./.theos/obj/debug/WeComAutoSelect.dylib [email protected]:/var/mobile/Documents/
方式 2:AirDrop + Filza(推荐新手)
- 复制 dylib 到桌面:
cp ./.theos/obj/debug/WeComAutoSelect.dylib ~/Desktop/ - 通过 AirDrop 发送到 iPhone
- 使用 Filza 将文件移动到
/var/mobile/Documents/WeComAutoSelect.dylib
七、注入与测试
- 使用 Injective(TrollStore 版)
- Bundle ID:
com.tencent.WeChat.Work - Dylib Path:
/var/mobile/Documents/WeComAutoSelect.dylib
- 测试步骤
-
- 完全关闭企业微信(从后台划掉)
-
- 重新打开
-
- 进入含复选框的页面(如审批、打卡表单)
-
- 查看右上角是否有绿色 ✅ 全选 按钮
✅ 成功效果:点击按钮后,所有复选框被自动勾选,并弹出提示“✅ 已全选!”
八、常见问题排查
| 问题 | 解决方案 |
|---|---|
make 报错 No rule to make target | 检查 Makefile 中 = 两边不能有空格 |
构建后找不到 .dylib 文件 | Theos 默认输出到 ./.theos/obj/debug/ |
| 按钮未出现 | 1. 检查页面 URL 是否包含 work.weixin.qq.com. 2. 用 Safari 远程调试确认复选框 class 名 3. 临时注释 URL 判断进行测试 |
ldid 在 M4 芯片上异常 | 使用 THEOS_SKIP_CODESIGN=1 + 手动 ldid -S |
九、进阶建议
- 调试 JavaScript:在
evaluateJavaScript中加入console.log(),通过 Safari Web Inspector 实时查看日志。 - 支持更多页面:放宽 URL 判断条件,或增加多个域名匹配。
- 防止按钮消失:使用
MutationObserver监听 DOM 变化,动态重建按钮。
十、结语
通过本教程,你已掌握从零开始在 macOS 上使用 Theos 开发 iOS dylib 插件的完整流程。无论是为企业微信添加便捷功能,还是为其他 App 增强体验,这套方法都可复用。
🎯 核心思想:Hook 关键方法 → 注入 JavaScript → 实现前端自动化。
欢迎将此流程应用于你的创意场景!如有疑问,欢迎在评论区交流。
参考资料: