我曾在CocoaPods 1.6.0.beta.2中使用此解决方案,直到我意识到它不适用于iOS和tvOS项目。例如,在使用PromiseKit的项目中,target.name
可以是PromiseKit-iOS
或PromiseKit-tvOS
,检查"PromiseKit"
是否包含这样的子字符串是无用的。
我可以提供更好的解决方案。声明一个哈希表,以Swift版本为键,库名称为值:
my_project_pods_swift_versions = Hash[
"3.0", ["PagingMenuController", "TCPickerView"],
"4.0", ["PromiseKit"]
]
使用这些函数来检查
target.name
是否包含类似于
"PromiseKit"
的字符串,但反之则不行:
def setup_all_swift_versions(target, pods_swift_versions)
pods_swift_versions.each { |swift_version, pods| setup_swift_version(target, pods, swift_version) }
end
def setup_swift_version(target, pods, swift_version)
if pods.any? { |pod| target.name.include?(pod) }
target.build_configurations.each do |config|
config.build_settings['SWIFT_VERSION'] = swift_version
end
end
end
你应该在 post_install
中调用 setup_all_swift_versions
:
post_install do |installer|
installer.pods_project.targets.each do |target|
setup_all_swift_versions(target, my_project_pods_swift_versions)
end
end
在这里,您可以找到所有这些代码片段统一到一个代码块中。