在越狱的设备上运行由 Swift 编写的 “theos tool”
目前我已经能在我的系统上编译并在设备上运行由 Swift 开发的 Theos “iphone/tool_swift”,想在这里分享给大家我的做法。
长话短说,下面是我目前的环境:
- macOS Big Sur 11.0.1 (20B29)
- Xcode 12.2 (12B45b)
- Theos master (59a75b25105041c43b016c5538d4f58d72746ea4)
- iPhone 13.3.1 checkra1n Jailbroken
注意事项:
- iOS 12.2及以上系统内置了 Swift5+ Runtime, 所以这些系统在编译软件的时候不需要拷贝 Runtime Framework,本文讨论的也仅仅是“iOS 12.2及以上系统”的 tool 开发。后续我会研究 12.2 以下系统 Swift 如何使用的问题(大概涉及 Cydia 安装 libswift 等手机上环境的部署)
大致步骤:
- 使用
$THEOS/bin/nic.pl
选[9.] iphone/tool_swift
,创建模版工程 - 编写 Makefile
- 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:
- 12.2 以下系统 Swift 开发支持
- 结合已有的 Objc SDK 支持方法
问题反馈:
运行 make clean all messages=yes
获取所有输出内容,并贴出。