447db36d6e
changed Parameter expansion to use the convention already in this pluging. Also surrounded application path in quotes, just incase.
191 lines
5.4 KiB
Bash
191 lines
5.4 KiB
Bash
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]}"
|
|
active_path=$(xcode-select -p)
|
|
active_path=${active_path%%/Contents/Developer*}
|
|
open -a "${active_path}" "${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
|
|
}
|