CocoaPodを使用すると、ほとんどのポッドはSwift3ポッドですが、Xcodeにインポートすると、すべてのポッドはデフォルトでSwift 4になり、コンパイルステップは失敗します。CocoaPods Swift3とSwift4が混在したポッドを使用する
すべてのマイポッドのターゲットスウィフトバージョンを手動で変更することなく、Swift4ポッドをPodfile内の従来のSwift3ポッドで使用するにはどうすればよいですか?
CocoaPodを使用すると、ほとんどのポッドはSwift3ポッドですが、Xcodeにインポートすると、すべてのポッドはデフォルトでSwift 4になり、コンパイルステップは失敗します。CocoaPods Swift3とSwift4が混在したポッドを使用する
すべてのマイポッドのターゲットスウィフトバージョンを手動で変更することなく、Swift4ポッドをPodfile内の従来のSwift3ポッドで使用するにはどうすればよいですか?
iOS 11がリリースされようとしていますが、Xcode9でアプリケーションをテストしたい場合、この小さな(しかし重要な)問題に遭遇します:1日目にすべてのポッドがスウィフト4になるわけではありません。
プライベートポッド(またはオープンソースされている公共ポッド)で、あなたが追加する必要があります。これらのポッドをインポート
Pod::Spec.new do |s|
s.pod_target_xcconfig = { 'SWIFT_VERSION' => '3.2' }
s.compiler_flags = '-swift-version 3.2'
end
誰もが彼らの上の任意の特別なことなしに、箱から出して正しいスウィフトバージョンを取得します部。
私はすべてのポッドスペックを変更することができますが、私はそのパワーがありません。しかし、それはあなたのPodfileに固定することができ、ちょうどあなたが私のようであってもよいし、3.2
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['SWIFT_VERSION'] = '3.2'
end
end
end
しかしスウィフトにすべてのポッドのデフォルト設定を行い、(コードの再利用が良いです!)プライベートポッドでアプリを分割し、そしてあなた設定が完了し
post_install do |installer|
['TargetName1','TargetName2','TargetName3'].each do |targetName|
targets = installer.pods_project.targets.select { |target| target.name == targetName }
target = targets[0]
target.build_configurations.each do |config|
config.build_settings['SWIFT_VERSION'] = '4.0'
end
end
end
:おそらくスウィフト4にそれらのポッドを変換し、今、あなたはタイプ再び
の両方をミックスしたいと思うでしょう、あなたのpodfileで、これを使用!通常(V1.3.1のような)
Cocoapodはスウィフト3.2との混在をサポートするために、まだ
回避策スウィフト4で最終的には、すべてのあなたのポッドはSwift4に移行しているだろう、とあなただけの使用CocoaPodsに戻ることができます可能だ。これをPodfile
に追加し、Swift 4のポッドを配列swift4Targets
に追加してからpod install
に追加してください。
# Workaround Cocoapods to mix Swift 3.2 and 4
# Manually add to swift4Targets, otherwise assume target uses Swift 3.2
swift4Targets = ['MyTarget1', 'MyTarget2']
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
if swift4Targets.include? target.name
config.build_settings['SWIFT_VERSION'] = '4'
else
config.build_settings['SWIFT_VERSION'] = '3.2'
end
end
end
end
'post_install'メソッドが動作することを確認できます。 しかし、podspecに 'pod_target_xcconfig'を設定していないのです。私の場合、Swift 4ポッドをインポートしているSwift 3.2プロジェクトがあります。 Cocoapodsは常にXcode Target "Swift Version"を使用し、 'pod_target_xcconfig 'で定義された' SWIFT_VERSION 'をオーバーライドしているようです。 – Chris
s.compiler_flags = '-swift-version 3.2'を追加してみてください。 –