Open3
CI/CDで Swift を使いたいのでなんとかする
Swift で Shell コマンドを実行したい
import Foundation
// - seealso: https://stackoverflow.com/a/50035059/18519539
@discardableResult // Add to suppress warnings when you don't want/need a result
func safeShell(_ command: String) throws -> String {
let task = Process()
let pipe = Pipe()
task.standardOutput = pipe
task.standardError = pipe
task.arguments = ["-c", command]
task.executableURL = URL(fileURLWithPath: "/bin/zsh") //<--updated
task.standardInput = nil
try task.run() //<--updated
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output = String(data: data, encoding: .utf8)!
return output
}
使い方
// 戻り値を使用しない場合
try safeShell("git tag v10.99.0")
// 戻り値を使用する場合
let result = try safeShell("ls")
print(result)
Ruby(具体的には fastlane )から Swiftを実行したい
lane :test do
system("swift hello.swift")
end
Swift ファイルを実行するときに変数を渡したい
環境変数で渡す
呼び出し元
lane :test do
system("swift hello.swift")
end
KEY=TEST bundle exec fastlane test
呼び出される側
let envArgs = ProcessInfo.processInfo.environment
precondition(envArgs["TAG"] != nil) // 必須の環境変数があればここでチェック
let value = envArgs["KEY"]!
print(value) // test
引数で渡す
呼び出し元
lane :test do
system("swift hello.swift test")
end
bundle exec fastlane test
呼び出される側
precondition(CommandLine.argc == 2) // 引数の数をチェックする(実行する swift ファイル自体も含まれる)
let result = CommandLine.arguments[1]
print(result) // test