在具有部署目标 iOS 7.0 及更早版本的扩展包含应用程序中使用嵌入式框架

Posted

技术标签:

【中文标题】在具有部署目标 iOS 7.0 及更早版本的扩展包含应用程序中使用嵌入式框架【英文标题】:Using embedded framework in extension's containing app with deployment target iOS 7.0 and earlier 【发布时间】:2015-03-10 15:20:51 【问题描述】:

我正在为部署目标早于 ios 8.0 的应用开发 Today Widget Extension。 在苹果Extension Programming Guide 中,他们建议使用嵌入式框架在应用扩展及其包含的应用之间共享代码。

您可以创建一个嵌入式框架来在您的应用程序之间共享代码 扩展程序及其包含的应用程序。

在本指南的最后,他们解释了如何使用 dlopen 命令将包含应用程序部署到旧版本的 iOS 8.0。

在我添加了框架目标后,项目没有成功构建。 它总是失败并出现以下错误:

    Lipo 错误:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo:无法打开输入文件:PATH_TO_BUILD/armv7/APP_NAME(没有这样的文件或目录)李> Apple Mach-O 链接器错误:ld:嵌入式 dylibs/框架仅在 iOS 8.0 及更高版本 (@rpath/FRAMEWORK_NAME) 上支持架构 armv7

(使用 arm64 架构重复错误 2)

我做错了什么?

还有其他方法可以在应用扩展程序及其包含的应用程序之间共享代码吗?

如果有人知道dlopen 解决方案,请输入“操作方法”教程(欢迎提供示例)。

【问题讨论】:

【参考方案1】:

您不能在 iOS 7 上使用嵌入式框架,即使使用 dlopen

他们在该页面上的解释(不是很清楚)是,如果您的应用在 iOS 8 上使用嵌入式框架并且您想在 iOS 7 上部署应用,您可以' t 在 iOS 8 上自动加载框架。而是在构建过程中将框架复制到应用程序包中,然后仅在 iOS 8 上使用 dlopen 从代码加载框架。

在 iOS 7 上,该框架将存在于 app bundle 中,但 iOS 7 不支持以任何方式将其加载到应用程序中,包括dlopen

如果您想在应用程序和扩展程序之间共享代码部署在 iOS 7 上,则不能使用框架来共享代码。您需要在应用目标和扩展目标中包含所有共享代码。

【讨论】:

目前,我已经在应用目标和扩展目标中包含了所有共享代码,工作正常。但是,在提交到 App Store 时,申请会不会被拒绝? 你为什么会这样想? Apple 推荐使用嵌入式框架在应用扩展程序及其包含的应用程序之间共享代码可能是有原因的。 这是一个很好的软件设计实践,当它起作用时。在这里它不起作用。没有其他方法可以在这两个地方使用代码,而且我从未听说过 Apple 关心这一点。 我们通过什么 Xcode 机制在目标中包含框架?

以上是关于在具有部署目标 iOS 7.0 及更早版本的扩展包含应用程序中使用嵌入式框架的主要内容,如果未能解决你的问题,请参考以下文章

用 Swift 编写的代码可以在 iOS 7 及更早版本上运行吗? [复制]

如何在 iOS 15 及更早版本上支持程序化视图关闭

ios:文本在 iPhone 5S 及更早版本(4 英寸及更小的设备)上无法正确换行

TestFlight 是不是支持 ios7 及更早版本?

iOS 部署目标设置为 7.0,但此平台支持的部署目标版本范围为 8.0 到 12.1。 (在目标“反应”中)

Python 3.6及更早版本的精确时间(纳秒)?