本文档提供了 iOS 开发的 gitignore 模式的详细信息,涵盖 Objective-C 和 Swift 项目。它解释了在开发 iOS 应用程序时,通常应该从版本控制中排除哪些文件和目录。有关 Android 特定的 gitignore 模式,请参阅 Android 开发。
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 会生成用户特定的设置和文件,这些文件不应提交到版本控制,因为它们包含个人偏好和本地环境配置。
xcuserdata/ 目录包含:
这些设置对于每个开发人员都是唯一的,应予以排除,以避免冲突和仓库膨胀。
来源: Global/Xcode.gitignore1-2 Objective-C.gitignore5-6 Swift.gitignore5-6
由于共享的构建过程和 Xcode 工具链,Objective-C 和 Swift 都共享几个通用的 gitignore 模式。
表:常见的 iOS 构建产物
| 模式 | 描述 | 出现在 |
|---|---|---|
*.hmap | 构建过程中生成的头文件映射文件 | 两个模板中 |
*.ipa | iOS 应用程序归档(最终应用包) | 两个模板中 |
*.dSYM.zip | 压缩的调试符号 | 两个模板中 |
*.dSYM | 调试符号文件(用于崩溃报告) | 两个模板中 |
来源: Objective-C.gitignore8-14 Swift.gitignore8-14
Swift 项目有其他特定模式,而 Objective-C 项目则不需要。
Swift Playgrounds 是交互式编码环境,会生成需要排除的文件。
timeline.xctimeline
playground.xcworkspace
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 特有文件组织
iOS 开发通常使用多种依赖管理工具,每种工具都有特定的 gitignore 考虑因素。
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 是 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 包管理器的注释模式。
# 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
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 时,请考虑以下最佳实践:
从合适的模板开始:根据项目的语言,使用 Objective-C.gitignore 或 Swift.gitignore 模板。
评估依赖管理策略:根据团队的工作流程,决定是否排除 Pods/ 等依赖项目录。
考虑项目特定的产物:为模板未涵盖的任何项目特定的生成文件添加模式。
谨慎处理工作空间文件:虽然可以排除 .xcworkspace 文件,但它们通常包含重要的项目配置,尤其对于 CocoaPods 项目。
随着工具的发展更新您的 gitignore:随着 iOS 开发工具的更新,可能需要新的模式来排除生成的产物。
表:可选 Gitignore 模式决策矩阵
| 模式 | 包含在 Git 中 | 排除在 Git 外 | 注意事项 |
|---|---|---|---|
Pods/ | 确保构建一致性 | 减小仓库大小 | 团队规模、CI 设置 |
*.xcworkspace | CocoaPods 所必需 | 可重新生成 | 是否使用 CocoaPods |
Carthage/Checkouts | 依赖项版本控制 | 减小仓库大小 | 构建可重现性 |
Package.resolved | 锁定依赖版本 | 允许灵活性 | 开发阶段 |
来源: Objective-C.gitignore16-25 Swift.gitignore34-43
iOS gitignore 模板提供了全面的模式,用于将 Xcode 用户设置、构建产物和依赖管理文件排除在版本控制之外。通过正确配置 iOS 项目的 gitignore,开发人员可以维护干净的仓库,避免不必要的文件,同时确保所有重要的项目文件都得到妥善跟踪。
有关移动开发 gitignore 模板的更多信息,请参阅 移动开发模板。