Package.swift 降级问题排查
过去 Package.swift 没有好好写,toolchain 版本跟着 Xcode 走,没有兼容不同的版本。最近研究用 SPM 代替 CocoaPods,所以认真的研究折腾了一下。
本文总结把 Package.swift 从 5.9 降至 5.1 过程中遇到的一些问题。
本文不讲解基础语法。
版本号前的空格
之前 5.9 的时候是这么写的:
// swift-tools-version: 5.9
直接将 5.9 改成 5.1 之后报错了:
horizontal whitespace sequence [U+0020] immediately preceding the version specifier is supported by only Swift ≥ 5.4; consider removing the sequence for Swift 5.1
原因是 version:
和 5.1
之间有一个空格。而这个空格是 Swift 5.4 时才支持的特性... 所以改成下面这样就可以了:
// swift-tools-version:5.1
// ⬆️注意这里没有空格
资源的引用
像我一样没有持续关注 SPM 发展的开发者可能不知道,在 SPM 中引用资源是 5.3 开始才支持的特性。
所以如果你的包使用了 Resource bundle 或者 Binary Framework,那么你就不能降至 5.1 了,最低也要 5.3 版本才行。
省略 target.path
我没能找到这个的提案,可能是 Allow sources anywhere in ./Sources when only one target is present 这个。如果哪位明确知道麻烦在评论区告知。
在 5.9 版本上,如果我们的代码都在 Sources 目录下,且只有一个 Target,那么我们可以不显式指定 target.path 属性。
但是在 5.1 版本上不行,所以我们还是需要显式地指定 path 路径。