带有 Swift 3 和 pod 的 iOS 构建大小

标签 ios swift cocoapods

我刚刚注意到使用 Swift 的 cocoapods 增加了构建大小,但是当我手动使用相同的库时构建大小是正常的。

我创建了一个包含一些 pod 的空白项目,构建大小达到 10MB,而 .app 文件大约为 40MB。

我还注意到我的 .app 文件包含我所有的 cocoapods 框架 (约 37MB)通过查看“包内容”。 enter image description here

我的 podfile 有这些 pod

pod 'Alamofire', '~> 4.4'

pod 'SwiftyJSON'

pod 'IQKeyboardManagerSwift'

pod 'ActionSheetPicker-3.0'

pod 'Kingfisher'

pod 'JKNotificationPanel'

我的问题是

  1. 为什么我的 .app 文件包含所有框架,我猜它只发生在 Swift 和 cocoapod 上(如果我错了请纠正我)?
  2. 我们如何通过在 Swift 中使用 cocoapods 来减少构建的大小

提前致谢

最佳答案

如果您将库用作静态库,链接器可以从构建中排除您不使用的部分。框架并非如此。因此,如果您只是使用这些库制作了一个应用程序而没有使用它们,则根本不会包含它们,因此这不是一个公平的比较。

当您问为什么您的应用程序包含所有框架时,我假设您指的是用于 swift 运行时的框架,而不是您在 cocoapods 中明确要求的依赖项。所有 swift 应用程序都捆绑了运行时,至少在运行时变得足够稳定之前(现在经常更改),然后手机操作系统将包含它的几个版本,我们不必将它包含在应用程序中。

另外,不要被应用程序的大小吓到。用户下载的应用程序的实际大小要小得多。您可以在 iTunesConnect 的事件选项卡中看到它,然后选择您的构建,一旦您显然已经将其上传到那里。我见过上传到 iTunesConnect 大约 120MB 的应用程序,然后最终下载到用户的是 20 到 30MB。

获取更多信息后编辑: 你说你正在比较将库的源代码拖到你的项目中与 cocoapods,这里有一个明显的区别:如果你添加库的源文件,它与添加库的编译框架不同。如果添加源,很多未使用的东西将被优化掉,从而影响大小。这方面的示例是当库包含库本身未使用的类别时。除非使用某些链接器标志,否则该类别会被优化掉,并且在使用该库的应用程序上不起作用(如果您需要更多信息,可以搜索 all_load)。当使用框架时,没有任何优化,但由于 Cocoapods,这不会发生。您可以使用没有 Cocoapods 的框架,并且您应该得到关于大小的完全相同的结果。

编辑 2: 看起来 swift 5 可能会实现 ABI 稳定性!有了它,我们也许可以为需要尽可能小的应用程序选择 swift!

关于带有 Swift 3 和 pod 的 iOS 构建大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44254940/

相关文章:

ios - 核心数据错误

ios - UIMotionEffect 和 CoreMotion 有何不同?

ios - 从行中的单个项目隐藏 View (collectionViewCell 项目)

swift3 - 在 Swift3 中使用 SwiftyJSON

ios - 从 repo 中的文件夹中检索 pod

ios - Cocoapods超时问题

ios - 如何向 iOS 中的所有 Controller 发送通知

ios - Sprite Kit 创建倒数计时器问题

ios - 如何在 SwiftUI 中迭代/foreach 数组

swift - 将单元格删除函数从 Swift 3 转换为 Swift 5