🎍

Xcodeプロジェクトの新規作成時にやること個人的まとめ

2025/01/02に公開

はじめに

Xcodeプロジェクトの新規作成時に毎回やること(GitHubテンプレートを作成してもよい)が、個人的にも毎年少しずつ変わってきているので、とりあえず2025年1月現在にやっていることをここにまとめます。

.gitignore

GitHubから新規作成するなら、GitHubのデフォルトの .gitignore を使ってもいいです。
とはいえ個人的には相変わらず gitignore.io を使っています。

https://www.toptal.com/developers/gitignore

インストール方法

端末ごとに1回だけ、次のコマンドラインを実行すると、gitignoreを生成するためのツールがインストールされます。

echo "function gi() { curl -sLw \"\\\n\" https://www.toptal.com/developers/gitignore/api/\$@ ;}" >> \
~/.zshrc && source ~/.zshrc

https://docs.gitignore.io/install/command-line#macos より引用

使い方

プロジェクトのルートディレクトリで、次のコマンドラインを実行すると、Swift言語の設定が .gitignore ファイルに追加されます。

gi swift >> .gitignore

https://docs.gitignore.io/use/command-line より引用

.editorconfig

Xcode16からEditorConfigがサポートされました。
何がいいかというと、例えばインデント設定について、同時進行しているプロジェクトで、それぞれインデント設定が4つだったり、2つだったりバラバラの場合がありえますよね。そのときにこれまでは、プロジェクトを変えるごとに、Xcodeの環境設定から、インデント設定を手動でぽちぽち切り替えていたことと思いますが、その手作業が不要になります。 .editorconfig を各プロジェクトに置くことで、EditorConfigがXcodeの環境設定のエディター関係の設定を上書きしてくれるからです。

https://developer.apple.com/documentation/xcode-release-notes/xcode-16-release-notes#Source-Editor

引用

Source Editor
New Features
Added support for EditorConfig. The editor now respects indentation settings given in .editorconfig files. Xcode supports the following settings: indent_style, tab_width, indent_size, end_of_line, insert_final_newline, max_line_length, and trim_trailing_whitespace. See https://editorconfig.org for more information. Settings from .editorconfig files normally take precedence over settings given in the “Text Editing” section of View > Inspectors > File for a file or group. This can be disabled by unchecking the “Prefer Settings from EditorConfig” checkbox on the Indentation tab of Xcode > Settings > Text Editing. (20796230)

(日本語訳)EditorConfigのサポートが追加されました。エディターは、.editorconfigファイルで与えられたインデント設定を尊重するようになりました。Xcodeは、次の設定をサポートしています:indent_style、tab_width、indent_size、end_of_line、insert_final_newline、max_line_length、およびtrim_trailing_whitespace。詳細については、https://editorconfig.orgを参照してください。.Editorconfigファイルからの設定は、通常、ファイルまたはグループの[表示]>[インスペクタ]>[ファイルの[テキスト編集]]セクションで指定された設定よりも優先されます。これは、Xcode > 設定 > テキスト編集の [インデント] タブの [EditorConfig からの設定] チェックボックスをオフにすることで無効にできます。(20796230)

.editorconfigの例

# EditorConfig is awesome: https://editorconfig.org

[*.swift]
indent_style = space
tab_width = 4
indent_size = 4
end_of_line = crlf
insert_final_newline = true
max_line_length = 120
trim_trailing_whitespace = true

参考資料

詳しくは次の記事が参考になります。
https://www.polpiella.dev/xcode-editor-config
https://editorconfig.org

プルリクエストテンプレート

個人開発の場合も、なんだかんだわかりやすいのでプルリクエストテンプレートを設定しています。
過去には詳細なテンプレートを作成していたこともありましたが、今はすごくシンプルなものに落ち着いています。

.github/pull_request_template.md

## 要件・仕様

## 処理概要

## 動作確認

## 特記

## 参考資料

参考資料

GitHub Docs > リポジトリ用のプルリクエストテンプレートの作成
https://docs.github.com/ja/communities/using-templates-to-encourage-useful-issues-and-pull-requests/creating-a-pull-request-template-for-your-repository

String Catalog

ローカリゼーションのため、及び文言管理のために、String Catalogを利用します。

デフォルト名のまま「Localizable.xcstrings」を生成します。

Info.plist用のString Catalog

アプリの表示名(Bundle Display Name / CFBundleDisplayName)をローカライズしたい場合、String Catalogを利用し、名称を「InfoPlist.xcstrings」として生成します。
ファイルを生成して、ビルドをすると次のようになります。

整理すると、次のスクショのように、 .xcstrings ファイルが2つ並ぶことになります。

README.md

タイトルと、少なくともソフトウェア要件を記載することにしています。

# タイトル

## ソフトウェア要件

- Xcode 16.2(16C5032a)
- Compiler Version: Swift 6
- Language Mode: Swift 6
- Minimum Deployments: iOS 18.2 〜
- Supported Destinations: iPhone, iPad

Build Settings

Versioning

[Marketing Version](アプリバージョンに相当) と [Current Project Version](ビルド番号に相当)を更新します。
特に要件がなければ複数TARGETSがあったとしても、同一のアプリバージョンで管理すればいいかと思いますので、私の場合は、TARGETSレベルに設定されている値を削除し、PROJECTレベルに記入しなおしています。

before
デフォルト値

after
変更後

やり方

TARGETSレベルに設定されている値を削除する方法は次のとおりです。
[Build Settings]タブで、TARGETSレベルを選び、対象の項目([Marketing Version]など)にフォーカスを当てた状態でdeleteキーを押します。


この状態でdeleteキーを押します


TARGETSレベルに設定されている値が削除されます

PROJECTレベルに記入する方法は、PROJECTレベルを選び、対象の項目([Marketing Version]など)の値の欄をダブルクリックして入力ポップアップを開き、値を入力します。


ダブルクリックして入力ポップアップを開き、値を入力します

Swift Language Version

[Swift Language Version](Swift Language モードに相当)を、新規プロジェクトの場合はSwift6に最新化します。デフォルトでSwift5なのですよね。
これも私の場合は、TARGETSレベルに設定されている値を削除し、PROJECTレベルに記入しなおしています。


デフォルト値


変更後

今後

今後も随時更新していきます。
かつて SwiftFormat を使っていたところもswift-formatに差し替えて取り入れたい。

Discussion