SwiftPMでCLI シングルバイナリ

Created
Feb 4, 2021 8:35 AM
Tags
Swift
Keywords

swift build -c release -Xswiftc -static-stdlib

Swift Package Manager(SwiftPM)で作ったコマンドラインツールをHomebrewに登録する方法 - Qiita

mono0926/LicensePlist という、Carthage・CocoaPodsおよび手動指定ライブラリから、iOS設定アプリに載せられるplist形式のライセンスファイル群を生成するコマンドラインツールを作りまして、 それをHomebrewに登録した のでやり方を共有します。 結果的にはまあまあ簡単ですが、Homebrew登録自体が初めてだったので、多少手こずりました。 Swift Package Manager(SwiftPM)で作ったコマンドラインツールのHomebrew登録 本家Homebrewリポジトリへの登録ではなく、brew tap方式 Bottlesという、バイナリ配布対応はスキップしたため、インストール先で都度ビルドが必要 本体のコマンドラインツールリポジトリで Makefile を用意します。SwiftPM ではHomebrew対応せずとも簡単なMakefileを用意するのがわりと一般的なので、Homebrew対応前からすでに作成済みだったりもすると思います。 installにて、次に作るFormulaファイルから渡す$(PREFIX)を使うように設定するのが肝です。そのディレクトリを生成してビルドされたバイナリファイルをコピーしています。 PREFIXに?=で/usr/localを代入しているので、普通に make installした場合は、/usr/local/bin 配下にコピーされます。 Homebrew対応の本筋とは外れますが、 swift build -c release -Xswiftc -static-stdlib の -Xswiftc -static-stdlib オプションも大事です。標準ライブラリおよび依存ライブラリとstatic linkしてくれるので、単一実行バイナリが生成できます。 以下の記事で紹介されていました。このオプション指定以外にも大いに参考にさせていただきました🙇 Building a command line tool using the Swift Package Manager 参考に、 こちらがLicensePlistのMakefileです 。 出来たら、Pushしてタグを打っておきましょう。以下では 1.3.5 タグを打ったとして説明していきます。 macOS High Sierra以降では --disable-sandbox 指定が必要 Xcode 10.2(Swift 5.0)以降では -Xswiftc -static-stdlib は不要(むしろ指定するとビルドエラー) https://github.com/mono0926/LicensePlist がコマンドラインツール本体ですが、それに対応する https://github.com/mono0926/homebrew-license-plist という brew tap用のリポジトリを作成します本体のコマンドラインツールリポジトリがキャメルケースだったので、ちょっと揺れが出てしまっています...)。 今回は名前を合わせましたが、合わせなくても良いです。 mono0926/taps などのリポジトリ名の方が今後他の時にも流用出来て良かったかも、と今思っています...。 まずは以下を実行してひな形を生成します。 https://github.com/mono0926/LicensePlist/archive/1.3.5.tar.gz 部分は、 リポジトリのURL/archive/ タグ.tar.gz という構成になっています。これは、タグを打つと、その時点のスナップショットとそのURLをGitHubが自動生成してくれるようになっています(Releasesに載っているダウンロードURLと同じです)。 Editing /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/licenseplist.rb というメッセージとともにひな形の編集画面が開きます。 ひな形はこうなっています。 PLEASE REMOVE ALL GENERATED COMMENTS BEFORE SUBMITTING YOUR PULL REQUEST!と書かれた通り消しましょう( brew tap 形式なので残ってても問題無いですが)。 そして、SwiftPMのコマンドラインツールをうまくビルドできるように編集して、以下が完成系です。 先ほどの Makefileで参照できるように、 installメソッドで, "PREFIX=#{prefix}"にて ...

Swift Package Manager(SwiftPM)で作ったコマンドラインツールをHomebrewに登録する方法 - Qiita