0

Swift 依存関係を必要とする最初の CocoaPod プロジェクト (ObjC) を作成しています。プロジェクトをリントしようとすると、次のエラーが表示されます。

Swift で作成された Pod は、フレームワークとしてのみ統合できます。use_frameworks!Podfile またはターゲットに追加して、使用をオプトインします。

通常の xcode プロジェクトに CocoaPod を含めるときにこれを行う方法は理解していますが、プロジェクトが CocoaPod の場合にこの問題を解決するにはどうすればよいですか? 「use_frameworks!」を追加してみました podspec ファイルでの宣言ですが、それは正しくないようです。

これが私のpodspecファイルです:

Pod::Spec.new do |s|

  s.name             = "my-custom-pod"
  s.version          = "0.0.1"
  s.summary          = "totally awesome stuff"

  s.description      = <<-DESC
                         more details about the totally awesome stuff, if only it worked :(
                       DESC

  s.homepage         = "https://awesomestuff.com"
  # s.screenshots     = "www.example.com/screenshots_1", "www.example.com/screenshots_2"
  s.license          = 'MIT'
  s.author           = { "Me" => "me@awesomestuff.com" }
  s.source           = { :git => "https://awesome.com/awesome/my-custom-pod.git", :tag => s.version.to_s }
  s.social_media_url = 'https://twitter.com/awesomestuff'

  s.platform     = :ios, '8.0'
  s.requires_arc = true

  s.source_files = 'Pod/Classes/**/*'
  s.resource_bundles = {
    'my-custom-pod' => ['Pod/Assets/*.png']
  }

  # s.public_header_files = 'Pod/Classes/**/*.h'
  s.frameworks = 'CoreLocation', 'MapKit'
  s.dependency 'SSKeychain', '~> 1.2.3'
  s.dependency 'FMDB', '~> 2.5'
  s.dependency 'GoogleMaps', '~> 1.10.4'
  s.dependency 'Socket.IO-Client-Swift', '~> 4.0.4'
end

ここでは、socket io クライアントが問題です。ソケット io フレームワークを他の ObjC プロジェクトに問題なくインポートできますが、カスタム ココア ポッドにインポートしようとしたことはありません。

どんな助けでも大歓迎です。前もって感謝します。

4

3 に答える 3

0

GoogleMaps ポッドに対応するために --use-libraries lint コマンドを含めようとしていたため、lint が失敗していましたが、これは Socket.IO のような迅速なポッドを含めようとすると互換性がありません。GoogleMaps ポッドにはポッド内にそれ自体の静的バージョンが含まれているため、単純にポッド プロジェクトに含めることはできません。そうしないと、lint エラーが発生します。The 'Pods' target has transitive dependencies that include static binaries

そのため、GoogleMaps.framework を取得して、ポッドに静的に含める必要がありました (ポッドを依存関係としてリストするのではなく)。理想的ではありませんが、迅速なポッドと GoogleMaps ポッドの両方を含めるための別の実用的なソリューションを見つけることができません。

私のpodspecファイルからの関連ビットは次のとおりです。

s.libraries = 'c++', 'icucore', 'z'

s.dependency 'SSKeychain', '~> 1.2.3'
s.dependency 'FMDB', '~> 2.5'
s.dependency 'Socket.IO-Client-Swift', '~> 5.3.3'

s.frameworks = 'MapKit', 'GoogleMaps', 'AVFoundation', 'CoreData','CoreLocation', 'CoreText', 'GLKit', 'ImageIO', 'OpenGLES', 'QuartzCore', 'SystemConfiguration', 'Accelerate'
s.resource_bundles = { 'GoogleMaps' => ['Pod/Dependencies/GoogleMaps.framework/Resources/*.bundle'] }
s.vendored_frameworks = 'Pod/Dependencies/GoogleMaps.framework'
s.xcconfig = { 'LD_RUNPATH_SEARCH_PATHS' => 'Pod/Dependencies' }

この podspec で動作する lint コマンドは次のとおりです。

pod lib lint my-custom-pod.podspec --private --allow-warnings

私が今見ている唯一の問題は、ポッドをプロジェクトにインポートするときです。実行前に次の警告が表示されます。

自動リンク提供の 'path/to/GoogleMaps.framework/GoogleMaps'、path/to/Pod/Dependencies/GoogleMaps.framework/GoogleMaps のフレームワーク リンカー オプションは dylib ではありません

または、コンパイル時のこれ (コンソールに表示):

クラス GMSBillingPointRecorder は、path/to/my/application/Frameworks/my-custom-pod.framework/my-custom-pod と path/to/my/app/myapp.app/myapp の両方に実装されています。2つのうちの1つが使用されます。どれが未定義です。

GoogleMaps フレームワークのすべてのクラスに対して、このような個別のコンソール ログ警告がある場合。これらの警告を取り除くことはできないようです。リンクすると警告が表示され、リンクしないと警告が表示されます。

于 2016-02-12T17:02:47.917 に答える