我并不是真的不同意DarkDust 的回答,但如果我可以引导我内心的比尔克林顿,这取决于支持的含义是什么:)
Apple 不希望您为 App Store 应用程序这样做,但操作系统肯定允许这样做。越狱应用程序一直使用这种技术。您基本上使用标准 UNIX 技术来动态打开框架/库,然后使用其中的内容。dlopen 函数允许您通过传入该框架或 dylib的路径来打开库。从一些用于构建越狱应用程序的文档中,这是一个调用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 文件来覆盖它:
在 iOS 上构建和使用 dylib
完成此操作后,您可以构建一个普通的 iOS .dylib库,并按照上面的示例代码使用它。(是的,每当您安装新的 XCode 版本时,您可能必须再次解锁此功能)。
因此,这不是技术限制,而是 App Store 政策限制。如果您不限于 App Store,那么您可以做到。请注意,这种技术不需要越狱,尽管如果应用程序是沙盒的,它可能会限制可以从哪里加载 dylib。
编辑:为了确保这些信息不会因未来的链接失效而丢失,这里是我提供的关于如何在 Xcode 中启用 iOS dylib 的链接内容。(注意:这个过程仍然适用于 Xcode 4,但请参阅下面的评论以获取路径等的更新。)来源是iOS Place 博客:
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 模拟器 ProductTypes.xcspec
2.在“<strong>MacOSX Product Types.xcspec”中找到产品类型的条目,com.apple.product-type.library.dynamic
将其拖到“<strong>iPhone Simulator ProductTypes.xcspec”中。

3.打开在相同位置找到的“<strong>MacOSX Package Types.xcspec”和“<strong>iPhone Simulator PackageTypes.xcspec”。
4.在“<strong>MacOSX Product Types.xcspec”中找到有包类型的项com.apple.package-type.mach-o-dylib
,将其拖到“<strong>iPhone Simulator PackageTypes.xcspec”中。

5.对“<strong>iPhoneOS.platform”重复这些步骤,如果 Xcode 正在运行,则重新启动它。
现在,让我们构建一个dylib。从“<strong>Cocoa Touch 静态库”模板开始。这应该包括项目中的 Foundation.framework。这是我在模板之上为构建 dylib 所做的更改。
1.在文本编辑器中打开文件project.pbxproj(在 Xcode 项目文件包中找到)。搜索字符串“<strong>producttype”,将其值更改为com.apple.product-type.library.dynamic
;
现在,使用 Xcode 打开项目,转到Project->Edit Project Settings
2. “<strong>Installation Directory” 设置为,@executable_path/
因为我打算将dylib 与应用程序的可执行文件放在同一目录中。
3. “<strong>Mach-O Type”设置为动态库
4 .“<strong>Executable Extension”设置为dylib
5. “<strong>Executable Prefix”设置为空
6.在库中添加一两个简单的方法并构建它。
现在,创建一个应用程序来测试它。这一次,我选择了基于视图的应用程序。连接一个 UIButton 和一个 UILabel 来调用库并显示返回消息。您可以下载完整的项目 TestApp并使用它。