10

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

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

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

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

还有什么我应该关心的吗?

谢谢

4

1 回答 1

11

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

我已经做过很多次了(应用商店里有应用程序),真的就像开发任何框架一样。

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

@UIApplicationMain class ParentAppDelegate: FrameworkAppDelegate { }

只需确保 App 调用super所有相关方法即可。

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

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

其他问题:您很容易遇到的一个陷阱是使用捆绑包。任何时候动态加载图像/字符串/IB 参考/等。您需要指定您正在使用框架的捆绑包,因为有时它可以默认使用应用程序的捆绑包。最简单的方法是使用这个初始化,例如Bundle(for: self.self)

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

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

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

于 2019-05-24T17:56:42.717 回答