Open3

Swift+macOSのコマンドラインツールがどこにできるか

kabeyakabeya

macOS用のコマンドラインツールを作ろうとして、Xcodeで新規プロジェクトを作ったはいいが、できあがりの実行ファイルが見当たらない件、というのがありますね。

import Foundation

print("Hello, World!")
print(FileManager.default.currentDirectoryPath)
実行結果
Hello, World!
/Users/kabeya/Library/Developer/Xcode/DerivedData/HelloWorld-gtohxtdxbqefxmfhnapuhbzcilds/Build/Products/Debug

デバッグ実行中は、上記のようになにがしかの一時ディレクトリのようなところに実行ファイルが作られます。

問題は「リリース用はどこ?」ですが、Productメニュー→BuildとかRunとかでは作られずに、Product→Archiveで作られます。
Archiveを選ぶとArchiveの一覧が表示されて、Distribute Content→Build Products→Nextで保存先を聞かれるので保存先・保存フォルダ名を指定してExportボタンを押します。
保存先(エクスポート先)には保存フォルダ名/Product/usr/local/bin/というフォルダ階層が作られて、その中にコマンドツールが入ります。

めんどくせーっすね。
ほんとかな。

kabeyakabeya
  1. プロジェクトの直下に「bin」フォルダを作成します。
  2. Build Phasesで「Copy Files」を表示し、
  • Destination: Absolute Path を選択する
  • Path: ${PROJECT_DIR}/bin と入力する
  • Copy only when installingのチェックをオフにする
  • 一番下のリストで+ボタンを押して、表示されるツリーから実行ファイルを選択して「Add」する

で、追加したbinフォルダの中に実行ファイルがコピーされます。

kabeyakabeya

追加したbinフォルダの中に実行ファイルがコピーされます。

これでコピーされるんですが、編集・ビルドを繰り返しているうちに何かの拍子で、コマンドプロンプトから実行した際に「zsh: killed」が出るようになり実行できなくなります。

なぜかはよく分かりませんが、いったんrmで削除してリビルドで再生成すると実行できるようになります。
何かのフラグが落ちるとかそういうことなんでしょうか。