ios – “弱联系”框架是什么意思?

ios – “弱联系”框架是什么意思?,第1张

概述在Xcode中,我可以将框架设置为“可选”而不是“必需”,这意味着该框架是弱链接的. 这是否意味着在导入某个地方时,该框架仅包含在该捆绑包中? 我想用一些使用私有API的调试框架进行弱链接,我不希望它们出现在App Store构建中. 重要的提示: 这个答案是在iOS 8发布之前写的.虽然技术细节仍然适用于系统框架,现在可以构建您自己的,动态链接的框架,在您的应用程序包中发送.有限制,例如,只有一 在Xcode中,我可以将框架设置为“可选”而不是“必需”,这意味着该框架是弱链接的.

这是否意味着在导入某个地方时,该框架仅包含在该捆绑包中?

我想用一些使用私有API的调试框架进行弱链接,我不希望它们出现在App Store构建中.

解决方法 重要的提示:
这个答案是在iOS 8发布之前写的.虽然技术细节仍然适用于系统框架,现在可以构建您自己的,动态链接的框架,在您的应用程序包中发送.有限制,例如,只有一个应用程序和其扩展可以链接到嵌入式框架的相同实例,但实际上仍然是,自iOS 8以来,自定义的动态链接框架是可能的.如果要了解更多信息,请参考 this guide(使用嵌入式框架共享代码)和WWDC 2014会议416,构建现代框架.

原始答案:
(平台)框架中没有一个真的“包含在包中”.相反,您的应用程序在将其添加到“使用库的链接二进制”构建阶段后,会对框架有一个引用(“链接”).这些框架预先安装在设备上.当您运行应用程序时,所有应用程序的框架引用都由动态链接器(在设备上)解决,这意味着框架代码被加载,以便您的应用程序可以使用它.

某些框架可能不适用于您打算支持的所有设备,PassKit在iOS 6中引入.如果您运行的应用程序与iOS 5设备上的PassKit连接,则会在启动后立即崩溃,因为动态链接器不能在设备上找到框架.但是,如果您使用弱链接PassKit,则动态链接器将所有框架的符号设置为nil,如果找不到该框架.这样可以防止应用程序崩溃,您可以在运行时检查符号的可用性,例如:

if ([PKPass class]) {  // Class is available - use it  PKPass *pass = [[PKPass alloc] init];}

PKPass类可以安全地使用在所有设备/系统上,因为PKPass类符号在旧系统上将为零,而在Objective-C中消息传递不是问题.

更多关于弱链接:Apple Documentation

要真正回答你的问题:

Does that mean the framework is only included in the bundle when it is imported somewhere?

不,框架将始终与应用程序相关联.只有当您的应用程序正在运行的实际设备上找不到该框架时,该框架将不会被加载.

一个解决方案是为DeBUG和App Store Builds提供单独的目标.另一种方法是不使用Xcode内置的“link Binary with library”构建阶段,而是通过链接器选项链接DeBUG框架.可以分别为每个配置指定(DeBUG / Release / …),如下所示:

如果你想要弱链接,请使用-weak_framework PassKit(PassKit,当然只是一个例子,插入框架的名称).如果您的DeBUG框架不在默认框架目录中,则可能需要提供完整路径或修改框架搜索路径.此外,您应该可以使用宏来确保没有使用调试框架的代码将其应用于App Store构建.

编辑:另一个选项,因为Xcode 5是使用@import< Frameworkname&gt ;;.这样,您可以将“链接二进制...”阶段留空,并触发代码中框架的链接.然后,您可以使用诸如DEBUG之类的宏来确保一些框架不被用于App Store构建.有一个关于@import的excellent answer.

总结

以上是内存溢出为你收集整理的ios – “弱联系”框架是什么意思?全部内容,希望文章能够帮你解决ios – “弱联系”框架是什么意思?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1063270.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存