说在前面
根据 Better Swift support #219 的描述,Theos 已经可以编译 Swift 文件,但是在具体开发中出现了一些问题。
过程
- 使用
Nic.pl
生成基础模板(均采用默认设定),然后将Tweak.xm
更改为Tweak.swift
- 自定义
Makefile
文件,具体如下:
include $(THEOS)/makefiles/common.mk
TWEAK_NAME = Sample
Sample_FILES = Tweak.swift
include $(THEOS_MAKE_PATH)/tweak.mk
after-install::
install.exec "killall -9 SpringBoard"
首次编译后,产生错误:error: module file's minimum deployment target is ios7.0 v7.0
更新 Makefile
文件,具体如下:
TARGET = iphone:latest:latest
include $(THEOS)/makefiles/common.mk
TWEAK_NAME = Sample
Sample_FILES = Tweak.swift
include $(THEOS_MAKE_PATH)/tweak.mk
after-install::
install.exec "killall -9 SpringBoard"
再次编译后,产生错误:error: missing required module 'os.log'
环境说明
Operating System: macOS Sierra 10.12.3 (16D32)
Platform: macOS
Target Platform: iOS
Xcode Version: 8.2.1 (8C1002)
Toolchain Version: Xcode 8.2.1
SDK Version: 10.2
附言
第一条
案例 iFinder 可做参考,但好像并不是一个有效的 Theos Swift 应用
第二条
关于 处理 Swift 运行时依赖 的方法:可以参考 FAQ - Theos 进行安装,或者更新 Makefile 去内嵌运行时文件,示例片段代码如下:
RPATH = /System/Library/CoreServices/SpringBoard.app/Frameworks
TOOLCHAIN_PATH = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
Sample_LDFLAGS += -rpath $(RPATH)
before-stage::
$(ECHO_NOTHING)mkdir -p $(THEOS_STAGING_DIR)$(RPATH)$(ECHO_END)
$(ECHO_NOTHING)rsync -a $(TOOLCHAIN_PATH)/usr/lib/swift/iphoneos/libswift*.dylib $(THEOS_STAGING_DIR)$(RPATH) $(FW_RSYNC_EXCLUDES)$(ECHO_END)
解决方案
无。(属于过度配置,正常使用过程中不会出现)
示例代码
Sample.zip (170.0 KB)