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

Using embedded framework in extension's containing app with deployment target iOS 7.0 and earlier

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

You can create an embedded framework to share code between your app extension and its containing app.

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

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

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

(错误 2 在 arm64 架构中重复出现)

我做错了什么?

是否有其他方法可以在应用扩展与其包含的应用之间共享代码?

如果有人知道 dlopen 解决方案,请输入 "How to" 教程(欢迎提供示例)。

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

他们在该页面上解释的(不是很清楚)是,如果您的应用程序在 iOS 8 上使用嵌入式框架,您想要部署iOS 7 上的应用程序,您不能在 iOS 8 上自动加载框架。相反,您将框架复制到应用程序包中作为构建过程的一部分,然后 在 iOS 8 only 使用 dlopen 从代码加载框架。

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

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