简体中文
从零开始:使用 Theos 在 macOS 上开发企业微信 dylib 插件

使用 Theos 在 macOS 上开发企业微信 dylib 插件(示例)

本文适用于 macOS Sequoia + Apple M 系列芯片(M1/M2/M3/M4)用户,目标是为越狱设备(通过 TrollStore + Injective)开发动态库(dylib)插件,以增强企业微信等 App 的功能。

一、环境准备

  1. 安装 Homebrew(如未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  1. 安装必要工具
brew install dpkg ldid git cmake make
  • ldid:用于对 dylib 进行伪签名(无需 Apple 证书)
  • dpkg:Theos 打包依赖
  1. 安装 Xcode 命令行工具
xcode-select --install
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

二、安装 Theos

  1. 克隆 Theos 到系统目录
export THEOS=/opt/theos
sudo git clone --recursive https://github.com/theos/theos $THEOS
  1. 配置环境变量(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

四、关键文件配置

  1. 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 元素。

  1. WeComAutoSelect.plist —— 注入范围控制
{ Filter = { Bundles = ( "com.tencent.WeChat.Work" ); }; }

⚠️ 必须指定 Bundle ID,否则插件可能被注入到所有 App,导致系统不稳定。

  1. 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

五、编译与签名

  1. 编译项目
cd ~/WeComAutoSelect
make clean
make

✅ 成功标志:无报错,最后显示 ==> Signing WeComAutoSelect…

  1. 手动签名(推荐)
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(推荐新手)

  1. 复制 dylib 到桌面:
    cp ./.theos/obj/debug/WeComAutoSelect.dylib ~/Desktop/
    
  2. 通过 AirDrop 发送到 iPhone
  3. 使用 Filza 将文件移动到 /var/mobile/Documents/WeComAutoSelect.dylib

七、注入与测试

  1. 使用 Injective(TrollStore 版)
  • Bundle ID: com.tencent.WeChat.Work
  • Dylib Path: /var/mobile/Documents/WeComAutoSelect.dylib
  1. 测试步骤
    1. 完全关闭企业微信(从后台划掉)
    1. 重新打开
    1. 进入含复选框的页面(如审批、打卡表单)
    1. 查看右上角是否有绿色 ✅ 全选 按钮

✅ 成功效果:点击按钮后,所有复选框被自动勾选,并弹出提示“✅ 已全选!”


八、常见问题排查

问题解决方案
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 → 实现前端自动化。

欢迎将此流程应用于你的创意场景!如有疑问,欢迎在评论区交流。


参考资料

文章在技术分类中;
0
0
0
0