Theos--定制工程文件(MakeFile篇)

来源:互联网 发布:setcookie js 编辑:程序博客网 时间:2024/06/05 21:56

介绍

MakeFile文件指定工程用到的文件、框架、库等信息,将整个过程进行自动化。

theos中.mk的说明

这里我就拿theos生成的模板中的 MakeFile文件进行对应的介绍、

include theos/makefiles/common.mk #固定写法TWEAK_NAME = iOSREProject   #项目创建时候的项目名称iOSREProject_FILES = Tweak.xm  #tweak 包含的源文件(不包括头文件)include $(THEOS_MAKE_PATH)/tweak.mkafter-install::   #当tweak安装成功后杀掉SpringBoard进程,好让我们写的程序hook到对应代码上      install.exec "killall -9 SpringBoard"

接下来我们进行介绍,如何指定SDK的版本,导入什么framework, lib文件在哪里的链接。

  • 指定处理器架构
ARCHS = armv7 arm64

这里指定了两种不同的处理器架构,中间必须存在空格进行分割。
注意:采用arm64架构的App不兼容armv7/armv7s架构,必须适配arm64架构的dylib。
* 指定SDK版本

TARGET = iphone:Base SDK:Deployment Target

比如

TARGET = iphone:8.1:8.0

这句语法的含义为:指定采用8.1版本的SDK,并发布对象为IOS 8.0及以上版本。也可以吧“Base SDK”设置为“latest”,指定以Xcode附带的最新版本SDK编译,如:

TARGET = iphone:lastest:8.0
  • 导入framework
iOSREProject_FRAMEWORKS = framework name

例如:

iOSREProject_FRAMEWORKS = UIKit CoreTelephony CoreAudio

上面语句是增加AppStore级别的共有API接口,而我们是进行theos开发当然是想要拿到“PRIVATE”中的方法。在使用时候,需要明白 每个IOS版本之间可能发生变化,再导入之前,一定要确认好 导入的private framework 确实存在

iOSREProject_PRIVATE_FRAMEWORKS  = private framework name

例如:

iOSREProject_PRIVATE_FRAMEWORKS  = AppSupport ChatKit IMCore

接下来我们进行看一个实际案例文件进行了解其中的注意点:

ARCHS = armv7 arm64TARGET = iphone:latest:7.0include theos/makefiles/common.mkTWEAK_NAME = iOSREProjectiOSREProject_FILES = Tweak.mkiOSREProject_PRIVATE_FRAMEWORK = BaseBoardincluce $(THEOS_MAKE_PATH)/tweak.mkafter-install:: install.exec "killall -9 SpringBoard"

上面的语句可以编译和链接,并不会报错。但是,因为BaseBoard这个private framework只存在于8.0以上的版本的SDK中,在IOS7 里并没有,所以这个tweak在IOS 7 中因为不会找到framework 而无法进行工作。这种情况可以通过弱引用(谷歌搜索 “makefile weak linking”)或dlopen()、dlsym() 和 dlclose()系列函数动态调用private framework来解决。

  • 链接Match-o对象(Match-O object)
iOSREProject_LDFLAGS = -lx

theos 采用GUN Linker来链接Mach-O对象,包括.dylib.a.o
这样,链接Mach-O对象就很方便了,例如,要链接libsqlite3.0.dylib 、libz.dylib 和dylib1.0像下面这样写就OK

iOSREProject_LDFLAGS = -lz -lsqlite3.0 -dylib1.o 
原创粉丝点击