web-dev-qa-db-ja.com

フレームワークをソースコードにインポートするCocoapods

IOS用の私のcocoapodには、基本的に次のアイテムがあります。

  1. オープンソースクラス(.mおよび.hファイル)
  2. MyFramework.framework(.frameworkディレクトリ、ヘッダーファイル、およびリソースの.bundle)

オープンソースクラスの1つはimport <MyFramework.MyFramework.h>を呼び出すため、実装でMyFrameworkのコンポーネントを使用できます。しかし、このため、podspecをspec lintテスト(pod spec lint MyCocoapod.podspec)に合格させるのに問題があります。スペックリント検証を実行すると、次のように表示されます。

ERROR | [iOS] [xcodebuild] .../MyFile.h:54:9: fatal error: 'MyFramework/MyFramework.h' file not found

調査中に、podspecのsource_filesセクションs.source_files = 'MyFiles.{h,m}'でそのオープンソースクラスを削除すると、podspecがspeclint検証に合格することに気付きました。スペックリントの検証中にクラスがカスタムフレームワークをインポートできない理由はありますか?

Podspecの関連コードは次のようになります。

s.preserve_paths      = 'myframework/MyFramework.framework'
s.frameworks          = 'Foundation', 'MyFramework'
s.xcconfig            = { 'FRAMEWORK_SEARCH_PATHS' => '$(SRCROOT)/myframework/' }
s.public_header_files = 'MyFramework.framework/Headers/*.h', 'SourceCode/*.h'
s.source_files        = 'SourceCode/*.{h,m}'  # Crashes here - Source_file imports MyFramework.h. If I take this out, it passes spec lint validation
20
johngraham

[〜#〜] edit [〜#〜]このプロセスはすべて vendored_frameworks オプション。これは、パス、フレームワーク検索パスの保存、およびプロジェクトへのリンクを処理します。

26
Keith Smiley

使用できるフレームワークを含めるには:

s.vendored_frameworks = 'path/to/SomeFramework.framework'

バンドルファイルを含めるには、次のようにします。

s.resources ='path/to/SomeBundle.bundle'

6
BigCheesy