我可以在我的 iphone 应用程序中使用动态库(共享对象)吗?

Posted

技术标签:

【中文标题】我可以在我的 iphone 应用程序中使用动态库(共享对象)吗?【英文标题】:can I use dynamic library(shared object) in my iphone app? 【发布时间】:2011-08-25 09:00:31 【问题描述】:

众所周知,静态库可以很好地在 iPhone App 中运行,并且您的 App 可以轻松获得 ios App Store 的批准

不幸的是,我现在使用的两个静态库有一些 C 函数和变量。

所以我将它们编译成 *.dylib(动态库),并将它们复制到 XCode 中的“Bundle Resources”中。

dylib_handle = dlopen(dylib_path_in_resource_bundle, RTLD_LAZY);
func = dlsym(dylib_handle, "func");

// invoke func();

这在模拟器和 Ipad 中运行良好(当然,不同的动态库)。

我注意到有人说 Iphone 应用程序不支持任何第三方动态库,我的应用程序将被拒绝。 (见这里)

但我仔细阅读了“App Store Review Guidelines”,我发现没有项目符合我的问题。

我现在很困惑!

iphone 应用程序是否支持动态库? IOS AppStore 允许吗?

谁能给我一个正式的答复。

【问题讨论】:

C 函数和变量现在不能用作静态库有什么关系? Can you build dynamic libraries for iOS and load them at runtime? 的可能重复项 【参考方案1】:

正如 Bernardo Ramos 在评论中所说:“从 iOS8 开始,我们可以使用动态库”。

App Store 不允许使用动态库。运行时不得加载任何代码。答案是将它们转换为静态库,然后编译到应用程序中。

来自 iPhoneOSTechOverview:

“如果您想将框架或动态库中的代码集成到您的应用程序中,您应该在构建项目时将该代码静态链接到您的应用程序的可执行文件中。”

将“应该”读作“必须”

查看 SO 答案:Can create dynamic library for iOS?

【讨论】:

此答案仅对旧 iOS 版本有效。从iOS8开始我们可以使用动态库【参考方案2】:

不,不允许使用动态库。

但是您可以创建静态库,甚至是“静态框架”(也就是说,就像经典框架一样,一个带有“.framework”扩展名的文件夹,其中包含您的标头、资源文件(如果有的话)和库本身,除了你的库必须是静态库)。

【讨论】:

以上是关于我可以在我的 iphone 应用程序中使用动态库(共享对象)吗?的主要内容,如果未能解决你的问题,请参考以下文章

iPhone将图像从imageview存储到文件

如何在 iphone 中释放系统库分配(框架相关)

当我尝试使用 iPhone SDK 的 Finch 库播放声音时,为啥我的应用程序会崩溃?

在 Xcode 中使用自动布局禁用了我的代码(动态)工作?

Xcode for iPhone 中静态库和动态库的区别

在我的 iphone 应用程序中使用 wifi