记一次在Tweak中引入Swift framework的过程

最近想在一个插件里打通App和web端,实现通过web控制App,方案是选用socket.io作为服务端和web前端。iOS端socket.io是一个纯swift实现的库。目前Theos对swift的支持还不是很完善,但是可以完成一般的工作了。Theos现在是支持swift文件编译的。

首先我们要来看一下theos仓库中对swift支持的一些介绍。其中Swift Runtime这部分比较关键的,需要按照这里的说明修改control文件。接下去是OC和Swift交互,这部分跟我们平常开发是相同的,你可以在Makefile里指定桥接文件等,最后说现在还不能用swift写tweak,嗯,你只能写非hock的代码。很久前就有人在问【已解决】如何使用 Theos 编译 Swift 源文件

我的需求是引入一个swift framework,我的工程本身不依赖libswift*.dylb,但是我依赖的库依赖它们,因此我也需要引入swift runtime。

在tweak里引入framework的话,可以参考这些资料Tweak如何导入第三方framework怎么在Tweak加入第三方framework如何在Theos工程里嵌入第三方SDK或者静态库。相对而言,我个人比较喜欢Tweak 工程创建、配置教程 & 实现logos语法自动补全里的说明。简而言之,就是我们需要把framework通过layout来放到越狱的系统里。因为framework不在宿主bundle里,也没有被写入宿主macho文件的load command里。因此如果framework的install name base是@rpath,那么即使dylib通过insert libraries被加载了,dylib依赖的framework也无法被找到。

可以通过otool工具查看macho文件依赖的库及其加载路径。

otool -L .../dylib
otool -L .../xx.framework/xxx

要修改具体的路径的话,要使用install_name_tool。install_name_tool的主要用法有两种:
install_name_tool -id [path] [target]是用来修改该库被引用的路径,相当于是一个自己的属性。如果某个库可能会被多个目标引用,那么修改该库的id比较方便。如果只是修改某个库里的某个依赖库的路径,可以用install_name_tool -change [oldpath] [newpath] [target]

我们先要修改从其他工程编译产生的framework的id,然后由于这两个库存在引用关系,因此也要修正被引用的库的路径。这样,我们的库就处理妥当了,把它放到layout下你想要放置framework的地方。修改Makefile,引入这两个库。如果我们的项目里没有swift文件,我们现在编译是可以通过的。但是这里有个问题,我们的tweak动态库不会被加载。这个问题目前还没想通,需要继续研究下。如果你引入一个swift文件,再编译的话,你会发现dylib里多了一条libswiftCore.dylib的依赖,那么这个时候,这个动态库会被加载。

对于Xcode高版本,swift 5.0的路径和theos当前版本不一致,导致一些库不会被链接。相关提及该问题的话题:unable to compile swift tool using XCode 11 #476This copy of libswiftCore.dylib requires an OS version prior to 12.2.0 [create_patched_sdk] Update bash script, create new python script #31

如果你使用的是DH开发的老版本theos的话,dpkg-deb存在问题,在解压拷贝framework到指定路径时会出现错误,路径会发生错乱,导致提示路径不存在。在尝试若干次make package之后会成功,但是有时候在Cydia里查看包内容,发现无法查看,打开文件列表的plist文件时,发现有些路径出错了。迁移到新版theos,升级dpkg-deb之后,这个问题就没出现了。可能跟改成了lzma归档方式有关,具体暂不细究,可以查看issue追踪问题的发现和解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Ubuntu Tweak是一款专门为Ubuntu(GNOME桌面)准备的配置、调整工具,主要面向新手级的普通用户。它可以设置很多并不能在系统首选项设置的隐藏选项,以满足用户自定义的乐趣。即使是新手,也可以方便地通过它来进行适合自己的系统调整。\[1\]在Ubuntu 10.10上安装Ubuntu Tweak的方法是:首先,检查是否有对应的扩展目录,如果没有则新建一个。然后,打开对应扩展目录下的metadata.json文件,查看uuid,将刚才移过来的目录名重命名为uuid的内容。最后,关闭并重新打开gnome-tweaks,如果仍然没有刷新出来,可以使用alt+f2打开gnome-shell,输入r重启gnome-shell或重启电脑。\[2\]另外,如果想更换主题,可以搜索User Themes进行安装,这样就能在gnome-tweak启用shell主题的更换,而/usr/share/themes存放的是gnome-shell的主题。\[2\]如果想安装插件,可以通过“显示应用程序->工具->优化”打开Ubuntu Tweak,然后通过浏览器安装GNOME扩展网站,安装浏览器扩展后刷新扩展网站页面,会提示安装本地扩展,使用命令sudo apt install chrome-gnome-shell即可安装插件。\[3\] #### 引用[.reference_title] - *1* [在Ubuntu 10.10上安装Ubuntu Tweak的方法](https://blog.csdn.net/on_way_/article/details/8566631)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Ubuntu桌面美化教程(GNOME Tweak Tool安装教程)](https://blog.csdn.net/qq_35395195/article/details/125266461)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值