如何在Xcode模拟器中测试Tweak (1)

如何在Xcode模拟器中测试Tweak (1)

先上效果图

模拟器测试的优点

  • 功能基本和实机一致
    • 表面没有但实际有的功能如Control Center、缺失的Settings项目也能通过Tweak解除限制显示出来
  • 无需越狱
    • 因此可以在新系统无法越狱时第一时间提前适配
  • 测试各种iOS版本、设备
    • 继承模拟器本身的优点

测试环境

  • x64 macOS
  • Xcode 10-12

工具

  • theos: 编译工具
  • simject: 作为Tweak Loader加载我们的dylib

原理

  • 使用Theos编译出模拟器架构的dylib,由simject加载。

步骤

  1. 因为坑太多了,所以不一定都能想起来,想起来了再补充

  2. 安装simject

    git clone https://github.com/angelXwind/simject.git
    cd simject/
    make setup
    
    • 安装后新增目录 /opt/simject 对应实机上的/Library/MobileSubstrate/DynamicLibraries, 把dylib和plist放在这里后,simject就会帮我们加载
    • 新增命令行工具 resim, 类似sbreload,可用于重启模拟器的SpringBoard。
      • 每个模拟器启动后并不会自动加载simject,需要resim一次,之后仅需在需要sbreload时再resim
  3. 安装Cydia Substrate

    • simject提供了一个脚本帮我们自动安装好Cydia Substrate
    • 如果是Xcode 10和以上,sudo ./installsubstrate.sh subst 否则sudo ./installsubstrate.sh cs
  4. 测试

是不是很简单,不,这只是坑的开始,甚至很多人demo都跑不起来。

  1. 总结
    • 在项目Makefile中加入TARGET = simulator:clang::7.0
    • 增加一个新target setup::,需要安装到模拟器时就 make setup 来编译+手动拷贝编译产物至/opt/simject
5 Likes

坑点1: 一定要先删掉原位置的dylib再拷贝新的,不能直接覆盖,否则注入的进程可能会crash loop
坑点2: 最新theos会在target模拟器时自动设定generator为internal。所有hookf和MSHookFunction都会被删除,如果需要使用它们的话需要在makefile中添加XXX_LOGOSFLAGS += -c generator=MobileSubstrate

大佬 :call_me_hand: :call_me_hand: :call_me_hand: :call_me_hand:

:call_me_hand::call_me_hand::call_me_hand::call_me_hand:大老,标记收藏

收藏了,紫薯布丁