ios - 如何最好地模块化 Xcode 项目以加速构建

标签 ios swift xcode build compilation

我在一个 iOS 项目的团队中工作,该项目在 Swift 代码方面已经发展到巨大的规模。

从干净状态构建项目大约需要 10 分钟,经过最仔细的检查,在更改代码中的任何内容后构建和运行项目需要 30 秒,即使该代码属于私有(private)方法中的一行未在其他任何地方使用的 Swift 文件符号。

我们已经尝试了很多方法来缩短构建时间,包括来自这个不错的资源的技术 https://github.com/fastred/Optimizing-Swift-Build-Times 没有任何帮助,您仍然需要在更改所有小项后等待整整 30 秒才能在应用程序中看到它。

我们使用 Xcode 10,即编译模式设置为增量的“新构建系统”。如果我通过 Perform Action > Build With Timing Summary 构建项目,最长的阶段是“Swift 代码编译”,这并不是什么新鲜事。我们怀疑 Xcode 试图遵循保守的编译决策并重建每个可能与修改后的 Swift 代码有任何联系的 Swift 文件。而且 Xcode 似乎大部分时间都是错误的,并且做了多余的工作。

我有点怀念 Objective-C 的日子,那时编译器会查看所有 import/include 语句并且只重建显式声明的依赖项,这意味着极快的构建时间。

所以我现在认为也许我们可以将我们的项目分解成模块并在 Swift 中普遍使用 import 来告诉编译器哪些 Swift 文件依赖于哪些其他 Swift 文件。

是否有一种好的且可能是自动化的方法将一个大项目模块化为许多小组件以加速常规的让我们尝试如何工作的构建?

最佳答案

  1. 您可以将项目拆分为 Cocoa Touch Frameworks。 -> https://www.raywenderlich.com/5109-creating-a-framework-for-ios
  2. 将每个框架添加到自己的 git 存储库中。它可能是私有(private)仓库。
  3. 创建私有(private) cocoapods。 -> https://guides.cocoapods.org/making/private-cocoapods.html
  4. 向您的项目 podfile 添加新的依赖项。 -> pod 'YourFramework', :git => 'FrameworkGitRepoPath'

关于ios - 如何最好地模块化 Xcode 项目以加速构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52927746/

相关文章:

ios - 如何在swift中获取绑定(bind)Ble设备列表?

ios - 如何使用 mac-catalyst 应用程序的 CloudKit 数据库订阅调试 "Error acquiring assertion"?

ios - 加载不同案例的数据

iphone - 显示 plist 中的随机问题

ios - Swift 中是否有 NSInvocation 的替代方案?

ios - 在 Swift 中调试时 Xcode 崩溃

ios - NSDateComponents 四舍五入

ios - swift 中的 Objective C 代码是什么?

ios - 预期返回 'Bool' parse.com 推送通知的函数中缺少返回

swift - 使用自动布局绘制 CAShapeLayer