1

次のプライベート Cocoapod の配置を設定しようとしています。

PodAに依存PodBCommonCryptoます。

CommonCryptoはiOS に同梱されていますが、ヘッダー モジュールdylibはありません。Swift内で、次の内容PodBのカスタムを作成しました:module.modulemap

module CommonCrypto [system] {
    header "/usr/include/CommonCrypto/CommonCrypto.h"
}

PodBpod spec lint PodB.podspec次の行を追加すると、lint テスト ( ) に合格します。

# Ensure module isn't deleted by CocoaPods
s.preserve_paths = 'path_to/PodB/CommonCrypto'
s.pod_target_xcconfig = { 'HEADER_SEARCH_PATHS' => '$(PODS_ROOT)/path_to/CommonCrypto' }

の中でPodA、私は に依存しPodBていs.dependency = 'PodB'ます。でリンティングPodAすると、次のファイルをpod spec lint --sources=myrepo PodA.podspecコンパイルするとエラーが発生します。Swiftimport PodB

missing required module 'CommonCrypto'

これを修正するにはどうすればよいですか?CommonCryptoがプライベートかパブリックかは私には関係ありませんPodB

に追加export *してみましmodule.modulemapたが、違いはありませんでした。

4

4 に答える 4

1

私はこの問題を(少し)醜い回避策で解決しました。インクルード パスを親プロジェクトにエクスポートしました。

インクルード パスは複数の値を持つため、単一の設定ではなくリストであるため、Cocoapods は、親プロジェクト ( PodA) が設定するものと、サブプロジェクト ( PodB) が必要とするものをマージできます。

以前にこのソリューションを試したことがありますが、HEADER_SEARCH_PATHS代わりにを使用していたため失敗しSWIFT_INCLUDE_PATHSました。固定 podspec の関連部分は次のようになります。

# Ensure module isn't deleted by CocoaPods
s.preserve_paths = 'path_to/PodB/CommonCrypto'
s.pod_target_xcconfig = { 'SWIFT_INCLUDE_PATHS' => '$(PODS_ROOT)/path_to/CommonCrypto' }
s.user_target_xcconfig = { 'SWIFT_INCLUDE_PATHS' => '$(PODS_ROOT)/path_to/CommonCrypto' }

user_target_xcconfigPodBにビルド設定を挿入できるようにするものPodAです。これは一般的に素晴らしいアイデアではなく、あらゆる種類のものを台無しにするために使用される可能性があるため、より良い解決策を歓迎しますが、親ポッドをモジュールに向ける特定のケースでは、それは許容できると思います.

そうは言っても、両方と必要な場所の両方に依存している場合、このソリューションは失敗すると思います...PodAPodBPodCBCCommonCrypto

于 2015-10-06T17:08:06.193 に答える