我并不是真的不同意DarkDust's answer,但如果我可以引导我内心的比尔克林顿,it depends on what the meaning of supported is:)
Apple 不希望您为 App Store 应用程序这样做,但操作系统当然允许这样做。越狱应用程序一直使用这种技术。您基本上使用标准 UNIX 技术来动态打开框架/库,然后使用其中的内容。 dlopen function 允许您通过传入 the path to that framework 或 dylib 来打开库。来自一些docs for building jailbreak apps,这是一个调用init() 函数的示例,该函数在您自己的独立dylib 中实现:
#include <dlfcn.h>
initWrapper() {
char *dylibPath = "/Applications/myapp.app/mydylib2.dylib";
void *libHandle = dlopen(dylibPath, RTLD_NOW);
if (libHandle != NULL) {
// This assumes your dylib’s init function is called init,
// if not change the name in "".
void (*init)() = dlsym(libHandle, "init");
if (init != NULL) {
init();
}
dlclose(libHandle);
}
}
此外,允许您构建适用于 iOS 的动态库项目的默认限制是 Xcode 中的某些内容,您可以通过编辑一些 XCode xml 文件来覆盖:
Build and use dylib on iOS
完成此操作后,您可以构建一个普通的 iOS .dylib 库,并按照上面的示例代码使用它。 (是的,每当您安装新的 XCode 版本时,您可能必须再次解锁此功能。
所以,这不是技术限制,而是 App Store 政策限制。如果您不限于 App Store,那么您可以做到。请注意,这种技术不需要越狱,但如果应用程序是沙盒的,它可能会限制 dylib 可以从哪里加载。
编辑:为了确保此信息不会因将来的链接失效而丢失,这里是我提供的有关如何在 Xcode 中启用 iOS dylib 的链接内容。 (注意:此过程仍然适用于 Xcode 4,但请参阅下面的评论以了解路径等的更新。来源是 iOS Place blog:
Xcode 不允许您为 iOS 构建 dylib。如果不是单个二进制文件,应用程序将被拒绝。但是我有一个具有插件架构的应用程序来加载可选模块。我只想要一个快速原型来证明概念,然后再将其完全移植到 iOS。如果 dylib 可以简单地工作,这样做会更快。因此,这篇文章展示了如何构建和使用 dylib,但请注意它不会被 App Store 批准。 (在 10.6.4 上使用 Xcode 3.2.4 测试)
1.在属性列表编辑器中打开这些文件:/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications/MacOSX Product Types.xcspec和 /Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Specifications/iPhone Simulator ProductTypes.xcspec
2.在“MacOSX Product Types.xcspec”中找到产品类型为com.apple.product-type.library.dynamic的项目并将其拖到“iPhone Simulator”中ProductTypes.xcspec”。
3. 打开位于相同位置的“MacOSX Package Types.xcspec”和“iPhone Simulator PackageTypes.xcspec”。 p>
4. 在“MacOSX Product Types.xcspec”中找到包类型为com.apple.package-type.mach-o-dylib的项目,并将其拖到“iPhone Simulator”中PackageTypes.xcspec”。
5. 对“iPhoneOS.platform”重复这些步骤,如果 Xcode 正在运行,请重新启动它。
现在,让我们构建一个 dylib。从“Cocoa Touch 静态库”模板开始。这应该包括项目中的 Foundation.framework。以下是我在模板之上为构建 dylib 所做的更改。
1. 在文本编辑器中打开文件 project.pbxproj(在 Xcode 项目文件包中找到)。搜索字符串“producttype”,将其值改为com.apple.product-type.library.dynamic;
现在,用 Xcode 打开项目,进入 Project->Edit Project Settings
2.“安装目录”设置为@executable_path/,因为我打算将 dylib 与应用程序的可执行文件放在同一目录中。
3.“Mach-O 类型”设置为动态库
4.“可执行扩展”设置为dylib
5.“可执行前缀”设置为空
6.向库中添加一两个简单的方法并构建它。
现在,创建一个应用来测试它。这一次,我选择基于视图的应用程序。连接一个 UIButton 和一个 UILabel 来调用库并显示返回消息。你可以download the complete project TestApp玩玩。