KojiMurata()

=

開発備忘録

[Git] リリース担当の自分がよく間違えることをメモっておきます




こんにちは!フリーランスiOSエンジニアのKOJIです!

今回は、当時私が担当していた「Gitから最新の情報をプルし、Xcodeでビルドする」リリース作業に特化した、備忘録を記録します。そのため、マージ(merge)、コミット(commit)、プッシュ(push)などといった作業については扱いません。あくまでも、リリース担当者目線で書きます!

この投稿の経緯

納期が近づくと、Gitで管理されている最新のソースコードを自分のローカル環境であるMacにダウンロードし、ビルドをするという作業が発生します。比較的シンプルそうに聞こえる作業ですが、実際にコードを正常にプルしてから、ビルドできる様になるまで、つまずいた事が多々あったため、作業する際に振り返るため、解決法のステップをこの記事に投稿することにしました。

現在のブランチを確認する

実装側で作業している同じBranchにいることをまず確認する必要があります。Terminalから現在のブランチを確認するには、まず .xcworkspace が存在するディレクトリに移動してから、以下のコマンドを入力します。

git branch

すると、現在のブランチを以下のように、*と緑のハイライトで現在のブランチを示されます。

* dev-escapeProj
  test-branch
  master

もし実装と別のブランチにいる場合、ブランチを変更する必要があります。例えとして、「test-branch」に変更したい場合は、以下のコマンドを入力します。

git switch test-branch

すると、「test-branch」のブランチに移行されます。「git branch」のコマンドを入れてみて、以下の通りに現在のブランチが変更されていると、成功です!

  dev-escapeProj
* test-branch
  master

では、ブランチを変更したら次のステップに移ります。

ローカル環境の変更を破棄

まず、最新のコードを pull する前に、Xcode上でローカル環境で編集履歴がないかを確認する必要があります。当時自分は実装担当ではないため、コードを触っていないことから変更は存在しないと思いこんでいました。しかし、実際にXcodeを確認すると、3件もの変更履歴が存在していました!

確認すると、プロジェクトの設定で「バージョンNo」や、「ビルドNo」に変更を加えた時点で変更履歴としてカウントされていたことが分かりました。Xcodeのプロジェクトファイルの設定を変更すると、確かにGit上にある内容と一致しなくなるため、変更扱いになるということで理解しました。良い勉強となりました。そのため、安全にGitから最新のコードをプルするには、一旦ローカル環境での変更履歴を破棄する必要がありました。

ローカル環境で変更を破棄する

自分はXcodeから変更履歴を確認したり、変更内容を破棄するため、Xcodeから変更履歴を破棄するステップをこちらに記載させていただきます。

英語表記で失礼いたします。まず、イメージにある通り:

  1. Xcodeのプロジェクト画面でレポジトリのタブを開き
  2. 「changes」をクリックします。
    • この時点で、「Uncommitted Changes」の下にローカル環境で変更されているファイルのリストが表示されます。現在の場合、「project」ファイルのみに変更を加えているため、そのファイルが表示されています。
  3. 「project」ファイルを右クリックし
  4. 「Discard Changes in “project.pbxproj”…」をクリックする
    • Discardは、破棄するという意味です。

この手順はファイル一個一個に対して変更を破棄しないと行けないので、非常に面倒です。私のように、どのファイルにどのような変更があるかを一個一個確認したい場合は、この方法で行っても問題ありません。しかし、変更履歴のあるファイルの数が膨大な場合、一気に破棄したいでしょう。そんな時は、以下のコマンドを使うことができます。

git reset --hard

すると、すべての変更履歴が破棄され、以前プルした状態のコードに戻ります。

ここで、自分のローカル環境での変更履歴がなくなり、安全に最新のコードをGitからプルする事ができます。(Gitにあるコードとローカルにあるコードを全く同じ状態を目指します)

Gitからコードをプルする

プルするのは、非常に簡単です。以下のコマンドを入力することにより、プルできます。

git pull

Gitから最新のコードが、ローカル環境に同期されます。Xcodeで以下の通り、ファイルステータスを更新することにより、Gitリポジトリ上の最新の変更履歴を確認できます。

この状態で、Xcodeでアプリをビルドします。問題なくビルドした場合は、リリースします。この時参画していたプロジェクトは「エンタープライズ」アプリのため、一般向けのリリースではなく、先方だけが専用のダウンロードサイトから本アプリをダウンロードできるようにする必要がありました。

そのような、認証で管理されているダウンロードサイトの作り方については、また次回投稿しようかな〜、と思います。