123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- alias xcb='xcodebuild'
- alias xcdd='rm -rf ~/Library/Developer/Xcode/DerivedData/*'
- alias xcp='xcode-select --print-path'
- alias xcsel='sudo xcode-select --switch'
- # original author: @subdigital
- # source: http://gist.github.com/subdigital/5420709
- function xc {
- local xcode_proj
- xcode_proj=(*.{xcworkspace,xcodeproj}(N))
- if [[ ${#xcode_proj} -eq 0 ]]; then
- echo "No xcworkspace/xcodeproj file found in the current directory."
- return 1
- else
- echo "Found ${xcode_proj[1]}"
- open "${xcode_proj[1]}"
- fi
- }
- # "XCode-SELect by Version" - select Xcode by just version number
- # Uses naming convention:
- # - different versions of Xcode are named Xcode-<version>.app or stored
- # in a folder named Xcode-<version>
- # - the special version name "default" refers to the "default" Xcode.app with no suffix
- function xcselv {
- emulate -L zsh
- if [[ $# == 0 ]]; then
- echo "xcselv: error: no option or argument given" >&2
- echo "xcselv: see 'xcselv -h' for help" >&2
- return 1
- elif [[ $1 == "-p" ]]; then
- _omz_xcode_print_active_version
- return
- elif [[ $1 == "-l" ]]; then
- _omz_xcode_list_versions
- return
- elif [[ $1 == "-L" ]]; then
- _omz_xcode_list_versions short
- return
- elif [[ $1 == "-h" ]]; then
- _omz_xcode_print_xcselv_usage
- return 0
- elif [[ $1 == -* && $1 != "-" ]]; then
- echo "xcselv: error: unrecognized option: $1" >&2
- echo "xcselv: see 'xcselv -h' for help" >&2
- return 1
- fi
- # Main case: "xcselv <version>" to select a version
- local version=$1
- local -A xcode_versions
- _omz_xcode_locate_versions
- if [[ -z ${xcode_versions[$version]} ]]; then
- echo "xcselv: error: Xcode version '$version' not found" >&2
- return 1
- fi
- app="${xcode_versions[$version]}"
- echo "selecting Xcode $version: $app"
- xcsel "$app"
- }
- function _omz_xcode_print_xcselv_usage {
- cat << EOF >&2
- Usage:
- xcselv <version>
- xcselv [options]
- Options:
- <version> set the active Xcode version
- -h print this help message and exit
- -p print the active Xcode version
- -l list installed Xcode versions (long human-readable form)
- -L list installed Xcode versions (short form, version names only)
- EOF
- }
- # Parses the Xcode version from a filename based on our conventions
- # Only meaningful when called from other _omz_xcode functions
- function _omz_xcode_parse_versioned_file {
- local file=$1
- local basename=${app:t}
- local dir=${app:h}
- local parent=${dir:t}
- #echo "parent=$parent basename=$basename verstr=$verstr ver=$ver" >&2
- local verstr
- if [[ $parent == Xcode* ]]; then
- if [[ $basename == "Xcode.app" ]]; then
- # "Xcode-<version>/Xcode.app" format
- verstr=$parent
- else
- # Both file and parent dir are versioned. Reject.
- return 1;
- fi
- elif [[ $basename == Xcode*.app ]]; then
- # "Xcode-<version>.app" format
- verstr=${basename:r}
- else
- # Invalid naming pattern
- return 1;
- fi
- local ver=${verstr#Xcode}
- ver=${ver#[- ]}
- if [[ -z $ver ]]; then
- # Unversioned "default" installation location
- ver="default"
- fi
- print -- "$ver"
- }
- # Print the active version, using xcselv's notion of versions
- function _omz_xcode_print_active_version {
- emulate -L zsh
- local -A xcode_versions
- local versions version active_path
- _omz_xcode_locate_versions
- active_path=$(xcode-select -p)
- active_path=${active_path%%/Contents/Developer*}
- versions=(${(kni)xcode_versions})
- for version ($versions); do
- if [[ "${xcode_versions[$version]}" == $active_path ]]; then
- printf "%s (%s)\n" $version $active_path
- return
- fi
- done
- printf "%s (%s)\n" "<unknown>" $active_path
- }
- # Locates all the installed versions of Xcode on this system, for this
- # plugin's internal use.
- # Populates the $xcode_versions associative array variable
- # Caller should local-ize $xcode_versions with `local -A xcode_versions`
- function _omz_xcode_locate_versions {
- emulate -L zsh
- local -a app_dirs
- local app_dir apps app xcode_ver
- # In increasing precedence order:
- app_dirs=(/Applications $HOME/Applications)
- for app_dir ($app_dirs); do
- apps=( $app_dir/Xcode*.app(N) $app_dir/Xcode*/Xcode.app(N) )
- for app ($apps); do
- xcode_ver=$(_omz_xcode_parse_versioned_file $app)
- if [[ $? != 0 ]]; then
- continue
- fi
- xcode_versions[$xcode_ver]=$app
- done
- done
- }
- function _omz_xcode_list_versions {
- emulate -L zsh
- local -A xcode_versions
- _omz_xcode_locate_versions
- local width=1 width_i versions do_short=0
- if [[ $1 == "short" ]]; then
- do_short=1
- fi
- versions=(${(kni)xcode_versions})
- for version ($versions); do
- if [[ $#version > $width ]]; then
- width=$#version;
- fi
- done
- for version ($versions); do
- if [[ $do_short == 1 ]]; then
- printf "%s\n" $version
- else
- printf "%-${width}s -> %s\n" "$version" "${xcode_versions[$version]}"
- fi
- done
- }
- function simulator {
- local devfolder
- devfolder="$(xcode-select -p)"
- # Xcode ≤ 5.x
- if [[ -d "${devfolder}/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone Simulator.app" ]]; then
- open "${devfolder}/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone Simulator.app"
- # Xcode ≥ 6.x
- elif [[ -d "${devfolder}/Applications/iOS Simulator.app" ]]; then
- open "${devfolder}/Applications/iOS Simulator.app"
- # Xcode ≥ 7.x
- else
- open "${devfolder}/Applications/Simulator.app"
- fi
- }
|