我并不是真的不同意
DarkDust的答案,但如果我可以发挥一下我内心的比尔·克林顿,
这取决于“支持”这个词的意思是什么 :)
苹果不希望你对App Store应用程序这样做,但操作系统肯定允许这样做。越狱应用程序一直在使用这种技术。你基本上使用标准的UNIX技术动态打开一个框架/库,然后在其中使用东西。
dlopen函数允许你通过传递
该框架或dylib的路径来打开库。从一些
构建越狱应用程序的文档中,以下是调用自己单独的dylib中实现的
init()
函数的示例:
#include <dlfcn.h>
initWrapper() {
char *dylibPath = "/Applications/myapp.app/mydylib2.dylib";
void *libHandle = dlopen(dylibPath, RTLD_NOW);
if (libHandle != NULL) {
void (*init)() = dlsym(libHandle, "init");
if (init != NULL) {
init();
}
dlclose(libHandle);
}
}
此外,Xcode默认限制您无法为iOS构建动态库项目,但您可以通过编辑一些XCode xml文件来覆盖此限制:
在iOS上构建和使用dylib
一旦这样做,您就可以构建普通的iOS
.dylib库,并按照上面的示例代码使用它。(是的,每当您安装新的XCode版本时,您可能需要再次解锁此功能。)
因此,这不是技术上的限制,而是App Store政策的限制。如果您不受App Store限制,则可以这样做。请注意,此技术
不需要越狱,尽管如果应用程序被沙箱化,可能会限制dylibs可以从哪里加载。
编辑:为了确保这些信息不会因为链接失效而丢失,这里提供我之前分享的如何在Xcode中启用iOS dylibs的链接内容。(注意:这个过程仍然适用于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”中。
![Xcode screenshot 1](https://istack.dev59.com/YhIW5.webp)
3. 打开位于同一位置的“MacOSX Package Types.xcspec”和“iPhone Simulator PackageTypes.xcspec”。
4. 在“MacOSX Product Types.xcspec”中找到具有包类型“com.apple.package-type.mach-o-dylib”的项目,并将其拖动到“iPhone Simulator PackageTypes.xcspec”中。
![Xcode screenshot 2](https://istack.dev59.com/QQC6p.webp)
5. 重复“iPhoneOS.platform”的步骤,如果Xcode正在运行,请重新启动。
现在,让我们构建一个dylib。从“Cocoa Touch Static Library”模板开始。该模板应该包括项目中的Foundation.framework。以下是我在模板上进行的更改以构建dylib。
1. 使用文本编辑器打开Xcode项目文件包中的文件project.pbxproj。搜索字符串“producttype”,将其值更改为com.apple.product-type.library.dynamic
;
现在,使用Xcode打开项目,转到Project->Edit Project Settings
2. “Installation Directory”设置为@executable_path/
,因为我计划将dylib放在与应用程序可执行文件相同的目录中。
3. “Mach-O Type”设置为Dynamic Library。
4. “Executable Extension”设置为dylib。
5. “可执行前缀”设置为空
6. 添加一个或两个简单的方法到库中并进行构建。
现在,创建一个测试它的应用程序。这次,我选择了“基于视图”的应用程序。连接一个UIButton和一个UILabel来调用lib并显示返回消息。您可以下载完整的TestApp项目并进行操作。
失落的知识:
下面的屏幕截图与现在不工作的链接有关。
在iOS上构建和使用dylib
![输入图像描述](https://istack.dev59.com/zEmpq.webp)