はじめに
こちらは個人開発アプリができるまで by am10 Advent Calendar 2024の 4 日目の記事です。
4 日目は Xcode プロジェクトのコードを書く前の初期設定についてです。今回は Xcode 16.0 を使います。
プロジェクト作成
Xcode でプロジェクトを作成し以下のように SwiftUI, Swift Testing, SwiftData を選択します。Priduct Name は家計簿ということで「ExpenseLog」にしました(支出入力のみという感じがでるかなと)。
git 管理したいので以下のように Create Git repository にチェックを入れてプロジェクトを作成します。
フォルダ構成
フォルダ構成を整理します。以下のような感じです。
Sources にはコードファイル Resources にはアセットを入れます。
Sources はさらに以下のようにわけています。
- Models:画面表示関連以外のものすべて
- Screens:各画面
- Views:ボタンなどのカスタム View
.gitignore作成
ルートディレクトリに .gitignore を作成します。以下のサイトで「Swift」「Xcode」を指定して作成しました(.gitignore ファイルの作成はターミナルで touch コマンドを使いました)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# Created by https://www.toptal.com/developers/gitignore/api/swift,xcode # Edit at https://www.toptal.com/developers/gitignore?templates=swift,xcode ### Swift ### # Xcode # # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore ## User settings xcuserdata/ ## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) *.xcscmblueprint *.xccheckout ## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) build/ DerivedData/ *.moved-aside *.pbxuser !default.pbxuser *.mode1v3 !default.mode1v3 *.mode2v3 !default.mode2v3 *.perspectivev3 !default.perspectivev3 ## Obj-C/Swift specific *.hmap ## App packaging *.ipa *.dSYM.zip *.dSYM ## Playgrounds timeline.xctimeline playground.xcworkspace # Swift Package Manager # 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 .build/ # CocoaPods # 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/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 # Carthage # Add this line if you want to avoid checking in source code from Carthage dependencies. # Carthage/Checkouts Carthage/Build/ # Accio dependency management Dependencies/ .accio/ # fastlane # It is recommended to not store the screenshots in the git repo. # Instead, use fastlane to re-generate the screenshots whenever they are needed. # For more information about the recommended setup visit: # https://docs.fastlane.tools/best-practices/source-control/#source-control fastlane/report.xml fastlane/Preview.html fastlane/screenshots/**/*.png fastlane/test_output # Code Injection # After new code Injection tools there's a generated folder /iOSInjectionProject # https://github.com/johnno1962/injectionforxcode iOSInjectionProject/ ### Xcode ### ## Xcode 8 and earlier ### Xcode Patch ### *.xcodeproj/* !*.xcodeproj/project.pbxproj !*.xcodeproj/xcshareddata/ !*.xcodeproj/project.xcworkspace/ !*.xcworkspace/contents.xcworkspacedata /*.gcno **/xcshareddata/WorkspaceSettings.xcsettings # End of https://www.toptal.com/developers/gitignore/api/swift,xcode |
最小 OS など設定
Targets > general から最小 OS などを設定していきます。
Minimum Deployments で iOS 17 を指定します。最新から 1 つ下をサポートすれば 80% 以上のシェアは確保できるのでだいたいは 1 つ下までサポートするようにしています(それ以上下げるとメンテがむずかしい)。
Identity で App Category とアプリバージョン・ビルドバージョンを指定します。
App Category は家計簿なので Finance でいいでしょう。アプリバージョン・ビルドバージョンは最初なのでどちらも 1.0.0 にします。
必要であればここで Bundle Identifier も変更しておきます。
今回は縦固定表示なので Deployment Info で Portrait 以外のチェックをはずします。
Swift 6 モードに変更
Xcode 16 は Swift 6 が入っていますがデフォルトでは Swift 5 モードになっています。おそらくいずれ Swift 6 への移行が必要になると思われるので Swift 6 モードに変更しておきます。
Build Settings > Strict Concurrency Checking で Minimal から Complete に変更する。
Build Settings > Swift Language Version で Swift 5 から Swift 6 に変更する。
参考
リンター設定
以前まではリンターには SwiftLint を使っていたのですが Xcode 16 からは swift-format が付属されているので swift-format を使います。
注意:SwiftFormat ではありません。
- Build Phases > + > New Run Script Phase から Run Script を追加する(わかりにくいので swift format に名称変更)
- 以下のスクリプトを追加する
12345if which swift-format >/dev/null; thenswift-format lint --recursive .elseecho "warning: swift-format not installed"fi - Based on dependency analytics のチェックをはずす
こんな感じです。
次に以下のような .swift-format ファイルをルートディレクトリに作成します(ファイルは touch コマンドで作成)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
{ "version": 1, "lineLength": 100, "indentation": { "spaces": 4 }, "maximumBlankLines": 1, "respectsExistingLineBreaks": true, "lineBreakBeforeControlFlowKeywords": false, "lineBreakBeforeEachArgument": false, "rules": { "NoAccessLevelOnExtensionDeclaration": false, } } |
設定については Configuration.md) ルールについては RuleDocumentation.md に記載されています。
こちらの記事が参考になりました。
これでビルド時にリンターがチェックしてくれるようになりました(個人的にフォーマッターで勝手に変わるの好きじゃないのでフォーマッターは使ってません)。
Xcode のバージョン指定
次に Xcode のバージョンを指定します。とくにやらなくてもいいのですが Xcode のバージョンは揃えたいので設定しています。
- ルートディレクトリに以下の .xcode-version ファイルを作成する(ファイルは touch コマンドで作成)
12REQUIRED_XCODE_VERSION='16.0'REQUIRED_XCODE_PRODUCT_BUILD_VERSION='16A242d' - Build Phases > + > New Run Script Phase から Run Script を追加する(わかりにくいので Xcode Version に名称変更)
- Input Files に
$(SRCROOT)/.xcode-version
を追加する - 以下のスクリプトを追加する
12345if which swift-format >/dev/null; thenswift-format lint --recursive .elseecho "warning: swift-format not installed"fi - Based on dependency analytics のチェックをはずす
こんな感じです。
これでビルドした場合に Xcode のバージョンが異なっていればエラーを表示するようになります。
設定が 15.0 で 16.0 で開くとこんな感じエラーが表示されます。
Xcode のバージョン確認は Xcode > About Xcode で以下のように確認できます。
参考
おわりに
option + command + C でコミットして今回は終了です。これでアプリを作る準備は整いました!ルートディレクトリはこんな感じになります。
明日はデータ取得・登録の API まわりの実装について書きます。
コメント