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

12
我有一个原生iOS(Swift)应用程序,也有一个网页版。客户想将我的应用程序嵌入到自己的应用程序中,并建议我使用iFrame并加载网页版本。 我知道这是一个棘手的解决方案,因为苹果可能会因为没有使用本地实现而拒绝该应用。
我想问的是是否有一种方式可以完全将我的应用程序打包成框架并以这种方式加载它(应用程序大小相当大,有多个视图控制器和功能)。
我知道我不能访问App-load函数,例如AppDelegate。
另外,如果我的应用程序具有库依赖关系(例如Alamofire),会发生什么情况?
还有其他我需要关注的事情吗?
谢谢

2
是的,正如您上面所说,您将无法获得AppDelegate和其他类似通知设施的东西。但是您可以做一件事情,就是将您的应用程序的核心概念转换为框架。 - Ephrim Daniel
如果您的客户不需要添加更多功能,那么您应该将您的应用程序部署为白标,而无需将整个项目嵌入框架中。 - Dávid Pásztor
这不是品牌问题。应用程序需要嵌入而不是作为独立应用程序存在。 - PoolHallJunkie
这个 Web 应用程序是做什么的?它是本地应用程序的复制品吗? - Febin Fathah
1个回答

14

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

我已经做过这个多次(并在应用商店上发布了应用),实际上就像开发任何框架一样。

首先: AppDelegate。简单的方式是让应用程序的AppDelegate继承你的框架的AppDelegate

@UIApplicationMain class ParentAppDelegate: FrameworkAppDelegate { }

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

其次: 依赖项。这可能是最烦人的部分,因为框架无法嵌入其他框架。但你仍有几个简单的选项:

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

其他注意事项:在使用Bundle时,需要注意一个容易犯的错误。如果动态加载图片、字符串、IB引用等内容,需要明确指定使用框架(Framework)的bundle,因为有时候默认会使用应用(app)的bundle。最简单的方法是使用这个初始化方法,例如:Bundle(for: self.self)

请注意,框架所需的info.plist和权限设置需要由父级应用程序添加。

一般性建议:我的建议是(您可以采纳或不采纳 ☺️):谨慎地将完整的应用程序添加到客户的应用程序中。除了知识产权和应用审核方面的问题,这还可能导致增加很多复杂性或者分叉您当前应用程序以支持它,使未来的维护成为一件麻烦事。

相反,我建议只将客户需要的部分应用程序放入一个单独的框架中,您和您的客户都可以使用该框架来开发自己的应用程序。


谢谢分享务实的方法。我有一个关于将整个应用程序用作框架的问题:你是如何处理推送通知和深度链接的? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接