web-dev-qa-db-ja.com

Cocoa Touchフレームワークを作成するときにCocoaPodsを使用できますか?

Alamofireに依存する新しいCocoa Touch Framework(MyFramework.framework)を作成しています。このフレームワークはSwiftで作成されます。テストとして、新しいCocoa Touch Frameworkプロジェクトを開始しました。

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

次に、端末で次を実行しました。

pod init

このプロジェクトディレクトリの下。新しく作成したPodfileに、次を追加しました。

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'

もう一度、ターミナルで次のことを実行しました。

pod install

コーディングを始めました。

シングルビュープロジェクトで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

Cocoa Touch Frameworkプロジェクトは本質的に動的であるため、すべての依存関係が含まれると考えました。

誰がこれが起こっているのか、どうすれば修正できるのか教えてもらえますか?これはCocoaPodsの問題ですか、それとも何か不足していますか?

私はStack Overflowの初心者なので、さらに情報が必要な場合はお知らせください。

ありがとう!

44
bneu

残念ながら、CocoaPodsはCocoa Touch Frameworkターゲットでの使用をサポートしていません。 GitHubで問題を掘り下げながら、これに関するいくつかの参照を見つけました。

フレームワークターゲットへのPodの統合は実際にはサポートしていません...
- neonich 2015年11月4日

そして

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


これまでのところ、この問題に対処する2つの方法を見つけました。

正しい方法は、フレームワーク用の新しいポッド仕様を作成し、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
26
Dallas Edwards

以下のように、フレームワークのpodspecにAlamofireへの依存関係を追加してみてください

Pod::Spec.new do |s|

# Other setup 

# Dependencies
s.dependency "Alamofire"
# Other dependencies if any
1
humblePilgrim