我正在使用一个胖静态库,它使用dlopen()在静态库中加载内部模块(.so)文件。在stackoverflow上,开发人员说dlopen()是一个私有API。
在这种情况下,可以使用dlopen()或作为私有API,不应在用户库中使用它,无论库本质如静态/动态。
如果我不能使用dlopen()那么有人可以指向任何资源以替代方法来完成相同的任务。
注意:这是关于baresip BSD库的。 (http://www.creytiv.com/)
更新:该库首先尝试静态加载所有已配置的模块,如果失败,则尝试使用dlopen()动态加载它们。所以删除动态加载代码将解决我的问题。
答案 0 :(得分:1)
dlopen
< iOS 8.参见例如here
答案 1 :(得分:0)
将dlopen
与文字参数一起使用一直都可以。
dlopen已记录在案,因此它不是私有API。只需在终端中键入man dlopen
,或参阅App Extension Programming Guide> Handling Common Scenarios或动态图书馆使用指南> 1,2。
如果您尝试使用dlopen
代码签名但未包含在已审核的应用中,则表示您侵犯了App Review Guidelines 2.5.2:
2.5.2应用程序应自包含在其捆绑包中,不得在指定的容器区域外读取或写入数据,也不得下载,安装或执行代码,包括其他应用程序。
你可能会收到这样的消息:
您的应用,扩展程序和/或链接框架似乎包含明确设计的代码,可以在App Review批准后更改应用的行为或功能,这与App Store查看指南2.5.2和第3.3节不符.2 Apple开发者计划许可协议。
与最初针对App Store进行审核时相比,此代码与远程资源相结合,可以促进应用程序行为的重大更改。虽然您当前可能没有使用此功能,但它有可能加载私有框架,私有方法并启用将来的功能更改。 这包括将任意参数传递给动态方法的任何代码,例如dlopen(),dlsym(),respondsToSelector:,performSelector:,method_exchangeImplementations(),以及运行远程脚本以更改应用程序行为和/或根据下载脚本的内容调用SPI。即使远程资源不是故意恶意的,它也很容易被中间人(MiTM)攻击劫持,这可能给你的应用用户带来严重的安全漏洞。