iOS (iPhone/iPad)是否支持动态库?
在Xcode中,我尝试创建一个新项目 -> Framework & Library -> Cocoa Library (dynamic)。在项目设置中,我将Base 设置为iOS device 4.1,目标设置为iOS4.1,但它有一个构建错误:
target指定产品类型‘com.apple.Product- type .platform.Dynamic’,但是没有“iphone仿真器”平台的产品类型。
我选择的构建是模拟器-> Debug -> i386。
发布于 2011-01-19 10:00:08
在提出这个问题时,iOS不支持动态库,这会导致应用程序被拒绝。只允许静态库。
但是,在iOS8中,您可以使用动态库和框架。它应该“只起作用”
发布于 2012-05-09 03:29:16
我并不是真的不同意黑暗尘埃的答案的观点,但请允许我引导我内心的比尔·克林顿,是 :)
苹果不希望你为Apple应用程序这么做,但操作系统肯定允许你这么做。越狱应用程序一直在使用这种技术。您基本上使用标准的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) {
// 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策略限制。如果您不局限于App,那么您可以这样做。请注意,这种技术不需要而不是需要越狱,尽管如果应用程序是沙箱的,它可能会限制从何处加载dylib。
编辑:为了确保这些信息不会丢失在未来的链接中,下面是我提供的关于如何在Xcode中启用iOS dylib的链接的内容。(注意:这个过程仍然适用于Xcode 4,但有关路径的更新,请参见下面的注释)源是iOS场所博客
Xcode不允许您为iOS构建dylib。如果应用程序不是单个二进制文件,它将被拒绝。但是我有一个插件架构的应用程序来加载可选模块。我只想要一个快速的原型来证明概念,然后才能将它完全移植到iOS。如果dylib可以简单地工作,那么这样做会更快。因此,这篇文章展示了如何构建和使用dylib,但是要知道它不会被approved批准。(在10.6.4上用Xcode 3.2.4测试)
在属性列表编辑器中打开这些文件:/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications/MacOSX产品Types.xcspec和/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Specifications/iPhone模拟器ProductTypes.xcspec
2.在具有产品类型com.apple.product-type.library.dynamic的“MacOSX Product Types.xcspec”中找到该项目,并将其拖到“iPhone模拟器ProductTypes.xcspec”中。

3. Open“MacOSX Package Types.xcspec”和“iPhone Simulator PackageTypes.xcspec”在同一地点找到。
4.在具有包类型com.apple.package-type.mach-o-dylib的“MacOSX Product Types.xcspec”中找到该项,并将其拖到“iPhone模拟器PackageTypes.xcspec”中。

“iPhoneOS.platform”5. 5.对X代码重复执行步骤,并在运行时重新启动Xcode。
现在,让我们构建一个dylib。从“Cocoa静态库”模板开始。这应该包括项目中的Foundation.framework。下面是我在模板顶部为构建dylib所做的更改。
1.在文本编辑器中打开文件project.pbxproj (在Xcode项目文件包中找到)。搜索字符串“producttype”,,将其值更改为com.apple.product-type.library.dynamic;
现在,用Xcode打开项目,转到项目->编辑项目设置
2.“Installation directory ”设置为@executable_path/,因为我计划将dylib与应用程序的可执行文件放在同一个目录中。
3.“Mach-O Type”设置为动态库
4.“可执行扩展”设置为dylib
5.“可执行前缀”设置为空
6.将一个或两个简单的方法添加到库中并构建它。
现在,创建一个应用程序来测试它。这一次,我选择基于视图的应用程序.连接一个UIButton和一个UILabel来调用lib并显示返回消息。你可以下载完整的项目TestApp和玩它。
丢失的知识:下面的屏幕截图与现在不起作用的链接有关。在iOS上构建和使用dylib


发布于 2020-04-21 20:57:55
从Xcode 11.4.1开始,不允许动态库(您的项目不会对所有目的地进行编译)。使用libs/framework的新方法是xcodebuild中的create-xcframework。
https://stackoverflow.com/questions/4733847
复制相似问题