iOS(iPhone/iPad)上是否支持动态库?
在Xcode中,我尝试创建一个新项目 - > Framework&Library - > Cocoa Library(动态).在项目设置,我设置了基地SDK来iOS device 4.1和目标iOS4.1,但它有一个内置的错误:
target指定产品类型'com.apple.product-type.library.dynamic',但'iphonesimulator'平台没有这样的产品类型".
我选择的构建是模拟器 - >调试 - > i386.
Nat*_*ate 159
我并不是真的不同意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);
}
}
Run Code Online (Sandbox Code Playgroud)
此外,允许您为iOS 构建动态库项目的默认限制是在XCode中,您可以通过编辑一些XCode xml文件来覆盖:
完成此操作后,您可以构建一个普通的iOS .dylib库,并根据上面的示例代码使用它.(是的,您可能必须在安装新的XCode版本时再次解锁此功能).
因此,这不是技术限制,而是App Store政策限制.如果您不仅限于App Store,那么您可以这样做.请注意,这种技术并没有要求越狱,但如果应用程序是沙箱,它可以限制在那里 dylibs可以被加载.
编辑:为了确保此信息不会丢失到未来的链接腐烂,这里是我提供的关于如何在Xcode中启用iOS dylibs的链接的内容.(注意:此过程仍适用于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产品Types.xcspec和/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Specifications/iPhone模拟器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 ".
4.找到具有包类型的" MacOSX Product Types.xcspec "中的项目,com.apple.package-type.mach-o-dylib并将其拖到" iPhone Simulator PackageTypes.xcspec ".

5.重复" iPhoneOS.platform " 的步骤,并重新启动Xcode(如果它正在运行).
现在,让我们构建一个dylib.从" Cocoa Touch Static Library "Templete开始.这应该包括项目中的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 Type "设置为动态库
4. " 可执行扩展 "设置为dylib
5. " 可执行前缀 "设置为空
6.向库中添加一个或两个简单方法并构建它.
现在,创建一个应用程序来测试它.这一次,我选择了基于视图的应用程序.连接UIButton和UILable以调用lib并显示返回消息.您可以下载完整的TestApp项目并使用它.
Dar*_*ust 102
在提出此问题时,iOS不支持动态库,这会导致您的应用被拒绝.只允许使用静态库.
但是,在iOS8中,您可以使用动态库和框架.应该"只是工作"