SourceTree から Xcode-Beta を開けるようにする。

SourceTree

先日に SourceTree から Xcode のプロジェクトやワークスペースを簡単に開けるカスタムスクリプトを作成しましたが、正式版とベータ版とを切り替えて開けるようにしたくて、Xcode-Beta で開くスクリプトを作成しました。


先日にこちら で、SourceTree という Git をグラフィカルに操作できるツールで、ここから簡単に Xcode を開くカスタムスクリプトを作るお話をしました。

それを便利に使っていたのですが、Xcode 6.3-Beta1 が登場して、それと合わせて Swift 1.1 から Swift 1.2 になりました。こときの Swift のアップデートはそれほど大きくないながらも、基本部分の言語構文にも手を入れられていて、以前のプロジェクトは正式版で、新しいプロジェクトはベータ版で、選んで開けた方が都合が良くなりました。

そこで、先日作成したカスタムスクリプトを少し改修して、開く Xcode を明示するようにしてみました。

Xcode-Beta で開くカスタムスクリプト

Xcode のベータ版は Xcode 6.3-beta1 であれば、標準では "Xcode-Beta.app" というアプリ名でインストールされるので、NSWorkspaceopenFile:メソッド の代わりにopenFile:withApplication:メソッド を使って、そこに "Xcode-Beta.app" を渡すことで、ベータ版の Xcode でプロジェクトファイルを開きます。

#!/usr/bin/swift

import Cocoa

let xcode = "Xcode-Beta.app"
let info = NSProcessInfo.processInfo()
let arguments = info.arguments as [String]

if let path = arguments.last {

	let fileManager = NSFileManager.defaultManager()
	let open:(String) -> Bool = { NSWorkspace.sharedWorkspace().openFile("\(path)/\($0)", withApplication:xcode) }

	let files = fileManager.contentsOfDirectoryAtPath(path, error:nil) as [String]
	
	let workspaceOnlyFilter:(String) -> Bool = { $0.hasSuffix(".xcworkspace") }
	let projectOnlyFilter:(String) -> Bool = { $0.hasSuffix(".xcodeproj") }
	
	let workspaceFile = files.filter(workspaceOnlyFilter).first
	let projectFile = files.filter(projectOnlyFilter).first
	
	workspaceFile.map { open($0) } ?? projectFile.map { open($0) }
}

これを ~/SourceTree/CustomScript/OpenInXcodeBeta.swift というような名前で保存して、ターミナルで次のコマンドを実行して実行権限を付与すれば、これでスクリプトの準備は完了です。

chmod +x ~/SourceTree/CustomScript/OpenInXcodeBeta.swift

カスタムスクリプトの登録と実行

スクリプトを登録する

スクリプトファイルの準備ができたら、それを SourceTree に登録します。

今回は "Open in Xcode-Beta" という名前で登録しました。

カスタムスクリプトを実行する

カスタムスクリプトを登録できたら、リポジトリの一覧画面や各リポジトリの詳細画面から Custom Action として実行できます。

登録と実行の詳細

カスタムスクリプトの詳しい登録方法や実行方法はこちら で説明してありますので、そちらで確認してください。

正式版とベータ版とを選択して開くには

Xcode のプロジェクトを SourceTree から、正式版とベータ版とを選択して開けるようにしたい場合は、上で紹介した "Xcode-Beta.app" で開くカスタムスクリプトと併せて、"Xcode.app" で開くカスタムスクリプトを作成して使うと実現できます。

両方のスクリプトを SourceTree にカスタムスクリプトとして登録しておいて、Custom Action を実行するときに、それらを選択してあげると、そのスクリプトで指定しておいた方の Xcode でプロジェクトが開かれます。