背景#
最近、プロジェクトで問題が発生し、長い間トラブルシューティングを行った結果、Pod に依存しているプライベートコンポーネントのコードに問題があることが判明しました。これにより、パッケージング時にオンラインパッケージに問題が発生しました。
筆者のプロジェクトでは、機能に基づいてプライベートコンポーネントを抽象化し、Pod を使用してプロジェクトにインポートしています。ただし、Pod の内容は git にコミットされないため、毎回 Pod を変更すると、メインプロジェクトの git の変更履歴には表示されません。そのため、この問題に直面しました。
最初にメインプロジェクトでデバッグ中に、Pod ライブラリの内容を変更しました。そして、変更内容を Pod ライブラリの個別プロジェクトに同期しました。しかし、最後にパッケージングすると、Pod ライブラリの内容は古いままでした。なぜなら、プロジェクトで依存している Pod ライブラリはバージョンが指定されており、Pod ライブラリの個別プロジェクトを更新する際には、ブランチにのみ同期され、新しいタグが更新されなかったからです。そのため、再度メインプロジェクトのライブラリを更新すると、このライブラリの内容が古いものに戻ってしまいます。
Ps:理論的には、Pod ライブラリには頻繁に変更されるべきではなく、基本的なライブラリなどが含まれるべきです。しかし、実際の開発では、コンポーネント化のために、一部の機能コンポーネントも Pod 依存として使用されることがあります。これらのライブラリは頻繁に変更される可能性があります。
この点に基づいて、筆者は Pod の内容をメインプロジェクトの.git に含める方が良いと感じました。変更点を確認しやすくし、上記の問題を回避することができます。
変更#
筆者は直接プロジェクトのディレクトリに移動し、.gitignore
ファイルを編集して、関連する#CocoaPods
の内容を削除しました。以下のようになります:
#CocoaPods
Pods/
Pods
.DS_Store
Podfile.lock
/.DS_Store
Podfile.lock
/Podfile.lock
次に、以下のように変更しました:
#CocoaPods
.DS_Store
/.DS_Store
保存して終了すると、Pod ライブラリはまだ git に表示されませんが、.gitignore
に関連するすべての Pods が削除されました。では、どこが問題なのでしょうか?筆者は多くの回答をオンラインで検索しましたが、解決策は見つかりませんでした。
この時、.gitignore
のトップに次のような文があることに気づきました。
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
筆者はGlobal/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
を検索しましたが、類似のファイルは見つかりませんでした。そこで、筆者はもしかしたらグローバルな.gitignore
ファイルがあるのかもしれないと思い、ルートディレクトリに移動し、open .gitignore
と入力しましたが、The file /Users/horizon/.gitignore does not exist.
というメッセージが表示されました。あれ?このファイルは存在しないのですか?筆者はls -a
と入力しましたが、そこで、ルートディレクトリのファイル名が.gitignore_global
であることに気づきました。開いてみると、確かに Pods が設定されていました。削除して保存し、終了すると、Pods のファイルがメインプロジェクトの.git に表示されるようになりました。
結論#
プロジェクトの.gitignore
ファイルを編集した後、効果がない場合は、ルートディレクトリに移動し、.gitignore_global
を開いて、このグローバル設定も変更する必要があるかどうかを確認してください。