使用 Swift Package Dependency 安装时 SwiftLint 的路径应该是啥
Posted
技术标签:
【中文标题】使用 Swift Package Dependency 安装时 SwiftLint 的路径应该是啥【英文标题】:What should be the path of SwiftLint when installed with Swift Package Dependency使用 Swift Package Dependency 安装时 SwiftLint 的路径应该是什么 【发布时间】:2021-11-25 16:40:08 【问题描述】:我已经安装了带有 Swift Package Dependancy 的 SwiftLint。如手册中所述,我在 Build Phases 中添加了以下 Run 脚本:
if which swiftlint >/dev/null; then
swiftlint
else
echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi
运行我的项目时,我收到警告消息:
警告:未安装 SwiftLint,请从以下位置下载 https://github.com/realm/SwiftLint
所以我猜你的系统找不到 swiftlint 可执行文件。如果安装了 Swift Package Dependency,它在哪里?
【问题讨论】:
artsy.github.io/blog/2019/01/05/its-time-to-use-spm 或 blog.apptekstudios.com/2019/12/spm-xcode-build-tools ? @Larme,不幸的是,我在这些博客中没有找到答案。也许您会考虑创建一个空项目并尝试使用 SPM 安装 SwiftLint。也许它会对你有用,世界其他地方也会受益。 :) 我没有测试,但链接示例似乎很先进。特别是 blog.apptekstudios.com/2019/12/spm-xcode-build-tools 换句话说:不要依赖 XCode SPM 集成,而是使用Package.swift
以旧方式进行集成,在此添加您需要的依赖项。然后在构建阶段,您可以“检索该“Package.swift”,并使用swift run etc.
“运行它”(这将下载链接的包,构建并运行)。这将允许您访问 Swiftlint、SwiftFormat 等,并在构建阶段使用它。它就像一个工具的“辅助项目”。
@Larme SwiftFormat 适用于 SPM,不幸的是 SwiftLint 不适用。
然而,那里给出了解决方案。这也是SwiftFormat
在他们的自述文件中给出的解决方案:github.com/nicklockwood/SwiftFormat#xcode-build-phase
【参考方案1】:
你不能,你可以同时。
Xcode 中“集成”的 Swift 包管理器 (SPM) 可用于将代码“嵌入”到您的应用中。 不嵌入可执行文件(如 Swiftlint)。
因此,解决方案是在您的应用旁边创建一个带有 SPM 的“并行”项目。
在以下两个链接中有描述:
It's time to use Swift Package ManagerUsing SPM for Xcode build phase tools
所以这个想法是有一个Package.swift
和Swiftlint
,构建/运行它,然后它应该启动Swiftlint
。
第一次,它将获取代码,构建然后运行。所以可能需要一些时间。
这也是SwiftFormat
在他们的ReadMe上给出的解决方案。
在这里应用,这里是文件层次结构。我添加了一个文件夹和一个文件。
MyProject:
.
├── BuildTools
│ └── Package.swift
├── MyProject
│ ├── .swiftlint.yml
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ └── Contents.json
│ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ ├── Info.plist
│ ├── SceneDelegate.swift
│ └── ViewController.swift
└── MyProject.xcodeproj
在Build Phases
脚本中:
cd BuildTools
SDKROOT=(xcrun --sdk macosx --show-sdk-path)
#swift package update #Uncomment this line temporarily to update the version used to the latest matching your BuildTools/Package.swift file
swift run -c release swiftlint "$SRCROOT" --config ../MyProject/.swiftlint.yml --path ../MyProject
而Package.swift
是:
// swift-tools-version:5.5
import PackageDescription
let package = Package(
name: "BuildTools",
platforms: [.macOS(.v10_11)],
dependencies: [
.package(url: "https://github.com/Realm/SwiftLint", from: "0.44.0")
],
targets: [.target(name: "BuildTools", path: "")]
)
由于我们正在创建另一个项目并且没有利用集成的 Xcode 集成解决方案,因此使用 Mint
、HomeBrew
等解决方案可能会更好。例如,Mint 是一个“完整的 SPM 工具”。如果您有更多工具,将它们集中到一个中可能确实是一个很好的解决方案。
【讨论】:
我给了你积分,因为你很好,花时间写了一个详细的答案,但不幸的是它对我不起作用。我创建了一个新项目,添加了一个 SwiftLint 包,添加了 BuildTools 文件夹和带有上述内容的 Package.swift,并添加了 Build Phases 脚本。运行时,我收到以下错误:没有名为“swiftlint”的可执行产品。您是否遇到过同样的问题,还是顺利进行? 我也必须不时清理派生数据。当我试图理解我链接的教程时,我首先遇到了这个问题。因为我有 Swiftlint 和 Homebrew(我认为),所以我不认为它很难通过它,但我不是 100% 确定(我不想删除它,测试并重新安装它),但是我认为我的解决方案有效。您不会在新项目中添加 Swiftlint 包。以上是关于使用 Swift Package Dependency 安装时 SwiftLint 的路径应该是啥的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 13如何使用本地Swift包(Swift Package)
Xcode 13如何使用本地Swift包(Swift Package)
你可以在 iOS 应用程序中使用 Package.swift 而不是使用 .xcodeproj 吗?
从现有 Xcode 项目中为 Swift 包管理器导出 Package.swift