こんにちは、亀山です。Mint を使った SwiftLint のインストールに失敗する問題に遭遇しました。結論から言うと、M1 Mac にインストールされている Mint が x86_64 になっているのが原因でした。arm64 の Mint をインストールすることで解決したので手順を記録として残します。
下記のようなエラーが発生しました。クリックで開きます。
$ mint install realm/SwiftLint
🌱 Cloning SwiftLint 0.54.0
🌱 Resolving package
🌱 Building product swiftlint
Building for production...
[0/11] Compiling SourceKit SourceKit.c
[0/11] Compiling Clang_C Clang_C.c
remark: Incremental compilation has been disabled: it is not compatible with whole module optimization
remark: Incremental compilation has been disabled: it is not compatible with whole module optimization
remark: Incremental compilation has been disabled: it is not compatible with whole module optimization
[3/14] Compiling SwiftSyntax509 Empty.swift
remark: Incremental compilation has been disabled: it is not compatible with whole module optimization
[3/15] Compiling DyldWarningWorkaround DyldWarningWorkaround.c
remark: Incremental compilation has been disabled: it is not compatible with whole module optimization
[4/16] Compiling writer.c
remark: Incremental compilation has been disabled: it is not compatible with whole module optimization
[5/16] Compiling reader.c
[6/17] Compiling parser.c
[8/17] Compiling CollectionConcurrencyKit CollectionConcurrencyKit.swift
[8/17] Compiling api.c
[9/17] Compiling emitter.c
[10/17] Compiling scanner.c
remark: Incremental compilation has been disabled: it is not compatible with whole module optimization
[12/18] Compiling ArgumentParserToolInfo ToolInfo.swift
remark: Incremental compilation has been disabled: it is not compatible with whole module optimization
[13/19] Compiling SwiftyTextTable TextTable.swift
[14/19] Compiling SWXMLHash XMLAttributeDeserializable.swift
[15/19] Compiling Yams Constructor.swift
remark: Incremental compilation has been disabled: it is not compatible with whole module optimization
[16/20] Compiling ArgumentParser BashCompletionsGenerator.swift
[17/20] Compiling SourceKittenFramework ByteCount.swift
[18/20] Compiling SwiftSyntax AbsolutePosition.swift
remark: Incremental compilation has been disabled: it is not compatible with whole module optimization
remark: Incremental compilation has been disabled: it is not compatible with whole module optimization
remark: Incremental compilation has been disabled: it is not compatible with whole module optimization
remark: Incremental compilation has been disabled: it is not compatible with whole module optimization
[19/24] Compiling SwiftIDEUtils SwiftIDEUtilsCompatibility.swift
[20/24] Compiling SwiftBasicFormat BasicFormat.swift
[21/24] Compiling SwiftDiagnostics Convenience.swift
[22/24] Compiling SwiftParser Attributes.swift
remark: Incremental compilation has been disabled: it is not compatible with whole module optimization
remark: Incremental compilation has been disabled: it is not compatible with whole module optimization
[23/26] Compiling SwiftOperators Operator.swift
[24/26] Compiling SwiftParserDiagnostics DiagnosticExtensions.swift
remark: Incremental compilation has been disabled: it is not compatible with whole module optimization
[25/27] Compiling SwiftSyntaxBuilder ConvenienceInitializers.swift
remark: Incremental compilation has been disabled: it is not compatible with whole module optimization
[26/28] Compiling SwiftSyntaxMacros AbstractSourceLocation.swift
remark: Incremental compilation has been disabled: it is not compatible with whole module optimization
[27/29] Compiling SwiftSyntaxMacroExpansion BasicMacroExpansionContext.swift
remark: Incremental compilation has been disabled: it is not compatible with whole module optimization
[28/30] Compiling SwiftCompilerPluginMessageHandling CompilerPluginMessageHandler.swift
remark: Incremental compilation has been disabled: it is not compatible with whole module optimization
[29/31] Compiling SwiftCompilerPlugin CompilerPlugin.swift
remark: Incremental compilation has been disabled: it is not compatible with whole module optimization
[30/32] Compiling SwiftLintCoreMacros RuleConfigurationMacros.swift
[30/32] Linking SwiftLintCoreMacros
remark: Incremental compilation has been disabled: it is not compatible with whole module optimization
[32/33] Compiling SwiftLintCore RuleDocumentation.swift
rosetta error: Failed to open libRosettaRuntime
:0: warning: compiler plugin not loaded: '/private/var/folders/3y/v4gw12vn3dlbxtw4bcm2xd5h0000gn/T/mint/github.com_realm_SwiftLint/.build/x86_64-apple-macosx/release/SwiftLintCoreMacros; failed to initialize
/private/var/folders/3y/v4gw12vn3dlbxtw4bcm2xd5h0000gn/T/mint/github.com_realm_SwiftLint/Source/SwiftLintCore/Models/ViolationSeverity.swift:3:13: error: external macro implementation type 'SwiftLintCoreMacros.MakeAcceptableByConfigurationElement' could not be found for macro 'MakeAcceptableByConfigurationElement()'
public enum ViolationSeverity: String, Comparable, Codable, InlinableOptionType {
^
/private/var/folders/3y/v4gw12vn3dlbxtw4bcm2xd5h0000gn/T/mint/github.com_realm_SwiftLint/Source/SwiftLintCore/Helpers/Macros.swift:18:14: note: 'MakeAcceptableByConfigurationElement()' declared here
public macro MakeAcceptableByConfigurationElement() = #externalMacro(
^
/private/var/folders/3y/v4gw12vn3dlbxtw4bcm2xd5h0000gn/T/mint/github.com_realm_SwiftLint/Source/SwiftLintCore/Helpers/Macros.swift:7:14: warning: external macro implementation type 'SwiftLintCoreMacros.AutoApply' could not be found for macro 'AutoApply()'
public macro AutoApply() = #externalMacro(
^
/private/var/folders/3y/v4gw12vn3dlbxtw4bcm2xd5h0000gn/T/mint/github.com_realm_SwiftLint/Source/SwiftLintCore/Helpers/Macros.swift:18:14: warning: external macro implementation type 'SwiftLintCoreMacros.MakeAcceptableByConfigurationElement' could not be found for macro 'MakeAcceptableByConfigurationElement()'
public macro MakeAcceptableByConfigurationElement() = #externalMacro(
^
/private/var/folders/3y/v4gw12vn3dlbxtw4bcm2xd5h0000gn/T/mint/github.com_realm_SwiftLint/Source/SwiftLintCore/Helpers/Macros.swift:37:14: warning: external macro implementation type 'SwiftLintCoreMacros.SwiftSyntaxRule' could not be found for macro 'SwiftSyntaxRule(foldExpressions:explicitRewriter:)'
public macro SwiftSyntaxRule(foldExpressions: Bool = false, explicitRewriter: Bool = false) = #externalMacro(
^
/private/var/folders/3y/v4gw12vn3dlbxtw4bcm2xd5h0000gn/T/mint/github.com_realm_SwiftLint/Source/SwiftLintCore/Models/SeverityConfiguration.swift:8:6: error: generic struct 'ConfigurationElement' requires that 'ViolationSeverity' conform to 'AcceptableByConfigurationElement'
@ConfigurationElement(key: "severity")
^
/private/var/folders/3y/v4gw12vn3dlbxtw4bcm2xd5h0000gn/T/mint/github.com_realm_SwiftLint/Source/SwiftLintCore/Models/RuleConfigurationDescription.swift:393:15: note: where 'T' = 'ViolationSeverity'
public struct ConfigurationElement<T: AcceptableByConfigurationElement & Equatable>: Equatable {
^
/private/var/folders/3y/v4gw12vn3dlbxtw4bcm2xd5h0000gn/T/mint/github.com_realm_SwiftLint/Source/SwiftLintCore/Models/SeverityConfiguration.swift:8:6: note: did you mean to use '.rawValue'?
@ConfigurationElement(key: "severity")
^
.rawValue
/private/var/folders/3y/v4gw12vn3dlbxtw4bcm2xd5h0000gn/T/mint/github.com_realm_SwiftLint/Source/SwiftLintCore/Models/SeverityConfiguration.swift:8:6: error: generic struct 'ConfigurationElement' requires that 'ViolationSeverity' conform to 'AcceptableByConfigurationElement'
@ConfigurationElement(key: "severity")
^
/private/var/folders/3y/v4gw12vn3dlbxtw4bcm2xd5h0000gn/T/mint/github.com_realm_SwiftLint/Source/SwiftLintCore/Models/RuleConfigurationDescription.swift:393:15: note: where 'T' = 'ViolationSeverity'
public struct ConfigurationElement<T: AcceptableByConfigurationElement & Equatable>: Equatable {
^
/private/var/folders/3y/v4gw12vn3dlbxtw4bcm2xd5h0000gn/T/mint/github.com_realm_SwiftLint/Source/SwiftLintCore/Models/SeverityConfiguration.swift:8:6: note: did you mean to use '.rawValue'?
@ConfigurationElement(key: "severity")
^
.rawValue
/private/var/folders/3y/v4gw12vn3dlbxtw4bcm2xd5h0000gn/T/mint/github.com_realm_SwiftLint/Source/SwiftLintCore/Models/SeverityConfiguration.swift:8:6: error: generic struct 'ConfigurationElement' requires that 'ViolationSeverity' conform to 'AcceptableByConfigurationElement'
@ConfigurationElement(key: "severity")
^
/private/var/folders/3y/v4gw12vn3dlbxtw4bcm2xd5h0000gn/T/mint/github.com_realm_SwiftLint/Source/SwiftLintCore/Models/RuleConfigurationDescription.swift:393:15: note: where 'T' = 'ViolationSeverity'
public struct ConfigurationElement<T: AcceptableByConfigurationElement & Equatable>: Equatable {
^
/private/var/folders/3y/v4gw12vn3dlbxtw4bcm2xd5h0000gn/T/mint/github.com_realm_SwiftLint/Source/SwiftLintCore/Models/SeverityConfiguration.swift:8:6: note: did you mean to use '.rawValue'?
@ConfigurationElement(key: "severity")
^
.rawValue
/private/var/folders/3y/v4gw12vn3dlbxtw4bcm2xd5h0000gn/T/mint/github.com_realm_SwiftLint/Source/SwiftLintCore/Models/SeverityConfiguration.swift:2:15: error: type 'SeverityConfiguration' does not conform to protocol 'Equatable'
public struct SeverityConfiguration<Parent: Rule>: SeverityBasedRuleConfiguration {
^
/private/var/folders/3y/v4gw12vn3dlbxtw4bcm2xd5h0000gn/T/mint/github.com_realm_SwiftLint/Source/SwiftLintCore/Models/SeverityConfiguration.swift:9:9: note: stored property type '<>' does not conform to protocol 'Equatable', preventing synthesized conformance of 'SeverityConfiguration' to 'Equatable'
var severity = ViolationSeverity.warning
^
Swift.==:1:24: note: candidate would match if 'SeverityConfiguration' conformed to 'RawRepresentable'
@inlinable public func == (lhs: T, rhs: T) -> Bool where T : RawRepresentable, T.RawValue : Equatable
^
Swift.FloatingPoint:2:24: note: candidate would match if 'SeverityConfiguration' conformed to 'FloatingPoint'
public static func == (lhs: Self, rhs: Self) -> Bool
^
Swift.BinaryInteger:2:24: note: candidate would match if 'SeverityConfiguration' conformed to 'BinaryInteger'
public static func == (lhs: Self, rhs: Other) -> Bool where Other : BinaryInteger
^
Swift.Pointer:2:24: note: candidate would match if 'SeverityConfiguration' conformed to 'Pointer'
public static func == (lhs: Self, rhs: Self) -> Bool
^
Swift.Pointer:3:35: note: candidate would match if 'SeverityConfiguration' conformed to 'Pointer'
@inlinable public static func == (lhs: Self, rhs: Other) -> Bool where Other : _Pointer
^
Swift.Strideable:3:35: note: candidate would match if 'SeverityConfiguration' conformed to 'Strideable'
@inlinable public static func == (x: Self, y: Self) -> Bool
^
Swift.StringProtocol:2:35: note: candidate would match if 'SeverityConfiguration' conformed to 'StringProtocol'
@inlinable public static func == (lhs: Self, rhs: RHS) -> Bool where RHS : StringProtocol
^
Swift.SIMD:4:24: note: candidate would match if 'SeverityConfiguration' conformed to 'SIMD'
public static func == (a: Self, b: Self) -> Bool
^
Swift.Equatable:2:17: note: protocol requires function '==' with type '(SeverityConfiguration, SeverityConfiguration) -> Bool'
static func == (lhs: Self, rhs: Self) -> Bool
^
/private/var/folders/3y/v4gw12vn3dlbxtw4bcm2xd5h0000gn/T/mint/github.com_realm_SwiftLint/Source/SwiftLintCore/Models/SeverityConfiguration.swift:19:14: error: cannot assign to property: 'severity' is a get-only property
self.severity = severity
^~~~~~~~
/private/var/folders/3y/v4gw12vn3dlbxtw4bcm2xd5h0000gn/T/mint/github.com_realm_SwiftLint/Source/SwiftLintCore/Models/SeverityConfiguration.swift:29:14: error: cannot assign to property: 'severity' is a get-only property
self.severity = severity
^~~~~~~~
/private/var/folders/3y/v4gw12vn3dlbxtw4bcm2xd5h0000gn/T/mint/github.com_realm_SwiftLint/Source/SwiftLintCore/Models/ViolationSeverity.swift:3:13: error: type 'ViolationSeverity' does not conform to protocol 'AcceptableByConfigurationElement'
public enum ViolationSeverity: String, Comparable, Codable, InlinableOptionType {
^
/private/var/folders/3y/v4gw12vn3dlbxtw4bcm2xd5h0000gn/T/mint/github.com_realm_SwiftLint/Source/SwiftLintCore/Models/RuleConfigurationDescription.swift:354:17: note: type 'ViolationSeverity' does not conform to inherited protocol 'AcceptableByConfigurationElement'
public protocol InlinableOptionType: AcceptableByConfigurationElement {}
^
error: fatalError
🌱 Encountered error during "swift build -c release --product swiftlint -Xswiftc -target -Xswiftc x86_64-apple-macosx13.5". Use --verbose to see full output
🌱 Failed to build SwiftLint 0.54.0 with SPM
エラー発生時の状況
Homebrew を使って Mint をインストールしていました。arm64 の Mint をインストールするには、インストール環境を arm64 にする必要があります。まず、今のシェルが arm64 になっているか調べたところ・・・
$ uname -m
x86_64
x86_64 やんけ!fish shell が arm64 になっていませんでした。
$ which fish | xargs -I {} file {}
/usr/local/bin/fish: Mach-O 64-bit executable x86_64
fish の再インストール
fish をアンインストールします。
brew uninstall fish
https://fishshell.com/ のインストーラからインストールします。
$ uname -m
arm64
arm64 になりました。この状態で、Homebrew も入れ直していきます。
Homebrew の再インストール
docs.brew.sh
Homebrew をアンインストールスクリプトでアンインストール
brew.sh
トップページのインストールスクリプトでインストール
Mint の再インストール
Mint をアンインストールします。
brew uninstall mint
Mint をインストールします。
brew install mint
SwiftLint のインストール
やっと arm64 の Mint が手に入りました。
$ which mint | xargs -I {} file {}
/opt/homebrew/bin/mint: Mach-O 64-bit executable arm64
インストールします。正常に終了しました。
mint install realm/SwiftLint