我有一个Swift框架,正在通过CocoaPods进行编译和部署。
我一直在使用XCode 9.0在Swift 4.0中进行开发,并将其打包到CocoaPod中,并且一切正常。
然后我升级到XCode 10,结果发现当我包含我的CocoaPod时,它不喜欢Pod是在较旧版本的XCode中编译的事实。
根据我的理解,这意味着,如果要在XCode 10项目中使用Pod,则必须在相同的Xcode版本中构建Pod。 那么这是否还意味着如果我希望我的Pod支持尽可能多的版本,我需要使用特定的Xcode版本进行单独的构建,然后将它们发布到单独的CocoaPod存储库(或多个版本)中?
我是否缺少一些基本的知识,可以让我支持尽可能多的Swift / Xcode版本?
欢呼 戴夫
答案 0 :(得分:1)
我的问题是,我在Cocoapod中运送了已编译的二进制文件,而不是源代码。不幸的是,Swift编译的二进制文件既不向前也不向后兼容。
Pod现在仅被部署为源代码,不幸的是,这意味着人们可以看到我不得不编写的令人震惊的代码,而我没有编写这些代码! #legacyproblems
答案 1 :(得分:0)
您可以根据目标确定何时以及是否要迁移 当对您的项目有意义时。迁移到Swift 4.2时 绝对值得鼓励,这不是一个全有或全无的过程,就像Swift 3一样, 4、4.2目标可以共存并链接在一起。
您希望与项目版本具有不同的cocoapod版本,然后应在pod文件末尾进行以下更改:
post_install do |installer|
print "Setting the default SWIFT_VERSION to 4.2\n"
installer.pods_project.build_configurations.each do |config|
config.build_settings['SWIFT_VERSION'] = '4.2'
end
installer.pods_project.targets.each do |target|
if ['SomeTarget-iOS', 'SomeTarget-watchOS'].include? "#{target}"
print "Setting #{target}'s SWIFT_VERSION to 3.0\n"
target.build_configurations.each do |config|
config.build_settings['SWIFT_VERSION'] = '3.0'
end
else
print "Setting #{target}'s SWIFT_VERSION to Undefined (Xcode will automatically resolve)\n"
target.build_configurations.each do |config|
config.build_settings.delete('SWIFT_VERSION')
end
end
end
end
有时甚至在运行pod更新后,您的xcode都会强制更新cocoapod pod项目的版本,在这种情况下,请选择cocoapod pod项目并在构建设置中更改swift版本。