Cla*_*lis 5 bash terminal xcode
从终端打开 Xcode 项目很简单:
open Foo.xcodeproj/
但这只是打开项目并恢复其之前的状态UserInterfaceState.xcuserstate- 因此它只是打开您正在编辑的最后一个活动文件。
有没有办法打开 Xcode 项目并指定它应该打开到哪个文件?
我尝试过的:
.xcuserstate- 噩梦,不要这样做。open Foo/Foo.xcodeproj/then有时open Foo/Sources/main.swift会起作用,但并非总是如此。(如果您刚刚生成项目并执行此操作,它将打开该项目,然后在单独的窗口中打开该文件。)还有其他想法吗?
一位名叫 Mike 的 Xcode 工程师向我指出了loadedXcode 的属性workspace document脚本类的属性。通过轮询,我们可以等到 Xcode 完成加载项目(包括加载编辑器窗格),然后再要求它打开文件。这可以让我们在项目窗口中可靠地打开文件。
这是xopen我写的脚本:
#!/bin/bash\n\nshopt -s nullglob\n\nsourceFile="$1"\ncase "$sourceFile" in\n /*) ;;\n *) sourceFile="$PWD"/"$sourceFile" ;;\nesac\n\nprojectDir="$sourceFile"\nwhile [[ $projectDir = */* ]]; do\n projectDir="${projectDir%/*}"\n candidates=("$projectDir"/*.xcodeproj)\n candidate="${candidates[0]}"\n if [[ "$candidate" != "" ]]; then\n jPath="$candidate"\n fi\ndone\n\nif [[ "$jPath" = "" ]]; then\n echo 1>&2 "error: couldn\'t find .xcodeproj in any parent directory"\n exit 1\nfi\n\nexec osascript - "$jPath" "$sourceFile" <<EOF\non run argv\n set jPath to item 1 of argv\n set sourceFile to item 2 of argv\n tell app "Xcode"\n set wsDoc to (open jPath)\n set waitCount to 0\n repeat until wsDoc\'s loaded or waitCount \xe2\x89\xa5 20\n set waitCount to waitCount + 1\n delay 1\n end repeat\n if wsDoc\'s loaded then\n open sourceFile\n end if\n end tell\nend run\nEOF\nRun Code Online (Sandbox Code Playgroud)\n\n该脚本使用 shell 从源文件(作为命令行参数给出)遍历目录树,直到找到包含 Xcode 项目包的目录。然后它将项目的路径和源文件的路径传递给 AppleScript。AppleScript 要求 Xcode 打开项目。如果 Xcode 已经打开了该项目,它只会将现有项目窗口置于前面。
\n\n接下来,该脚本轮询 Xcode,直到报告工作区文档已加载,或者直到 20 秒过去。
\n\n最后,如果加载了工作区文档,它会要求 Xcode 打开源文件。Xcode 将在现有项目窗口的编辑器中打开源文件。
\n