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

Poo*_*kie 10 frameworks design-guidelines ios swift

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

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

我了解我将无法访问AppDelegate等App-load功能。

如果我的应用程序具有Library依赖项,还会发生什么?(例如Alamofire)

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

谢谢

Str*_*ers 10

在设计/方法方面,显然有很多选择。

我已经做过多次了(应用程序实时存在于应用商店中),实际上就像开发任何Framework一样。

第一: AppDelegate。解决此问题的简单方法是让应用程序的AppDelegate子类成为Framework的子类AppDelegate

@UIApplicationMain class ParentAppDelegate: FrameworkAppDelegate { }

只要确保该应用程序调用super了所有相关方法即可。

第二:依赖关系。这可能是最令人讨厌的部分,因为框架无法嵌入其他框架。但是您仍然有一些简单的选择:

  1. 使封闭的应用嵌入所需的框架
  2. 将所需框架的源直接添加到您的框架中。
  3. 使用一个依赖项管理器(例如cocoapods)来为您解决这个问题。

其他问题:使用捆绑软件可以轻松碰到一个陷阱。每当您动态加载图像/字符串/ IB参考/等时。您需要指定您使用的是框架的捆绑包,因为有时它可以默认为使用应用程序的捆绑包。最简单的方法是使用此init例如Bundle(for: self.self)

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

关于方法的一般性评论:在将您的完整应用程序添加到客户的应用程序中时,我的建议(接受还是保留??)会很谨慎。除了对IP和App-Review的关注之外,它还可能导致增加很多复杂性,或者增加当前应用程序的支持成本,从而使将来的维护工作变得麻烦。

相反,我建议仅将客户端需要的应用程序部分放到一个单独的框架中,您您的客户端可以将它们用于单独的应用程序。