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

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

  • 上一篇简单演示了如何使用simject加载Tweak也就是dylib至模拟器中,本篇将介绍我个人对Library和各种Bundle(Preferences Bundle, Control Center Module, Framework, …)的处理方式

踩坑记录

  • 太长不看
    • 似乎不能页内跳转,手动跳转下下小节
  • 很大一部分Tweak都配有Preferences Bundle以供用户进行偏好设置。Preference Bundle 能显示在Preferences.app中是因为有PreferenceLoader这个Tweak去加载第三方Preference Bundle。simject的贡献者之一PoomSmart也很贴心地为我们提供了PreferenceLoader的模拟器版本fork
    那么有了PreferenceLoader-sim,是不是直接make setup PL_SIMULATOR_VERSION=XXX安装即可呢?
    • 不,细心之人会发现这里多了一个PL_SIMULATOR_VERSION,没错,从这里开始便麻烦不断了
  • 不同iOS版本的模拟器具有不同的binary,也就是不同的RuntimeRoot,如果我们需要安装library到模拟器中,似乎不能像Tweak一样统一安装到/opt/simject里,因此需要指定一个iOS版本
    • 坑点1
      • Xcode 9之后,自带模拟器和额外下载模拟器的路径不一样
        • 这会导致,如果你使用目前最新commit的PreferenceLoader-sim,你将无法安装至Xcode自带模拟器中。
    • 坑点2
      • Xcode 11之后,自带模拟器的路径由/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/...变成了/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/...
        • 这会导致,即使你使用倒数第二新commit的PreferenceLoader-sim,你也无法安装至Xcode11之后的自带模拟器中
    • 坑点3
      • 除了PreferenceLoader的library需要安装至多个模拟器中,我们自己的Preference Bundle也需要安装至多个模拟器中
        • 我们测试Tweak的目的往往是在多个模拟器中测试,完全没有必要一一安装
    • 坑点4
      • 带有Bundle的项目的Makefile都需要引入locatesim.mk或路径相关的内容以及一大堆setup::命令
    • 如果你对以上坑并没有感到畏惧,那么可以自行操作了…

针对以上问题的个人解决办法

  • 将安装操作整合进theos中
    • 在每个项目的MakeFile中都加入一大堆setup::的命令实在蛋疼
  • 将/opt/simject作为RuntimeRoot并改动代码内相关路径至/opt/simject
    • 一次安装所有模拟器以及之后新安装的模拟器都可生效。
    • 同时有利于将安装操作整合进theos
    • 对于Library可在/usr/lib创建软连接,因为除了RuntimeRoot/usr/lib,根目录的/usr/lib也是模拟器可自动链接的目录。

个人fork的theos

  • theos
    • 使用此fork或pick相应的commit,一般项目仅需在Makefile中设定或shell中exportTARGET := simulator:clang::11.0即可直接make setup SIMULATOR=1进行安装,
    • Framework、Library类项目可能需要添加一些创建目录、软连接的命令,可以参照以下我fork的常用依赖

改动之处

  • target模拟器时,自动设定Tweak的INSTALL_PATH为/。这样保证下一步能正确地拷贝至对应路径
  • 新增target setup::将编译产物目录内容拷贝至/opt/simject
  • 新增target remove::用于卸载

个人fork的常用依赖

改动之处

  • Preferences Bundle, ControlCenter Module等的相关路径设定为/opt/simject/…
  • 由于setup::只能将lib、framework等拷贝至/opt/simject因此需要在各project的Makefile中补充增加相应的命令创建/usr/lib和/Library/Frameworks位置的软链接
    • Catalina 和以下系统仅需开启根目录写权限后make setup SIMULATOR=1即可安装,Big sur得手动操作一下
  • 还补充了一些创建必要目录/var/mobile、/User的命令,这些目录可能不能自动创建
5 Likes

不能说是很厉害,只能说是太牛了

大佬 :call_me_hand: :call_me_hand:t2: :call_me_hand:t3: :call_me_hand:t4: :call_me_hand:t5: :call_me_hand:t6:

不能说是很厉害,只能说是太牛了