Xcodeからgitでpushした際に何度もエラーとなってしまい対処したこと。

iPhoneアプリ開発

xcode_push ようやく開発環境が整ってきました。iPhoneアプリのソースのバージョン管理にはgitが使われていますが、コミットしたのに、何度リモートリポジトリにpushしようとしてもエラーとなり、少しはまることに。対処法を記載しておきます。 エラーメッセージ

Commit or discard the changes and try again

プッシュできない原因は”UserInterfaceState.xcuserstate”というファイル すべてコミットしたあとにもう一度コミットしてみると”UserInterfaceState.xcuserstate”というファイルをコミットするよう何度も催促されます。どうやらXcodeを操作するたびに更新されるもののようです。そのため、頻繁に書き込みが行われ、gitの管理対象としていると、コミットしてもすぐに内容の更新が行われ、結果的にプッシュもできない状態となります。 “UserInterfaceState.xcuserstate”をgitの管理対象から外す 1. “.gitignore”ファイルを作成し、gitが使用される際に無視してもらう。 用途はファイル名の通りで、gitでの管理から除外されます。この中に管理対象外としたいファイルのパスを記載します。

"プロジェクト名".xcodeproj/project.xcworkspace/xcuserdata/"ユーザー名".xcuserdatad/UserInterfaceState.xcuserstate

プロジェクトのフォルダをカレントディレクトとした場合、上記の場所に配置されています。 ダブルクォーテーションで囲まれた部分が、各プロジェクト、各人で異なる部分です。 適宜変更をお願い致します。 上記のパスを記載した「.gitignore」ファイルをプロジェクトフォルダの直下に配置します。 (“プロジェクト名”.xcodeprojファイルと同じ階層に配置します) 2.ターミナル画面を使用して、gitの管理下から”UserInterfaceState.xcuserstate”ファイルを削除する。 既にgit管理下にファイルが存在する場合は、「.gitignore」の有無とは関係なくpushの対象として扱われるようです。 そのため、ファイルを削除する必要があります。 削除のためのコマンドは以下の通りです。 (オペレーションはプロジェクトのディレクトリに移動した上で行います。)

git rm --cached "プロジェクト名".xcodeproj/project.xcworkspace/xcuserdata/"ユーザー名".xcuserdatad/UserInterfaceState.xcuserstate

(rm:削除、–cached:ファイル自体は削除しない)

git commit -m "commit"

(ダブルクォーテーションはコメント欄です。任意に変更してください。) 以上の操作を行うことで、Xcodeからpushが可能となります。 一人でも誰かの役にたてるとうれしいです。