Xcode 使用椰子荚混合Swift3和Swift4荚
使用cocoapod时,大多数pod仍然是swift3pod,但在Xcode中导入时,所有pod都默认为swift4,这使得编译步骤失败Xcode 使用椰子荚混合Swift3和Swift4荚,xcode,swift3,cocoapods,swift4,Xcode,Swift3,Cocoapods,Swift4,使用cocoapod时,大多数pod仍然是swift3pod,但在Xcode中导入时,所有pod都默认为swift4,这使得编译步骤失败 我如何在我的pod文件中将Swift4 pod与传统Swift3 pod一起使用,而不必手动更改我所有pod的目标swift版本?iOS 11即将发布,你想用Xcode9测试你的应用程序,你会遇到一个小问题(但很重要):不是所有pod在第一天都是swift 4(或者永远都是!) 在您的私有播客(或开源的公共播客)中,您应该添加: Pod::Spec.new d
我如何在我的pod文件中将Swift4 pod与传统Swift3 pod一起使用,而不必手动更改我所有pod的目标swift版本?iOS 11即将发布,你想用Xcode9测试你的应用程序,你会遇到一个小问题(但很重要):不是所有pod在第一天都是swift 4(或者永远都是!) 在您的私有播客(或开源的公共播客)中,您应该添加:
Pod::Spec.new do |s|
s.pod_target_xcconfig = { 'SWIFT_VERSION' => '3.2' }
s.compiler_flags = '-swift-version 3.2'
end
任何进口这些吊舱的人都可以从盒子里得到正确的Swift版本,而不需要任何特殊的东西
我希望我能修改所有的播客,但我没有这个能力。但这可以在你的pod文件中修复,只需将你所有的pod默认为swift3.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
然而,你可能和我一样,将你的应用程序与私有的pod分开(代码重用很好!),你可能会将这些pod转换成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
你完了!最终,您的所有POD都将迁移到Swift4,您可以恢复正常使用CoCoaPOD
Cocoapod(从v1.3.1开始)尚未支持混合Swift 3.2和Swift 4
解决方法是可能的。将其附加到pod文件
,并将已经是Swift 4的pod添加到阵列swift4Targets
,然后pod安装
# 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
我是这样做的。所以现在除了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
我可以确认
post_安装
方法有效。但是,在podspec中设置pod\u target\u xcconfig
并没有成功。在我的例子中,我有一个Swift 3.2项目正在导入一个Swift 4吊舱。Cocoapods似乎总是使用Xcode目标“Swift Version”并覆盖由pod\u Target\u xcconfig
定义的“Swift\u Version”。请尝试添加s.compiler\u标志='-Swift Version 3.2',看看这是否奏效。