我可以将整个 iOS 应用程序打包为一个框架吗?

Can I package entire iOS app as a Framework?

我有一个使用原生 iOS (Swift) 实现的应用程序。该应用程序也有网页版。客户想要将我的应用程序嵌入到自己的应用程序中,并建议我使用 iFrame 并加载网络版本。 我知道这是一个棘手的解决方案,因为 Apple 可能会拒绝不使用本机实现的应用程序。

我想问的是,是否有一种方法可以将我的应用程序完全打包为一个框架并以这种方式加载它(应用程序大小相当大,具有多个 viewControllers 和功能)。

我了解我将无法访问 AppDelegate 等应用加载功能。

另外,如果我的应用有库依赖项会怎样? (例如 Alamofire)

还有其他我应该关心的事情吗?

谢谢

就design/approach而言,显然有很多选择。

我已经多次这样做(应用程序在应用程序商店上线),真的就像开发任何框架一样。

第一个:AppDelegate。解决此问题的简单方法是让应用程序的 AppDelegate 子类化框架的 AppDelegate:

@UIApplicationMain class ParentAppDelegate: FrameworkAppDelegate { }

只需确保应用程序在所有相关方法上调用 super

其次:依赖。这可能是最烦人的部分,因为框架不能嵌入其他框架。但是您仍然有一些简单的选择:

  1. 让封闭的应用程序嵌入所需的框架
  2. 将所需框架的源代码直接添加到您的框架中。
  3. 使用依赖管理器(例如 cocoapods)来为您处理此问题。

其他问题:您可以轻松 运行 进入的一个陷阱是使用捆绑包。任何时候动态加载 images/strings/IB references/etc。您需要指定您正在使用 Framework 的 包,因为有时它可以默认使用 app 的 包。最简单的方法是使用 this init 例如Bundle(for: self.self)

另请记住,info.plist 中的设置和您的框架所需的权利将需要由父应用程序添加。

对方法的一般评论: 我的建议(接受或保留 ☺️)对于简单地将您的完整应用程序添加到客户的应用程序是谨慎的。除了 IP 和 App-Review 问题之外,它可能会导致增加很多复杂性或当前应用程序的分支来支持它,从而使未来的维护变得麻烦。

相反,我建议只将您的客户需要的应用程序部分放入一个单独的框架中,您 您的客户使用用于您的单独应用程序。