2016-11-21 4 views
7

私は別のCocoapodに依存する、例えばMyPodのように、ココアのポッドを作成しています。たとえばRxSwiftです。CocoaPodの開発中にCocoaPodの依存関係を使用する

だから私はMyPod.podspecでこれを持っている:

s.dependency "RxSwift", "~> 3.0.1" 

しかし、MyPodを開発しながら、どのように私は実際に依存関係を使用することができますか?

import RxSwift 
// ^
// No such module 'RxSwift' 

public class MyClass { //... 

ステップがありませんか、いくつかの共通の規約がありますか? Moyaのような他のプロジェクトでは、開発中に依存関係を構築するためにCarthageを使用しているようです。それをやるべきか、あるいはPodfileを追加するべきでしょうか?

これは、独自のPodfileを持つRepo内のExample Appの場合は問題ではないことがわかります。しかし、私は、サンプルアプリケーションの外でトップレベルに配置されたテストをしたいと思います。また、サンプルアプリケーションの外でも、実際にそのフレームワークを作成することができます。

答えて

1

私はCarthageを使用してフレームワークの依存関係を構築しました。私はCocoaPodを使ってそれをやり遂げることができたと思う。しかし、それは私がワークスペースの使用を開始することを要求していましたが、できるだけ変更を最小限に抑えるようにしたいとは思いませんでした。

また、カルタゴと、それはカルタゴがすでにだとCartfile/Cartfile.resolved既存を使用するので、私は、Podfile/Podfile.lock新しいを追加する必要はありませんでした。 Carthageは別のプロジェクトでフレームワークを使用するときにフレームワークを独自に構築するときに、Cartfile.resolvedを使用するからです。フレームワークに別のポッドをインストールするには、別のプロジェクトでフレームワークを使用するときに*.podspecが使用されますが、でもPodfile.lockを追加した場合はPodfile)が必要です。

6

私はCocoaPodsまたはCarthageを使用するかどうかについて話すことはできません。両方とも彼らの強みと弱点があります。さらに、多くの要因を考慮して決定する必要がありますが、そのうちのいくつかは制御できないかもしれません(CocoaPodを使用すると主張するクライアントのように!)ので、その部分を省略します。

しかし、あなたの質問には、実際に開発しているポッドは別のポッドに依存する可能性があります。あなたはすでに正しいs.dependency行を持っています。それは必要です。

しかし、あなたが依存するポッドを参照できなかった理由は、あなたが 'テスター/サンプル'プロジェクトにPodfileを持っていなかったか、またはあなたが追加した後にpod installをしなかったことが原因だと思われます。あなたのPodspecの依存関係。

これは、Podspecが実際にXcodeによって処理されていないため、依存関係を実際にダウンロード(またはコンパイル)していないことが原因であると考えられます。

代わりに、(もちろんコマンドラインで)podをインストールすると、開発ポッド、依存するポッド(Podspec)、およびPodfileの他のポッドでCodoaプロジェクトが作成されます。この理論をテストする

は、I:「を作成ポッドlibに」CocoaPod自身を使用して、新しいポッド((https://guides.cocoapods.org/making/using-pod-lib-create.html)を作成し

  • はCocoaPodが私のために作成したワークスペースを開設し、にPodspecを編集しました依存関係s.dependency 'RxSwift', '~> 3.0.1'を追加します。
  • は(Podfileの依存関係とPodspec依存性の違いを実証する。)私の例アプリケーションのPodfileで別のポッドを追加しました
  • 例アプリケーションのfoldeでpod installを行いましたr。
  • 私のPodのクラスを編集して何か便利なことを行い、import RxSwift行を追加しました。
  • 私のサンプルApp(もちろん「Hello World」)にラベルを追加しました。あなたがチェックすることができ

から

  • ラベルのためのすべての自動レイアウト制約を行うにはPureLayoutを使用し(開発ポッドと同様に、参照ポッドPureLayoutをし、例のプロジェクトは、両方のポッドへのアクセス権を持っているかを証明すること。)私は公共のGitHub上で作成したデモアウト:正直なところ https://github.com/ericwastaken/CocoaPod-Dependency-Demo

    、私はpod lib createを使用していくつかのポッドを作成しましたし、それは確かにいつも私のために働いた素敵な構造を作成しません。このため、常にポッドのスケルトンを作成するために使用することをお勧めします。

    Xcode 8のコメント:pod lib createはまだSwift 1.xプロジェクトを作成しているようです。したがって、このツールを使用した直後にXcodeを開くと、新しいバージョンのSwiftに「変換」するように求められます。私はSwift 2.xまたは3.xの構文(あなたが選ぶ)になるように、その変換が直ちに行われるようにします(初めて)。

  • +0

    徹底的な答えをありがとう。しかし、私はあなたが私の質問の最後の部分を忘れてしまったと思います。私は、ExampleAppを通して開発する必要はなく(あるいは全くありません)、フレームワークのトップレベルでテストをしたいと思っています自体。私は単純にフレームワークの使用方法を示すために、私のExampleApp(もしあれば)が存在することを望みます。テストのような本質的なものを含んではいけません。それは心配することなく取り外すことができるはずです。 – solidcell

    +0

    私が作成したレポを複製することをお勧めします。 Example Appは何のためにも必要ではなく、実際には削除することができます。あなたはあなたの状態のように、すべての開発を「開発ポッド」で行います。さらに、実際にはポッドに対してユニットテストを書くことができます。単体テストターゲットは単純に依存関係としてポッドを持つことができ、TESTABLEを使用してプライベートメソッドをテストに公開することができます。自由にそれを複製し、例を削除してみてください。 Podfileは必要ですが、それ自体でも構いません。 – ericWasTaken

    +0

    そうです、結局のところ、メインフレームは、フレームワークがそれ自身を構築できるようにするために、まだ余分な 'Podfile'が必要であるということです。あなたのレポについては、私はそれを構築しようとしましたが、Xcodeの問題が大量に発生しています。ファイルが見つかりませんでした(赤色)。ビルドしようとすると '../ build'にビルドフォルダが追加されました。もう一度閉じて開くと、各スキームのコピーされたスキームが作成されます。それぞれのスキルは「___ 2」です。しかし、私は既にあなたと同じソリューション( 'Podfile')になっているので、プロジェクトの設定の違いは除いても問題ありません。 – solidcell

    関連する問題