在越狱的设备上运行由 Swift 编写的 "theos tool" 指南

在越狱的设备上运行由 Swift 编写的 “theos tool”

目前我已经能在我的系统上编译并在设备上运行由 Swift 开发的 Theos “iphone/tool_swift”,想在这里分享给大家我的做法。

长话短说,下面是我目前的环境:

  1. macOS Big Sur 11.0.1 (20B29)
  2. Xcode 12.2 (12B45b)
  3. Theos master (59a75b25105041c43b016c5538d4f58d72746ea4)
  4. iPhone 13.3.1 checkra1n Jailbroken

注意事项:

  1. iOS 12.2及以上系统内置了 Swift5+ Runtime, 所以这些系统在编译软件的时候不需要拷贝 Runtime Framework,本文讨论的也仅仅是“iOS 12.2及以上系统”的 tool 开发。后续我会研究 12.2 以下系统 Swift 如何使用的问题(大概涉及 Cydia 安装 libswift 等手机上环境的部署)

大致步骤:

  1. 使用 $THEOS/bin/nic.pl[9.] iphone/tool_swift,创建模版工程
  2. 编写 Makefile
  3. make package install

Makefile 大概如下(注意 rpath 不要漏掉):


TARGET = iphone:latest:latest

include $(THEOS)/makefiles/common.mk

TOOL_NAME = swifttool

swifttool_FILES = main.swift

swifttool_FRAMEWORKS = Foundation

swifttool_INSTALL_PATH = /usr/local/bin

include $(THEOS_MAKE_PATH)/tool.mk

RPATH = /usr/lib/swift

swifttool_LDFLAGS += -rpath $(RPATH)

这里第一步问题和第二步不大,主要问题在于第三步,执行链接的过程中编译器会在 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos 中查找对应的 swift frameworks,我在这个文件夹中同样没有找到需要的 framework 文件,后来我在 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift-5.0/iphoneos 文件夹下找到了需要的 framework 文件,现在只需要改以下 theos 的打包脚本就行了。

需要改动的 theos 文件路径$THEOS/makefiles/targets/_common/darwin_tail.mk, 全文搜索../lib/swift/,改成 ../lib/swift-5.0/ 这样能解决库找不到的问题(关于这样修改是否合适我会跟 theos 的相关开发者联系)。

TODO:

  1. 12.2 以下系统 Swift 开发支持
  2. 结合已有的 Objc SDK 支持方法

问题反馈:
运行 make clean all messages=yes 获取所有输出内容,并贴出。

1 Like

为什么不直接用 swiftpm 。。。

swiftpm 指的是 Swift Package Manager ?我去看看 :laughing: :laughing:

为什么不直接用swiftc

为什么不用C++

当时只在 Objc 跟 Swift 这两个之前选,选 Swift 就是想写着玩玩。目前在本地用 Objc 写了几个比较复杂的工程想着能用 Swift 写那就很好玩了

1 Like

使用 theos 集成的编译环境,自动打包 deb、自动安装插件不香么