使用 CocoaPods 混合 Swift3 和 Swift4 pods
Using CocoaPods mixed Swift3 and Swift4 pods
使用CocoaPods,大部分pods仍然是Swift3pods,但是在Xcode中导入时,所有pods默认为Swift 4,这使得编译步骤失败。
如何在我的 Podfile 中将 Swift4 pods 与遗留 Swift3 pods 一起使用,而无需手动更改目标 swift 版本我所有的 pods?
iOS 11 即将发布,你想用 Xcode9 测试你的应用程序,你会遇到这个小(但很重要)的问题:并非所有 pods 都会Swift 第 1 天 4 个(或永远是!)
在你的私人pods(或开源的publicpods)中,你应该添加:
Pod::Spec.new do |s|
s.pod_target_xcconfig = { 'SWIFT_VERSION' => '3.2' }
s.compiler_flags = '-swift-version 3.2'
end
任何导入这些 pods 的人都将获得开箱即用的正确 Swift 版本,他们不需要任何特殊的东西。
我希望我可以修改所有 podspec,但我没有那个权力。但这可以在您的 Podfile 中修复,只需将所有 pods 默认设置为 Swift 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
然而,你可能像我一样,将你的应用程序与私有 pods 分开(代码重用很好!),你可能会将那些 pods 转换为 Swift 4 .现在你想混合这两种类型
同样,在你的播客文件中,使用这个:
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
大功告成!最终,您所有的 pods 都将迁移到 Swift4,您可以恢复正常使用 CocoaPods
Cocoapod(自 v1.3.1 起)尚不支持混合使用 Swift 3.2 和 Swift 4。
可能有解决方法。将此附加到您的 Podfile
,并将已经是 Swift 4 的 pods 添加到数组 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
我是这样做的。所以现在所有 pods,除了 2 个都在使用 Swift 3.2.
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |configuration|
configuration.build_settings['SWIFT_VERSION'] = "3.2"
end
end
installer.pods_project.targets.each do |target|
if ['MapboxCoreNavigation', 'MapboxNavigation'].include? target.name
target.build_configurations.each do |config|
config.build_settings['SWIFT_VERSION'] = '4.0'
end
end
end
end
使用CocoaPods,大部分pods仍然是Swift3pods,但是在Xcode中导入时,所有pods默认为Swift 4,这使得编译步骤失败。
如何在我的 Podfile 中将 Swift4 pods 与遗留 Swift3 pods 一起使用,而无需手动更改目标 swift 版本我所有的 pods?
iOS 11 即将发布,你想用 Xcode9 测试你的应用程序,你会遇到这个小(但很重要)的问题:并非所有 pods 都会Swift 第 1 天 4 个(或永远是!)
在你的私人pods(或开源的publicpods)中,你应该添加:
Pod::Spec.new do |s|
s.pod_target_xcconfig = { 'SWIFT_VERSION' => '3.2' }
s.compiler_flags = '-swift-version 3.2'
end
任何导入这些 pods 的人都将获得开箱即用的正确 Swift 版本,他们不需要任何特殊的东西。
我希望我可以修改所有 podspec,但我没有那个权力。但这可以在您的 Podfile 中修复,只需将所有 pods 默认设置为 Swift 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
然而,你可能像我一样,将你的应用程序与私有 pods 分开(代码重用很好!),你可能会将那些 pods 转换为 Swift 4 .现在你想混合这两种类型
同样,在你的播客文件中,使用这个:
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
大功告成!最终,您所有的 pods 都将迁移到 Swift4,您可以恢复正常使用 CocoaPods
Cocoapod(自 v1.3.1 起)尚不支持混合使用 Swift 3.2 和 Swift 4。
可能有解决方法。将此附加到您的 Podfile
,并将已经是 Swift 4 的 pods 添加到数组 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
我是这样做的。所以现在所有 pods,除了 2 个都在使用 Swift 3.2.
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |configuration|
configuration.build_settings['SWIFT_VERSION'] = "3.2"
end
end
installer.pods_project.targets.each do |target|
if ['MapboxCoreNavigation', 'MapboxNavigation'].include? target.name
target.build_configurations.each do |config|
config.build_settings['SWIFT_VERSION'] = '4.0'
end
end
end
end