2017-06-03 14 views
3

から設定され、アクティブファイルが簡単です。編集中の最後のアクティブなファイルです。オープンXcodeプロジェクトと端末からのXcodeプロジェクトを開く、端末

Xcodeプロジェクトを開く方法はありますかはどのファイルを開くべきかを指定していますか?私が試した何

  1. 編集.xcuserstate - 悪夢、それをしません。
  2. 実行中open Foo/Foo.xcodeproj/open Foo/Sources/main.swift のいずれかで動作しますが、必ずしもそうではありません。 (プロジェクトを生成してこれを行うと、プロジェクトが開き、別のウィンドウにファイルが開きます)

他のアイデアをお持ちの場合は、

+0

興味深い問題です。問題は、xibやストーリーボードのように、ロードに時間がかかるファイルでプロジェクトが最後に開いたときに発生します。その場合、Xcodeがxibを読み込んでいる間に、別のプロジェクトファイルを開くように要求すると、新しいファイルが新しいウィンドウで開きます。既存のウィンドウに読み込み中でなければ、既存のウィンドウに新しいファイルを開きます。私はこれをWWDCで質問する質問リストに追加しました。 –

+0

@robmayoffあなたの説明はより正確です.Xcodeが2番目の 'open'が実行されている間に最初のファイルを読み込んでいる場合、2番目のファイルを新しいウィンドウで開きます。それ以外の場合は、既存のエディタで2番目のファイルが開きます。あなたがWWDCで答えを見つけることができたら、本当に感謝しています! 'man open'は' -args'の後にアプリケーションに引数を渡すことができることを示しています。 Xcodeにアクティブなファイルパスを指定するための起動引数があるかどうか尋ねます。 –

答えて

1

Mikeという名前のXcodeエンジニアは、Xcodeのworkspace documentスクリプトクラスのloadedプロパティで私に指摘しました。これをポーリングすることで、Xcodeがプロジェクトの読み込みを完了するまで(エディタペインの読み込みを含む)、ファイルを開くように要求するまで待つことができます。これにより、プロジェクトのウィンドウ内でファイルを確実に開くことができます。

ここで私が書いたxopenスクリプトです:

#!/bin/bash 

shopt -s nullglob 

sourceFile="$1" 
case "$sourceFile" in 
    /*) ;; 
    *) sourceFile="$PWD"/"$sourceFile" ;; 
esac 

projectDir="$sourceFile" 
while [[ $projectDir = */* ]]; do 
    projectDir="${projectDir%/*}" 
    candidates=("$projectDir"/*.xcodeproj) 
    candidate="${candidates[0]}" 
    if [[ "$candidate" != "" ]]; then 
    jPath="$candidate" 
    fi 
done 

if [[ "$jPath" = "" ]]; then 
    echo 1>&2 "error: couldn't find .xcodeproj in any parent directory" 
    exit 1 
fi 

exec osascript - "$jPath" "$sourceFile" <<EOF 
on run argv 
    set jPath to item 1 of argv 
    set sourceFile to item 2 of argv 
    tell app "Xcode" 
    set wsDoc to (open jPath) 
    set waitCount to 0 
    repeat until wsDoc's loaded or waitCount ≥ 20 
     set waitCount to waitCount + 1 
     delay 1 
    end repeat 
    if wsDoc's loaded then 
     open sourceFile 
    end if 
    end tell 
end run 
EOF 

このスクリプトは、それがXcodeプロジェクトを含むディレクトリが見つかるまで(コマンドライン引数として与えられた)ソースファイルからディレクトリツリーを歩いてシェルを使用していますが、パッケージ。次に、パスをプロジェクトに渡し、ソースファイルへのパスをAppleScriptに渡します。 AppleScriptはXcodeにプロジェクトを開くように要求します。 Xcodeに既にプロジェクトが開いている場合は、既存のプロジェクトウィンドウが前面に表示されます。

次に、ワークスペースドキュメントがロードされたことを報告するか、20秒が経過するまで、スクリプトはXcodeをポーリングします。

最後に、ワークスペースドキュメントがロードされている場合、ソースファイルを開くようにXcodeに依頼します。 Xcodeは、既存のプロジェクトウィンドウのエディタでソースファイルを開きます。

+0

非常に良い!この回答を得るためにWWDCを活用してくれてありがとう!帽子はあなたとあなたのおかげで。 –

関連する問題