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

时间:2019-05-03 09:09:32

标签: ios swift frameworks design-guidelines

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

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

我知道我将无法访问AppDelegate之类的App-load功能。

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

还有其他我需要关注的事情吗?

谢谢

1 个答案:

答案 0 :(得分:10)

就设计/方法而言,显然有很多选择。

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

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

@UIApplicationMain class ParentAppDelegate: FrameworkAppDelegate { }

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

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

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

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

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

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

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