【问题标题】:How to include resource files in Theos makefile?如何在 Theos makefile 中包含资源文件?
【发布时间】:2013-04-14 13:46:45
【问题描述】:

我用 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 变量的内容视为要编译的源文件。要么有一些其他变量应该用于图像文件,要么生成文件不知道如何处理 PNG 文件。

标签: makefile include theos


【解决方案1】:

MyTweak_FILES 变量应该只包含可以编译的文件。使文件以不同方式处理资源。

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

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

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

3) 将以下信息添加到您的 make 文件中

BUNDLE_NAME = your_bundle_identifier

your_bundle_identifier_INSTALL_PATH = /Library/MobileSubstrate/DynamicLibraries

include $(THEOS)/makefiles/bundle.mk

4) 在您的tweak.xm 文件之上按如下方式定义您的包。

#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]

在上述步骤中,将 your_bundle_identifier 替换为您的调整包标识符,该标识符将位于控制文件中。 (例如:com.yourdomain.tweak_name)

还将 your_image_name 替换为您要使用的图像的名称。

您几乎可以通过上述方式使用任何资源(例如:声音文件)。

【讨论】:

  • 这在 2021 年仍然有效。唯一要做的更改是从第 5 步中删除“自动释放”调用。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-04
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 2020-06-18
    相关资源
    最近更新 更多