mint install realm/SwiftLint に失敗する

こんにちは、亀山です。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