菜单

iOS 开发

相关源文件

目的与范围

本文档提供了 iOS 开发的 gitignore 模式的详细信息,涵盖 Objective-C 和 Swift 项目。它解释了在开发 iOS 应用程序时,通常应该从版本控制中排除哪些文件和目录。有关 Android 特定的 gitignore 模式,请参阅 Android 开发

iOS 开发 Gitignore 模板概述

GitHub gitignore 存储库包含三个与 iOS 开发相关的主要模板:

  • Objective-C.gitignore - 适用于 Objective-C iOS 项目
  • Swift.gitignore - 适用于 Swift iOS 项目
  • Global/Xcode.gitignore - 适用于 Xcode IDE 设置(两个语言模板都引用)

这些模板包含的模式有助于 iOS 开发人员排除构建产物、用户特定设置、依赖目录和其他非必要文件,使其不被版本控制。

图示:iOS 开发 Gitignore 模板结构

来源: Objective-C.gitignore1-44 Swift.gitignore1-62 Global/Xcode.gitignore1-2

常见的 Xcode 用户设置

Xcode 会生成用户特定的设置和文件,这些文件不应提交到版本控制,因为它们包含个人偏好和本地环境配置。

xcuserdata/ 目录包含:

  • 用户特定的方案管理
  • 断点配置
  • 用户界面状态
  • 个人构建设置

这些设置对于每个开发人员都是唯一的,应予以排除,以避免冲突和仓库膨胀。

来源: Global/Xcode.gitignore1-2 Objective-C.gitignore5-6 Swift.gitignore5-6

Objective-C 和 Swift 的通用模式

由于共享的构建过程和 Xcode 工具链,Objective-C 和 Swift 都共享几个通用的 gitignore 模式。

表:常见的 iOS 构建产物

模式描述出现在
*.hmap构建过程中生成的头文件映射文件两个模板中
*.ipaiOS 应用程序归档(最终应用包)两个模板中
*.dSYM.zip压缩的调试符号两个模板中
*.dSYM调试符号文件(用于崩溃报告)两个模板中

来源: Objective-C.gitignore8-14 Swift.gitignore8-14

Swift 特有模式

Swift 项目有其他特定模式,而 Objective-C 项目则不需要。

Swift Playgrounds

Swift Playgrounds 是交互式编码环境,会生成需要排除的文件。

timeline.xctimeline
playground.xcworkspace

Swift 包管理器

Swift 包管理器会生成需要排除的构建产物。

.build/           # Build directory
# Optional exclusions:
# Packages/       # Dependencies
# Package.pins    # Package version pins
# Package.resolved # Resolved dependencies
# *.xcodeproj     # Generated Xcode project
# .swiftpm        # Swift Package Manager metadata

来源: Swift.gitignore16-32

图示:Swift 特有文件组织

来源: Swift.gitignore16-32

依赖管理工具

iOS 开发通常使用多种依赖管理工具,每种工具都有特定的 gitignore 考虑因素。

CocoaPods

CocoaPods 是 Swift 和 Objective-C 项目的依赖管理器。模板提供了关于处理 Pods 目录的注释。

# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org.cn/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
# Pods/
#
# Add this line if you want to avoid checking in source code from the Xcode workspace
# *.xcworkspace

模板建议根据项目需求评估是否排除 Pods/ 目录,并提供了可以取消注释的注释掉的模式(如果需要)。

Carthage

Carthage 是 iOS 和 macOS 的去中心化依赖管理器。

# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts

Carthage/Build/

默认情况下,模板会排除 Carthage/Build/ 目录(包含编译后的框架),并注释掉排除 Carthage/Checkouts 的选项(如果需要)。

Swift 包管理器

对于 Swift 项目,模板包含 Swift 包管理器的注释模式。

# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
# Packages/
# Package.pins
# Package.resolved
# *.xcodeproj
#
# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
# hence it is not needed unless you have added a package configuration file to your project
# .swiftpm

来源: Objective-C.gitignore16-32 Swift.gitignore20-43 Swift.gitignore34-43

图示:iOS 依赖管理工具

来源: Objective-C.gitignore16-32 Swift.gitignore20-43 Swift.gitignore34-43

CI/CD 工具

Fastlane

Fastlane 是用于自动化 iOS 和 Android 部署和发布流程的工具。两个 iOS 模板都包含用于忽略 fastlane 生成文件的模式。

fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots/**/*.png
fastlane/test_output

这些文件在 CI/CD 过程中自动生成,无需进行版本控制。

来源: Objective-C.gitignore34-44 Swift.gitignore52-62

iOS Gitignore 配置的最佳实践

在为 iOS 项目设置 gitignore 时,请考虑以下最佳实践:

  1. 从合适的模板开始:根据项目的语言,使用 Objective-C.gitignoreSwift.gitignore 模板。

  2. 评估依赖管理策略:根据团队的工作流程,决定是否排除 Pods/ 等依赖项目录。

  3. 考虑项目特定的产物:为模板未涵盖的任何项目特定的生成文件添加模式。

  4. 谨慎处理工作空间文件:虽然可以排除 .xcworkspace 文件,但它们通常包含重要的项目配置,尤其对于 CocoaPods 项目。

  5. 随着工具的发展更新您的 gitignore:随着 iOS 开发工具的更新,可能需要新的模式来排除生成的产物。

表:可选 Gitignore 模式决策矩阵

模式包含在 Git 中排除在 Git 外注意事项
Pods/确保构建一致性减小仓库大小团队规模、CI 设置
*.xcworkspaceCocoaPods 所必需可重新生成是否使用 CocoaPods
Carthage/Checkouts依赖项版本控制减小仓库大小构建可重现性
Package.resolved锁定依赖版本允许灵活性开发阶段

来源: Objective-C.gitignore16-25 Swift.gitignore34-43

结论

iOS gitignore 模板提供了全面的模式,用于将 Xcode 用户设置、构建产物和依赖管理文件排除在版本控制之外。通过正确配置 iOS 项目的 gitignore,开发人员可以维护干净的仓库,避免不必要的文件,同时确保所有重要的项目文件都得到妥善跟踪。

有关移动开发 gitignore 模板的更多信息,请参阅 移动开发模板