当我在Xcode中“运行”项目时,有没有办法运行“swiftlint autocorrect”?

kxxlusnw  于 2022-12-30  发布在  Swift
关注(0)|答案(4)|浏览(212)

我在我的iOS项目中使用过"swiftlint",我也知道在终端的项目根路径中输入"swiftlint autocorrect"来更正一些警告和错误。
当我在Xcode中Run项目时,有没有办法运行"swiftlint autocorrect"?

编辑

swiftlint不建议使用这种方式执行命令"swiftlint autocorrect"。
我发现使用"swiftlint autocorrect"的方法是在终端中键入它。
在Xcode中"运行"时使用"swiftlint自动更正"是否是一个好的做法?

uelo1irk

uelo1irk1#

自动更正不再可用。如果您从终端运行自动更正,您应该看到以下消息
swiftlint autocorrect命令不再可用。请改用swiftlint --fix
因此,如果您已经通过CocoaPods安装了swiftlint,则脚本应如下所示

${PODS_ROOT}/SwiftLint/swiftlint --fix && ${PODS_ROOT}/SwiftLint/swiftlint
6uxekuva

6uxekuva2#

swiftlint project说明您可以通过以下步骤来完成此操作:

    • X代码**

将SwiftLint集成到Xcode项目中,以在问题导航器中显示警告和错误。
要执行此操作,请单击文件导航器中的项目,然后单击主要应用目标,并转到构建阶段。单击+并选择"新建运行脚本阶段"。插入以下内容作为脚本:

if which swiftlint >/dev/null; then
    swiftlint
else
    echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi

您可能希望将SwiftLint阶段直接移到"编译源代码"步骤之前,以便在编译之前快速检测错误。但是,SwiftLint设计为在干净地完成编译器解析阶段的有效Swift代码上运行。因此,在"编译源代码"之前运行SwiftLint可能会产生一些不正确的结果。
如果你也想自动修正违规,你的脚本可以运行swiftlint autocorrect && swiftlint而不是swiftlint。这意味着所有可修正的违规都被修正了,同时确保在你的项目中对剩余的违规显示警告。
如果您已经通过CocoaPods安装了SwiftLint,则脚本应如下所示:

"${PODS_ROOT}/SwiftLint/swiftlint"

我认为推荐这样使用swiftlint,唯一的警告是
您可能希望将SwiftLint阶段直接移到"编译源代码"步骤之前,以便在编译之前快速检测错误。但是,SwiftLint设计为在干净地完成编译器解析阶段的有效Swift代码上运行。因此,在"编译源代码"之前运行SwiftLint可能会产生一些不正确的结果。
这是关于脚本的 * 放置 * 而不是脚本本身。这意味着swiftlint只保证在有效的源代码上正确执行,所以只有当您将脚本放在"编译源代码"阶段 * 之后 * 时,swiftlint才能正确工作,这样swiftlint只在编译器验证了您的代码后运行。
但是,在我的个人设置中,我在保存文件时使用vim来运行swiftlint(通常处于不可编译状态),其在编译之前运行,当我还没有关闭我打开的所有{时,除了偶尔奇怪的格式之外,我没有遇到任何问题。我不认为在"编译源代码"之前运行swiftlint会有任何问题阶段。
注意:页面上的其他警告
⚠️This plugin will not work with Xcode 8 or later without disabling SIP. This is not recommended.
不是关于"运行脚本阶段"的。这是指Xcode插件,它将在保存时运行swiftlint,就像vim一样。要在最新版本的Xcode上使用此插件,您需要禁用安全功能SIP,这是不推荐的。但同样,这与"运行脚本阶段"解决方案无关。

bqujaahr

bqujaahr3#

只是稍微扩展一下@deaton.dg的答案(我发现它非常有用)。
我替换的前一个脚本(在Xcode Build Phases 中)包含在引号"中,但是使用引号中的新脚本会导致构建错误。
花了一点时间才发现似乎是引号引起了问题。
因此,如果您已经通过 CocoaPods 安装了 SwiftLint,并且希望在构建时执行swiftlint autocorrect,我发现您需要确保脚本包含引号(即,完全按照@deaton.dg的后续注解):

${PODS_ROOT}/SwiftLint/swiftlint autocorrect && ${PODS_ROOT}/SwiftLint/swiftlint
aemubtdh

aemubtdh4#

是,请在Compile Resources之前将以下脚本添加到Build Phases

export PATH="$PATH:/opt/homebrew/bin"

if which swiftlint > /dev/null; then
  swiftlint --fix && swiftlint
else
  echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi

相关问题