tyomashin / architecture-sample-ios

0 stars 0 forks source link

SimpleMultiModuleArchitecture にビルド補助ツールを導入 #6

Closed tyomashin closed 5 months ago

tyomashin commented 9 months ago

概要

SimpleMultiModuleArchitecture にビルド補助ツールを導入する。

TODO

tyomashin commented 5 months ago

Swift製CLIツールを Swift PM で管理する

参考文献

要点

tyomashin commented 5 months ago

swift-format

参考文献

構成ファイル

swift-format の設定・ルール一覧は、.swift-format というファイルに記載する。

デフォルトのルール一覧

以下コマンドで出力できる。

swift run -c release swift-format dump-configuration
dump-configuration 出力結果 ```json { "fileScopedDeclarationPrivacy" : { "accessLevel" : "private" }, "indentation" : { "spaces" : 2 }, "indentConditionalCompilationBlocks" : true, "indentSwitchCaseLabels" : false, "lineBreakAroundMultilineExpressionChainComponents" : false, "lineBreakBeforeControlFlowKeywords" : false, "lineBreakBeforeEachArgument" : false, "lineBreakBeforeEachGenericRequirement" : false, "lineLength" : 100, "maximumBlankLines" : 1, "multiElementCollectionTrailingCommas" : true, "noAssignmentInExpressions" : { "allowedFunctions" : [ "XCTAssertNoThrow" ] }, "prioritizeKeepingFunctionOutputTogether" : false, "respectsExistingLineBreaks" : true, "rules" : { "AllPublicDeclarationsHaveDocumentation" : false, "AlwaysUseLiteralForEmptyCollectionInit" : false, "AlwaysUseLowerCamelCase" : true, "AmbiguousTrailingClosureOverload" : true, "BeginDocumentationCommentWithOneLineSummary" : false, "DoNotUseSemicolons" : true, "DontRepeatTypeInStaticProperties" : true, "FileScopedDeclarationPrivacy" : true, "FullyIndirectEnum" : true, "GroupNumericLiterals" : true, "IdentifiersMustBeASCII" : true, "NeverForceUnwrap" : false, "NeverUseForceTry" : false, "NeverUseImplicitlyUnwrappedOptionals" : false, "NoAccessLevelOnExtensionDeclaration" : true, "NoAssignmentInExpressions" : true, "NoBlockComments" : true, "NoCasesWithOnlyFallthrough" : true, "NoEmptyTrailingClosureParentheses" : true, "NoLabelsInCasePatterns" : true, "NoLeadingUnderscores" : false, "NoParensAroundConditions" : true, "NoPlaygroundLiterals" : true, "NoVoidReturnOnFunctionSignature" : true, "OmitExplicitReturns" : false, "OneCasePerLine" : true, "OneVariableDeclarationPerLine" : true, "OnlyOneTrailingClosureArgument" : true, "OrderedImports" : true, "ReplaceForEachWithForLoop" : true, "ReturnVoidInsteadOfEmptyTuple" : true, "TypeNamesShouldBeCapitalized" : true, "UseEarlyExits" : false, "UseExplicitNilCheckInConditions" : true, "UseLetInEveryBoundCaseVariable" : true, "UseShorthandTypeNames" : true, "UseSingleLinePropertyGetter" : true, "UseSynthesizedInitializer" : true, "UseTripleSlashForDocumentationComments" : true, "UseWhereClausesInForLoops" : false, "ValidateDocumentationComments" : false }, "spacesAroundRangeFormationOperators" : false, "tabWidth" : 8, "version" : 1 } ```
tyomashin commented 5 months ago

トラブルシューティング

'buildtools': Invalid manifest エラー

Xcode で CLI ツールをビルドしようとすると、このエラーが発生する。 (案件のコードではエラーは出なかったのだが。。)

環境

発生ケース

Xcode の Build Phases で以下のコマンドを実行するとエラーが発生する

xcrun --sdk macosx swift build -c release --package-path ../BuildTools
エラー詳細:'buildtools': Invalid manifest ``` 'buildtools': Invalid manifest (compiled with: ["/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc", "-vfsoverlay", "/var/folders/ps/dw2nsyk15ll6kh97pc2csxtw0000gn/T/TemporaryDirectory.cZ6B2Q/vfs.yaml", "-L", "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/pm/ManifestAPI", "-lPackageDescription", "-Xlinker", "-rpath", "-Xlinker", "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/pm/ManifestAPI", "-target", "x86_64-apple-macosx13.0", "-sdk", "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.4.sdk", "-F", "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks", "-I", "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/lib", "-L", "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/lib", "-swift-version", "5", "-I", "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/pm/ManifestAPI", "-sdk", "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.4.sdk", "-package-description-version", "5.10.0", "/Users/okazakishinya/programming/architecture-sample-ios/SimpleMultiModuleArchitecture/BuildTools/Package.swift", "-Xfrontend", "-disable-implicit-concurrency-module-import", "-Xfrontend", "-disable-implicit-string-processing-module-import", "-o", "/var/folders/ps/dw2nsyk15ll6kh97pc2csxtw0000gn/T/TemporaryDirectory.ETqxyH/buildtools-manifest"]) ```

対処方法

原因不明なので、Makefile を用意して、コマンドラインから CLI ツールをビルドする方針とする。

$ swift build -c release --package-path BuildTools --product swift-format

その後、Xcode の Build Phases でビルドした CLI ツールを使用すれば良い

../BuildTools/.build/release/swift-format format
tyomashin commented 5 months ago

SwiftGen について

参考文献

構成ファイル

自動生成に関する設定は swiftgen.yml に記載する。

注意点

SwiftGen はメンテナンスがとまり気味なので、採用は慎重にした方が良いかもしれない。 以下の理由から、現状はまだ利用できると思う。

tyomashin commented 5 months ago

LicensePlist を導入

導入時のドキュメントは以下に記載している。

https://www.notion.so/83828fe954984304b3f6b9a2251cf308

注意点

LicensePlist は GitHub API を使用しているため、レート制限がある。
このためビルドのたびに実行することができないので、必要な時にだけ実行するようにする

tyomashin commented 5 months ago

追記

問題点

注意点

環境によっては、コマンドラインで使用する xcode のバージョンを手動で 15.2 にする必要がある

// 現在使用している Xcode のバージョン
xcodebuild -version

// コマンドラインで使用する Xcode のバージョンを指定
sudo xcode-select --switch  /Applications/Xcode15_2.app/Contents/Developer