web-dev-qa-db-ja.com

cocoapodsを使用してインポートされたライブラリを変更する

私はココアポッドを使用したプロジェクトに取り組んでいますが、突然、ライブラリの1つで変更を行っていることに気付きました。これらの変更がpod updateによって上書きされないようにするにはどうすればよいですか? githubプロジェクトを更新せずにポッドに変更を導入する方法はありますか?

更新:プロジェクトのフォーク

プロジェクトをフォークして、新しいプロジェクトを指す新しいスペックファイルを作成しようとしました。基本的なものをインストールすることができましたが、何らかの理由で、インストールされているもののポッドプロジェクト内で参照できない依存関係がいくつかあります。現在、podsfileにこれがあります:

'WhirlyGlobe', :podspec => 'https://raw.github.com/tiagoalmeida/WhirlyGlobe/master/WhirlyGlobe.podspec'

ライブラリのフォークは https://github.com/tiagoalmeida/WhirlyGlobe にあります

UPDATE2:ヘッダーがありません

BoostとEigen(WhrilyGlobeから使用)のヘッダー(ポッド/ヘッダー)が生成されていないことがわかりました。

UPDATE3:ヘッダーについて何かをしようとしています

このスレッドにあります の構成のいくつかを調べてみましたが、 [〜#〜] faq [〜#〜] の解決策を試しましたが、私の問題は違うと信じています。ヘッダーは実際にはありません。

UPDATE4:ココアポッドバージョンを攻撃しています

Cocoapodsをアンインストールし、バージョン0.20.2(フォークを使用する前に機能していた)をインストールしましたが、すべて同じです:/。

28
Tiago Almeida

@pgbとwattsonは私に良い情報を提供してくれましたが、最終的に問題は物事の組み合わせにありました。

理由はわかりませんが、cocoapods0.22ではヘッダーの処理が異なるようです。 cocoapodsをアンインストールし、バージョン0.20.2をインストールしました。

gem queryを使用してココアポッドのバージョンを確認し、gem uninstall cocoapodsを使用してココアポッドを削除し、gem install cocoapods --version 0.20.2を使用してココアポッドをインストールしました。

私は次のようにpodfileを使用しました:

'WhirlyGlobe', :podspec => 'https://raw.github.com/tiagoalmeida/WhirlyGlobe/master/WhirlyGlobe.podspec'

Podspecが私の新しいpodspecを指しているところ。元のポッドファイルから:tagを削除する必要があるため(そうでない場合は常に同じ場所を指す)、このように作成しました。これにより、ファイルをより細かく制御できます。

Podspecで、ソースを変更しました。

s.source = { :git => "https://github.com/tiagoalmeida/WhirlyGlobe.git"} 

フォークを指してタグを外しました。

私を助けようとしてくれた@pgbと@wattsonに感謝します。両方とも有用だったので、両方に賛成した。

10
Tiago Almeida

リポジトリをフォークしてから、フォークしたリポジトリをポッドとして追加できるので、リポジトリをhttps://github.com/tiago/ThePodProject.gitにフォークしたとすると、ポッドを次のように設定します。

pod 'ThePodProject', :git => 'https://github.com/tiago/ThePodProject.git'

詳細については、 ここ を参照してください(「ライブラリリポジトリのルートにあるpodspecから」の下)

5
wattson12

フォークされたリポジトリで動作するようになります。

次のPodfileで試してみました。

pod 'WhirlyGlobe', :git => 'https://github.com/tiagoalmeida/WhirlyGlobe'

WhirlyGlobeをダウンロードしましたが、hgが見つからなかったため失敗しました。 Homebrewbrew install Mercurialを使用してインストールした後、pod installを実行するとすべての依存関係をインストールできました。

プロジェクトはコンパイルされますが、機能するかどうかはわかりません。先に進んで試してください。

すべての依存関係(特にshapelib)をダウンロードしてコンパイルするのに非常に長い時間がかかったことに注意してください。

1
pgb

答えに私の数セントを追加したいだけです。同じ問題が発生します。誰かが上で提案したように、私はポッドライブラリのサブクラス化に行きました。 ACEDrawingViewを使用していましたが、読み取り専用のプロパティ画像があります。私はそれをサブクラス化し、このプロパティを読み取り/書き込みにしました。私は個人的に、サブクラスで行く方がこの種の問題に対するよりエレガントで手間のかからない解決策だと感じています。あなたがあなたのメインプロジェクトの側でやりたい巨大な開発がない限り。

0
Alix

Gitのみを使用してカスタム変更を保存する(フォークなし)

簡単な解決策を探している人のために、私はgitstashesを使用してこの問題をうまく解決しました。

前述のように、pod updateは行った変更を上書きします。ただし、gitを使用している場合、私がやりたいのは、ポッドの変更を除くすべての変更をコミットすることです。

ブランチで行った変更がポッドの変更だけになったら、git stash save "Custom Cocoapod changes, apply after every pod update"を実行してそれらの変更を隠しておきます。 「」の間のテキストを変更することで、好きなメッセージを送ることができます。

このコマンドには、作業ディレクトリを前のHEADにリセットするという副作用があるため、これらのスタッシュを再適用する場合は、git stash applyを実行して変更を元に戻し、コミットして保存することができます。

git stash popは使用しないでください。適用すると、スタッシュが削除されます。

さて、将来のある未定の時間に、ポッドを更新し、スタッシュを再度適用するときに、git stash listを実行します。これにより、作成したすべてのスタッシュのリストが返され、最新のインデックスはゼロになります。おそらく次のようなものが表示されます。

stash@{0}: On featureFooBar: foo bar
stash@{1}: On Master: Custom Cocoapod changes, apply after every pod update
...

カスタムカカオポッドの変更stashがstash @ {0}にある場合は、完璧です。もう一度git stash applyを実行すると、作業ディレクトリでそれらの変更を取得できます。それ以外の場合、ポッドが変更するスタッシュ番号を見つけたら、git stash apply stash@{1}を実行してそのスタッシュを適用できます。

同じブランチにクリーンな作業ディレクトリがある場合、スタッシュの適用が最も簡単ですが、それは必須ではありません。 このページ gitstashの適切な説明とそれ以外の使用方法を示します。

同じプロジェクトに複数の人がいる場合にいくつかの問題を予測できるため、これは最も完全な解決策ではありませんが、より複雑な解決策に頼ることなくこれを解決する簡単な方法です。

0
gadu

リポジトリをフォークし、変更を変更し、将来のバグ修正と機能拡張のためにcocoapodsを介してライブラリを維持できる別の方法があります..... enter image description here

私は最近、同じチュートリアルをここに公開しました https://medium.com/@mihirpmehta/how-to-modify-cocoapods-library-within-pods-647d2bf7e1cb

0
Mihir Mehta