如何在Theos的Makefile中包含资源文件?

7

我用Theos制作了一个完全功能的微调,需要在其中使用一个图像文件,获取图像的代码是正确的(在Xcode上测试过)。

但是这个图像没有包含在最终生成的DEB文件中。

我有这个Makefile:

SDKVERSION=6.0
include theos/makefiles/common.mk
include theos/makefiles/tweak.mk

TWEAK_NAME = MyTweak
MyTweak_FRAMEWORKS = Foundation  CoreGraphics UIKit
MyTweak_FILES = Tweak.xm image.png

include $(THEOS_MAKE_PATH)/tweak.mk

但是当我尝试编译时,我遇到了以下问题:
 No rule to make target `obj/image.png.o', needed by `obj/MyTweak.dylib'.  Stop. 

我该怎么做才能把它包含进来?(很抱歉语法不好,我是在 iPhone 上提问的。)

只有熟悉Theos构建系统的人才能提供帮助。从make的角度来看,这意味着其中一个包含的makefile将MyTweak_FILES变量的内容视为要编译的源文件。要么有其他变量应该用于图像文件,要么makefile不知道如何处理PNG文件。 - MadScientist
2个回答

11

MyTweak_FILES变量应仅包括可编译的文件,文件句柄以不同方式处理资源。

要包括资源,您需要按以下方式创建捆绑包。

1)在tweak.xm目录中创建名为Resources的文件夹。

2)将所有资源文件(所有PNG文件)放入该文件夹中。

3)将以下信息添加到您的makefile中

BUNDLE_NAME = your_bundle_identifier

your_bundle_identifier_INSTALL_PATH = /Library/MobileSubstrate/DynamicLibraries

include $(THEOS)/makefiles/bundle.mk

4) 将以下代码定义为您的 tweak.xm 文件顶部的 bundle。

#define kBundlePath @"/Library/MobileSubstrate/DynamicLibraries/your_bundle_identifier.bundle"

5) 您现在可以按以下方式初始化捆绑包并在您的扩展程序中使用图像:

NSBundle *bundle = [[[NSBundle alloc] initWithPath:kBundlePath] autorelease];

NSString *imagePath = [bundle pathForResource:@"your_image_name" ofType:@"png"];

UIImage *myImage = [UIImage imageWithContentsOfFile:imagePath]
在上述步骤中,将您的组件包标识符(在控制文件中)替换为您的调整软件包标识符(例如:com.yourdomain.tweak_name)。 同时,用您想使用的图像名称替换your_image_name。 您可以以类似的方式使用任何资源(例如声音文件)。

这在2021年仍然有效。唯一需要更改的是从第5步中删除“autorelease”调用。 - BBedit

0
除了已发布的答案外,将捆绑包放置在“/Library/Application Support/”而不是“/Library/MobileSubstrate/DynamicLibraries/”中是常见做法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接