2016-03-10 8 views
20

私はAlamofireに依存する新しいCocoa Touch Framework(MyFramework.framework)を作成しています。このフレームワークはSwiftに書かれています。テストとして、私は新しいココアタッチFrameworkプロジェクトを開始しました:Cocoa Touch Frameworkを作成するときにCocoaPodを使用できますか?

File > New > Project > Framework & Library > Cocoa Touch Framework 

その後、私が行っターミナルで:

pod init 

をこのプロジェクトディレクトリの下。新しく作成されたPodfileで、私は次のように追加しました:

pod install 

を離れコーディングをしました:

source 'https://github.com/CocoaPods/Specs.git' 
# Uncomment this line to define a global platform for your project 
platform :ios, '8.0' 
# Uncomment this line if you're using Swift 
use_frameworks! 

pod 'Alamofire', '~> 3.0' 

はもう一度、ターミナルで私が行いました。

シングルビュープロジェクトでMyFramework.framework製品を使用するまでは、すべてうまく見えました。私は次の問題を取得するプロジェクトを実行しようとすると:

dyld: Library not loaded: @rpath/Alamofire.framework/Alamofire 
Referenced from: /Users/me/Library/Developer/CoreSimulator/Devices/87DA70B6-49BF-441E-BD81-F4A80B0792CF/data/Containers/Bundle/Application/2E414EA8-7E54-4D71-9295-566D4FAAADE2/test.app/Frameworks/MyFramework.framework/MyFramework 
Reason: image not found 

私はココアタッチフレームワークプロジェクトは本質的に動的なと思っていたので、すべての依存関係が含まれます。

誰にこのようなことが起こっているのか、どのように修正できるのか誰にでも教えてください。 これはCocoaPodsの問題ですか、それとも何か不足していますか?

私はあなたが私からのより多くの情報が必要かどうか私にお知らせください。

ありがとうございます!

答えて

16

残念ながら、CocoaPodsはCocoa Touch Frameworkターゲットでの使用をサポートしていません。 11月4日にneonichu、2015

から
...私たちは本当にフレームワークのターゲットにポッドを統合サポートしていません

:私はGitHubの上での問題点を掘りながらこれにはいくつかの参照を見つけました

...これを「うまくいく」ためには、CPはXcodeプロジェクトの依存関係を再帰的に分析する必要があります。また、別のコンテキストではビルド製品を使用しないことを保証しますt。
- 2015年7月7日


neonichuこれまでのところ、私は問題に対処するための二つの方法見つけた:

正しい方法は、あなたのフレームワークのための新しいポッド仕様を作成することですそれをCocoaPods経由でメインプロジェクトに持ち込みます。これは、CococaPodsが依存関係グラフで持つすべての問題を解決し、CocoaPods開発者から推奨されるソリューションです。

簡単な方法は、フレームワークのポッドをメインプロジェクトに含めることです。これはうまくいくようですが、率直に言って私は理由を知らないのです。これは私のテストプロジェクトからPodfileです:

platform :ios, '9.0' 
use_frameworks! 

def myfirstframework_pods 
    pod 'Alamofire', '~> 3.0' 
end 

target 'MyApp' do 
    pod 'SwiftKeychainWrapper', '~>1.0' 
    myfirstframework_pods 
end 

target 'MyFirstFramework' do 
    myfirstframework_pods 
end 
+0

これは、あなたが作成しているフレームワークが、依存関係がアプリケーションに埋め込まれていて(リンクされているだけで、アプリケーションによって埋め込まれている)長くて満足しているからです。 Appleはフレームワークの導入について非常に戸惑うようだが、追加が必要な唯一の場所はアプリだ。これは、さまざまなバージョンのフレームワークを追加するさまざまなフレームワークが混乱を招くことを避けるためです。私は他の極端な画像を与えるために "java classpath"とだけ言及する必要があります。フレームワークでフレームワークを使用することは非常に困難ですが、いわゆる傘のヘッダーを使用して行うことができます。 –

+1

"簡単な方法"はFirebaseのような特定のライブラリの場合、[[!] 'Pods-MyApp'ターゲットに競合する名前のフレームワーク、googletoolboxformacがあります。 –

+0

非常に便利な投稿です! – VaporwareWolf

-1

ちょうどあなたのアプリターゲットの「全般」タブでセクション「埋め込まれたバイナリ」にAlamofire.frameworkを追加します。

+2

Cocoa Touch Frameworkターゲットの「埋め込みバイナリ」セクションはなく、「リンクされたフレームワークとライブラリ」のみです。 – xZenon

+0

また、Cocoa Touch Frameworkのオプションもあります – Donal

関連する問題