このテーマについては、SOですでにいくつか質問があることは知っていますが、回答を受け入れたものはほとんどなく、私とまったく同じ問題を見つけたとは思いません。
Swiftポッドを構築しており、コードでは.framework
ファイルとしてバンドルされているGoogleMaps iOS SDKに依存しています。ただし、プロジェクトはXcodeで正常に構築されます。 libをCocoapodsに公開するのに問題があります。
pod lib lint
コマンドを使用してほぼ検証するPodspec
ファイルを作成できました。ただし、Google-Maps-iOS-SDK
ポッドを依存関係としてPodspec
ファイルに追加したため、次のメッセージが表示されて失敗します。
$ pod lib lint
[!]「ポッド」ターゲットには、静的バイナリを含む一時的な依存関係があります:(/ private/var/folders/n2/qyjfpk6n7zz_mngtwswlmsy00000gn/T/CocoaPods/Lint/Pods/Google-Maps-iOS-SDK/GoogleMaps.framework)
$
これは予想されますか?自分のSwiftベースのポッドにポッド参照としてGoogleMaps iOS SDKを追加できないのはなぜですか?
これがPodspec
です:
Pod::Spec.new do |s|
s.name = '(name)'
s.version = '1.0.0'
s.summary = '(summary)'
s.platforms = { :ios => '8.0', :osx => '10.10' }
s.ios.deployment_target = '8.0'
s.osx.deployment_target = '10.10'
s.license = { :type => 'BSD', :file => 'LICENSE' }
s.source_files = 'Sources/*.{h,Swift}', '*.framework'
s.source = { :git => "https://github.com/(Github repo).git", :tag => "1.0.0" }
s.requires_arc = true
s.frameworks = "Foundation", "CoreLocation"
s.author = { 'Romain L' => '(email)' }
s.dependency 'Google-Maps-iOS-SDK'
end
Google Maps iOS SDKを依存関係として含めないと、pod lib lint
がブリッジヘッダーで失敗し、<GoogleMaps/GoogleMaps.h>
が見つからないと文句を言います(ファイルが見つかりません)。
私は立ち往生していて、それがCocoapods 0.36(まだベータ版)のバグなのか、それとも何か間違ったことをしているのかわかりません。
ご協力いただきありがとうございます!
私はついにSO同様の問題を扱っている別のスレッドを見つけました: CocoaPodsを介して追加されたiOS用Googleマップを使用したSwiftプロジェクトのリンカーエラー =。
エラーは、悪いPodspecファイル(Google Maps iOS SDK側)とCocoapods 0.36Betaのバグの組み合わせが原因であるようです。
@fz。のGoogleマップ用の改訂されたPodspecファイルを使用することで問題を回避することが実際に可能です: https://stackoverflow.com/a/28471830/145997 。 Podspec
でvendored_frameworks
設定がどのように機能するかを理解するのにも非常に興味深い別の記事は次のとおりです。 http://codereaper.com/blog/2014/creating-a-pod- with-crashreporter / 。
したがって、ポッドプロジェクトにGoogle Maps iOS SDKを正しくインポートするには、最初に次のPodfile
を使用します。
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
# altered version of Google's Podspec
pod 'Google-Maps-iOS-SDK', :podspec => "https://raw.githubusercontent.com/Reflejo/GoogleMapsPodspec/master/Google-Maps-iOS-SDK.podspec.json"
use_frameworks! # don't forget this!
import GoogleMaps
を実行するだけで、SwiftコードからGoogleマップクラスを参照できるようになりました。ポッドを配布するために、最終的なPodspec
は次のようになりました。以下:
Pod::Spec.new do |s|
s.name = 'MyPod'
s.version = '1.0.0'
s.homepage = "https://github.com/..."
s.summary = '(pod summary)'
#s.screenshot = ""
s.author = { 'Romain L' => '(email)' }
s.license = { :type => 'BSD', :file => 'LICENSE' }
s.social_media_url = "https://Twitter.com/_RomainL"
s.platforms = { :ios => '8.0' }
s.ios.deployment_target = '8.0'
s.source_files = 'MyCode/*.{h,Swift}'
s.module_name = 'MyPod'
s.source = { :git => "https://github.com/....git", :tag => "1.0.0" }
s.requires_arc = true
s.libraries = "c++", "icucore", "z" # required for GoogleMaps.framework
s.frameworks = "AVFoundation", "CoreData", "CoreLocation", "CoreText", "Foundation", "GLKit", "ImageIO", "OpenGLES", "QuartzCore", "SystemConfiguration", "GoogleMaps" # required for GoogleMaps.framework
s.vendored_frameworks = "Dependencies/GoogleMaps.framework" # Put the Google-provided framework in that subfolder of your Pod project
#s.dependency 'Google-Maps-iOS-SDK' # Careful! this will cause errors if enabled!
end
これで、Xcodeで新しいiOSアプリを起動し、次のPodfile
を使用して、Google Maps iOSSDKを参照する自分のポッドにリンクすることができます。
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
pod 'MyPod'
use_frameworks! # do not forget this!
それほど簡単ではありませんが、結局のところ実現可能です!ただし、GoogleがすぐにPodspec
ファイルにSwift開発用にパッチを適用することを期待しています。