質問

私は数か月間 iOS 開発を行ってきましたが、有望な機能を知ったばかりです。 ココアポッド 依存関係管理用のライブラリ。

個人的なプロジェクトで試してみました。に依存関係を追加しました キウイ 私のPodfileに、実行しました pod install CocoaPodsTest.xcodeproj, 、 そして 出来上がり, 、とてもうまくいきました。

私が疑問に思っている唯一のことは次のとおりです。バージョン管理のために何をチェックインし、何を無視すればよいですか?Podfile 自体と、おそらく .xcworkspace ファイルもチェックインする必要があるのは明らかです。しかし、Pods/ ディレクトリは無視してもよいでしょうか?今後 (他の依存関係を追加するときに) 生成される他のファイルも .gitignore に追加する必要がありますか?

役に立ちましたか?

解決

個人的には、PODSディレクトリとコンテンツをチェックしません。私はその意味を考慮して長年の年齢を過ごしたと言うことはできませんが、私の推論は次のようなものです:

Podfileは、各依存関係の特定のタグまたはまたはコミットを指し、そのため、ポッド自体がPodfileから生成される可能性があるため、Ergoはソースよりも中間ビルド製品のようなものであり、したがってバージョン管理を必要としない私のプロジェクト

他のヒント

PODSディレクトリをコミットします。 PODSディレクトリがビルドアーチファクトであることに同意しません。実際、私はそれが最も間違いなくそうではないと言うだろう。それはあなたの申請書の一部です:それはそれなしでは構築されません!

ビルドツールではなく、開発者ツールとしてCocoApodsを考える方が簡単です。それはあなたのプロジェクトを構築しません、それは単にクローンを作成し、あなたのためにあなたの依存関係をインストールします。単にプロジェクトを構築できるようにCocoApodsがインストールされている必要はありません。

CocoApodsをビルドの依存性にすることで、プロジェクトを構築する必要がある場所で利用できるようにする必要があります...チーム管理者が必要とされている、CIサーバーはそれを必要とします。あなたは、原則として、常にあなたのソースリポジトリを複製し、それ以上の努力なしにビルドすることができます。

PODSディレクトリをコミットしていない場合は、ブランチを頻繁に切り替えると大規模な頭痛も作成します。依存関係が正しいことを確認するために、ブランチを切り替えるたびにPODインストールを実行する必要があります。あなたの依存関係が安定しているがプロジェクトの早い時期には、これは大規模なタイムシンクです。

だから、私は何を無視しますか?何もない。 Podfile、ロックファイルとPODSディレクトリがすべてコミットされます。私を信頼してください、それはあなたに多くの面倒を救います。短所は何ですか?わずかに大きいリポジトリ?世界の終わりではありません。

githubのObjective-C gitignore を使用することをお勧めします。 詳細には、ベストプラクティスは次のとおりです。

.gitignoreファイル

回答実際に.gitignoreを提供しているので、ここには2つの香りがあります。


podsディレクトリのチェックイン/ strong>(メリット

Xcode / iOSに優しいgit ignore、Mac OSシステムファイル、Xcode、ビルド、その他のリポジトリ、バックアップをスキップします。

.gitignore:

# Mac OS X Finder
.DS_Store

# Private Keys
*.pem

# Xcode legacy
*.mode1
*.mode1v3
*.mode2v3
*.perspective
*.perspectivev3
*.pbxuser

# Xcode
xcuserdata/
project.xcworkspace/
DerivedData/

# build products
build/
*.[oa]

# repositories
.hg
.svn
CVS

# automatic backup files
*~.nib
*.swp
*~
*(Autosaved).rtfd/
Backup[ ]of[ ]*.pages/
Backup[ ]of[ ]*.key/
Backup[ ]of[ ]*.numbers/
.


podsディレクトリを無視してメリット

.gitignore: (前のリストに追加)

# Cocoapods
Pods/
.

podsディレクトリをチェックするかどうか、podfileとpodfile.lockは常にバージョン管理下に保存されます。

Podsがチェックインされていない場合、PodfileはおそらくCocoApodごとに明示的なバージョン番号を要求する必要があります。 cocoapods.orgディスカッション

私は一般的にアプリのクライアントに取り組んでいます。その場合、PODSディレクトリをREPOにも追加して、開発者がチェックアウトを実行して構築して実行することができるようにします。

私たち自身のアプリであれば、私はしばらくの間仕事をしないようになるまで、私はおそらくPODSディレクトリを除外します。

実際には、私はあなたの質問に答えるのに最良の人ではないかもしれません。> https://twitter.com/cocoapodsorg

これに対する答えはCocoApod Docsで直接与えられます。 " http://guides.cocoapods.org/using/using-cocoapods.html#-i-ignore-the-pods-directory-in-source-control " "

あなたのポッドフォルダをチェックインするかどうかはあなた次第です、 ワークフローはプロジェクトごとに異なります。私たちはあなたが保持することをお勧めします ソース管理下のPODSディレクトリ、そしてそれを追加しないでください。 .gitignore。しかし最終的にこの決定はあなた次第です:

PODSディレクトリのチェックインの利点

  • レポのクローニング後、CocoApodがマシンにインストールされていなくても、プロジェクトは直ちにビルドして実行できます。いいえ PODのインストールを実行する必要があり、インターネット接続は必要ありません。
  • ポッドの源(例えばGitHub)が下がったとしても、ポッドアーティファクト(コード/図書館)は常に利用可能です。
  • PODアーティファクトは、レポをクローニングした後の元のインストールと同じであることが保証されています。

    ポッドディレクトリを無視することの利点

    • ソース管理レポは小さくなり、スペースが少なくなります。

    • すべてのポッドのソース(例えばGitHub)が利用可能である限り、CocoApodsは一般的に同じインストールを再現することができます。 (技術的には、PODのインストールを実行することができないという保証はありません。 でコミットSHAを使用していない場合は、同一のアーティファクトを再作成します。 ポドファイル。 Podfileでzipファイルを使用する場合、これは特に当てはまります。)

    • 異なるPODのブランチのマージなど、ソース管理操作を実行するときに対処する競合はありません。 バージョン

      PODSディレクトリ、Podfileをチェックインするかどうか podfile.lockは常にバージョン管理下に保たれるべきです。

私はすべてをチェックします。(Pods/およびPodfile.lock

リポジトリを複製することができて、すべてがアプリを使用したときにすべてが働くようになることを知っています。

宝石の異なるバージョンやポッドのリポジトリの履歴を書換することができるという異なる結果を持つリスクよりもむしろ物事が望んでいます。

私は他の場所で利用可能な良いコピーを持っていると仮定して、ライブラリをチェックインしない開発者のキャンプにいます。したがって、私の.Gitignoreでは、Cocoapodsに固有の次の行が含まれています:

Pods/
#Podfile.lock  # changed my mind on Podfile.lock
.

それから私たちにはライブラリのコピーが安全な場所にあることを確認してください。 (誤って)プロジェクトのコードリポジトリを使用するのではなく、依存関係を保存する(まとめられています)私はこれを行う最善の方法はビルドをアーカイブすることです。ビルドにCIサーバを使用する場合(Jenkinsなど)あなたにとって重要なビルドを永久にアーカイブすることができます。あなたがあなたの地元のXcodeにあなたのすべての生産ビルドを行うならば、あなたが維持する必要があるビルドのためにあなたのプロジェクトのアーカイブを取る習慣を作りなさい。何かのようなもの: 1.製品 - >アーカイブ

  1. Distribute ...エンタープライズまたはアドホック展開用にIOS App Store / Saveに送信/

  2. Finder のプロジェクトフォルダを表示します。

  3. 右クリックして「wheplesproject」

    これは、プロジェクト全体のイメージと、アプリの構築とバイナリディストリビューション(Sparkle、TestFlightなどの独自のSDKなど)を含む、プロジェクト全体とワークスペースの設定を提供します。 Cocoapodsを使用してください。

    アップデート:私はこれを私の心を変更しました。これでPodfile.lockをソース管理にコミットします。しかし、私はまだポッド自体がビルドアーティファクトであり、あなたのCIサーバーや上記の説明のようなアーカイブプロセスなどの別の方法を通して、ソース管理の外で管理されるべきであると考えています。

PodsディレクトリとPodfileと一緒にPodfile.lockディレクトリをコミットして、私のチーム内の誰かがいつでもソースをチェックアウトできるようにするために、何も心配する必要がなく、それを機能させる必要はありません。

これは、どのポッドの1つの内部にバグを修正したか、必要な行動に従っていくつかの動作を変更したシナリオにも役立ちますが、これらの変更はコミットされない場合は他のマシンでは利用できません。

および不要なディレクトリを無視するため:

xcuserdata/
.

私は言わなければならない、私はコミットしているポッドをリポジトリにコミットするファンです。すでに言及されているリンクに続いて、あなたがPodを許可するためのXcodeプロジェクトを起動するための良い.gitignoreファイルを与えるでしょう、しかしあなたがあなたが望むならば、あなたがそれほど彼らを簡単に除外するためにあなたのためにあなたのXcodeプロジェクトを起動するでしょう: https://github/github/gitignore/blob/master/Objective-c.gitignore

リポジトリにポッドを追加するファンであることのための私の推論は、誰もが拾っているように思われないように見えない1つの基本的な理由で、私たちのプロジェクトが非常に依存している図書館が突然ウェブから削除されたのか?

最後にあなたが取るアプローチはあなた次第です。

これはCocoApodsチームがそれについて考えているものです:

あなたのポッドフォルダをチェックインするかどうかはあなた次第です、 ワークフローはプロジェクトごとに異なります。私たちはあなたが保持することをお勧めします ソース管理下のPODSディレクトリ、そしてそれを追加しないでください。 .gitignore。しかし、最終的にこの決定はあなた次第です。

個人的には、 node_modules node_modules Bower_Components を使用しています。 bower を使用していたら。これはそこにあるほとんどすべての依存担当者に適用され、 Gitサブモジュールの背後にある哲学です

しかし、特定の依存関係の art について本当に確信があるかもしれないことがある、そのようにあなたがプロジェクト内の依存関係を持っていることを確認します。もちろんあなたがそれをするのであれば適用されるいくつかの欠点があるが、懸念はCocoApodsに適用されるだけでなく、それらはそこに依存関係マネージャに適用されます。

以下の Pros / end>リストは、CocoApodsチームによって行われた pros / end>リストと、前述の引用の全文です。

CocoApodsチーム:PODSディレクトリをソース管理にチェックする必要がありますか?

個人的には依存します。

PODがリポジトリの一部であるべきか(ソースコントロールの下)、無視されるべきではありません
  • ソースは同一です
  • のように(Cocoapodがなくても) のように直ちにそれを構築することができます。
  • ポッドが削除されていても、そのコピーを持っています(はい、これは起こりやすくなりました。さえ造る)。
  • pods.xcodeproj設定もソース管理の一部です。これはe.gを意味する。 Projectがswift 4に入っているが、PODの中にはPODがまだ更新されていないため、これらの設定は保存されます。そうでなければ、レポを複製したものはエラーになります。
  • 必ずプロジェクトからPODを削除してswift 3.2を実行できますが、反対はできません。
  • ココポッドの著者でさえそれを勧めます。

    いくつかの短所:より大きなリポジトリ、混乱を招くような、(主にチームメンバーのための)、潜在的に競合する。

私にとって、最大の懸念は将来のソースを推測しています。あなたのプロジェクトがしばらくの間最後に行く予定の場合、またはポッドの1つのソースが停止しているか、アーカイブから新鮮なものを構築しようとしている場合は、完全に運が不吉です。

これは、周期的な完全なソースのアーカイバルで軽減できます。

ポッドのチェックイン。

これはテネチーのソフトウェア開発になるべきだと思います

  • すべてのビルドは再現可能なものでなければなりません
  • 建造物を確保する唯一の方法 再現可能なすべての依存関係を管理することです。全体のチェック したがって、依存関係は必須です。
  • スクラッチから始まる新しい開発者はあなたのプロジェクトをチェックアウトして仕事を始めることができなければならない。

    なぜ?

    ココポッドまたは他の外部ライブラリーが変わるかもしれないそれは物事を破るかもしれません。またはそれらは移動することも、名前を変更するか、または完全に削除されるかもしれません。あなたのために物事を保存するためにインターネットに頼ることはできません。あなたのラップトップが亡くなったかもしれません、そして、固定される必要がある生産にとって重要なバグがあります。主な開発者はバスにぶつかるかもしれません、そして彼の交換は急いで起動しなければなりません。そして私は最後のものが理論的な例であることを願っていますが、それは実際に私が持っていたスタートアップで起こりました。 RIP。

    今、現実的には、すべての依存関係をチェックすることはできません。ビルドを作成するために使用したマシンのイメージをチェックインすることはできません。コンパイラの正確なバージョンをチェックインすることはできません。等々。現実的な制限があります。しかし、あなたができることをすべてチェックインしてください。そしてそれを望んでいません。

    最終的な単語:ポッドは成果物を構築しません。ビルドアーティファクトはあなたのビルドから生成されるものです。ビルドはポッドを使用し、それらを生成しません。なぜこれが議論されなければならないのかわからない。

理論的には、PODSディレクトリをチェックインする必要があります。実際には、常に働くつもりはありません。多くのポッドがGitHubファイルのサイズ制限をよく超えているので、githubを使用している場合は、PODSディレクトリにチェックを発行します。

の長所 ない チェックイン Pods/ バージョン管理へ (主観的な重要性の順に):

  1. 多くの コミットをマージしたり、コードの差分をレビューしたりするのが簡単になります。マージはコード ベースの問題の一般的な原因であるため、これにより、関連する部分のみに集中できます。
  2. 無作為の寄稿者が依存関係を自分で編集して変更をチェックインすることは不可能であり、決して行うべきではありません (また、差分が巨大な場合は特定するのが困難になります)。依存関係を編集することは非常に悪い習慣です。 pod install 変更が妨げられる可能性があります。
  3. 間の不一致 Podfile そしてその Pods/ ディレクトリはチームメイトの間でより早く見つけられます。チェックインすると Pods/ たとえば、次のバージョンを更新します。 Podfile, 、しかし実行するのを忘れた pod install または変更をチェックインします Pods/, 、不一致の原因に気づくのは非常に難しくなります。もし Pods/ チェックインされていないため、常に実行する必要があります pod install ともかく。
  4. リポジトリのサイズが小さくなります。バイト フットプリントが小さいのは良いことですが、それは全体的な計画ではあまり重要ではありません。さらに重要なことには:リポジトリ内にさらに多くのものがあると、認知負荷も増加します。見てはいけないものをリポジトリに含める理由はありません。何かがどのように機能するかを知るには、コード (実装) ではなく、ドキュメント (抽象化) を参照してください。
  5. 誰かがどれだけ貢献したかを識別しやすくなります (貢献したコード行には、その人が書いていない依存関係が含まれないため)
  6. JAR ファイル、 .venv/ (仮想環境)、および node_modules/ バージョン管理に含まれることはありません。もし私たちがその質問に関して完全に不可知論的だったとしたら、 ない チェックイン Pods 前例に基づくとデフォルトになります。

の短所 ない チェックインする Pods/

  1. 走らなければなりません pod install ブランチを切り替えるとき、またはコミットを元に戻すとき。
  2. リポジトリを複製するだけではプロジェクトを実行できません。ポッドツールをインストールしてから実行する必要があります pod install.
  3. 実行するにはインターネット接続が必要です pod install, 、ポッドのソースが利用可能である必要があります。
  4. 依存関係の所有者がパッケージを削除すると、問題が発生します。

要約すれば、 含まないPods ディレクトリは、さらなる悪い習慣に対するガードレールです。 含むPods ディレクトリを使用すると、プロジェクトの実行が簡単になります。私は後者よりも前者の方が好きです。プロジェクトに参加するすべての新しい人に「何をするか」について報告する必要はありません。 ない そもそも特定の間違いを犯す可能性がない場合。また、個別のバージョン管理を行うというアイデアも気に入っています。 Pods 短所を軽減します。

は、これを実際に構成する良い方法のように見えます。

  • あなたのプロジェクトレポにポッドを持つ、いくつかの開発者と協力するときは、人々によって変更された実際の作品を見ることがほとんど不可能なプル要求で非常に大きな差分を引き起こす可能性があります(数百から数千のファイルを変更しましたライブラリの場合は、実際のプロジェクトではほんの数が変わりません)。

  • 私はgitに何も犯さないという問題があります。図書館を所有している人がいつでもそれを取り下げることができ、あなたが本質的にゾルをゾルにすることができるので、これも解決します。

あなたのPodsフォルダをチェックインするかどうかはあなた次第です。ワークフローはプロジェクトからプロジェクトまで異なります。 PODSディレクトリをソースコントロールに保存することをお勧めします。それを.gitignoreに追加しないでください。しかし最終的にこの決定はあなた次第です:

PODSディレクトリのチェックインの利点

  1. レポのクローニング後、CocoApodがマシンにインストールされていなくても、プロジェクトは直ちにビルドして実行できます。 PODのインストールを実行する必要はありません。インターネット接続は必要ありません。
  2. ポッドの源(例えばGitHub)が下がったとしても、ポッドアーティファクト(コード/図書館)は常に利用可能です。
  3. PODアーティファクトは、レポをクローニングした後の元のインストールと同じであることが保証されています。

    PODSディレクトリを無視した利点

    1. ソース管理レポは小さくなり、スペースが少なくなります。 すべてのポッドのソース(github)が利用可能である限り、CocoApodsは一般的に同じインストールを再作成することができます。(PodfileでコミットSHAを使用していない場合は、PODインストールの実行が同一のアーティファクトを取り出して再作成することはできません。 。これは、Podfileでzipファイルを使用する場合に特に当てはまります。)
    2. さまざまなPODバージョンのブランチのマージなど、ソース制御操作を実行するときに対応する競合はありません。 PODSディレクトリをチェックインするかどうかにかかわらず、PODFILEとPODFILE.LOCKは常にバージョン管理下に保存されます。

tl; DR:Pods/フォルダを追跡すると、プロジェクトはより簡単です から拾います。それを追跡しないときは、いつ向上しやすい あなたはチームで働いています。

CocoApods組織はPods/ディレクトリを追跡するよう奨励しますが、これらの長所と短所に基づいて行うかどうかを決定するのはDEVの次第です。 http://guides.cocoapods.org/using/using-cocoapods .html#shood-i-check-the-pods-directory-in-source-control

個人的には、私は通常、私がしばらく取り組んでいないプロジェクトのためのPods/フォルダを追跡します。そのようにして、開発者はすぐにそれから拾い上げて、適切なバージョンのCocoApodsを使用して作業を続けることができます。

「コミット履歴はクリーナーになると、コードのマージや、Pods/フォルダを追跡していない場合は他の人のコードを確認します。 Iインストールのときに、私がインストールしたときにCocoApodライブラリのバージョンを設定してください。

また、Pods/ディレクトリが追跡されているときに、すべてのDEVが同じバージョンのCocoApodを使用して、PODを追加/削除するためにpod installを実行するたびに数十のファイルを変更するのを防ぐ必要があります。

下線Pods/フォルダを追跡すると、プロジェクトはからピックアップが簡単です。それを追跡しないときは、改善が簡単です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top