Last active
July 4, 2019 01:02
-
-
Save justin/9e54defcbac55410e72e56a78f5f9629 to your computer and use it in GitHub Desktop.
Check for the existence of an .xcoderc file in the root of a directory and attempt to switch to that Xcode version + update Carthage
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/zsh | |
# | |
# Check for the existence of an .xcoderc in the root of a project and update the DEVELOPER_DIR | |
# to point to that specific version of Xcode. Update Carthage dependencies as well. | |
# | |
# This is useful for all the switching between Xcode 10.x and 11.x as I am doing presently. | |
# | |
# Usage: | |
# xcode_switch [--no-bootstrap] [version_number] | |
# | |
# --no-bootstrap skips the Carthage boostrap phase. | |
readonly SOURCE_DIR=$( pwd ) | |
local show_help | |
local skip_bootstrap | |
zparseopts -E -D -A opts h -help -no-bootstrap || exit 1 | |
(( ${+opts[-h]} + ${+opts[--help]} )) && show_help="1" | |
(( ${+opts[--no-bootstrap]} )) && skip_bootstrap="1" | |
if [[ $show_help ]]; then | |
echo "Usage: xcode_switch [--no-bootstrap] [version_number]" | |
exit 1 | |
fi | |
local requested_version=${1} | |
if [[ -z $requested_version ]]; then | |
# Check if the .xcoderc file exists in the directory we are in, otherwise exit. | |
if ! [[ -f .xcoderc ]]; then | |
echo "Can't find an '.xcoderc' in this directory." | |
echo "DEVELOPER_DIR is currently: $(echo $DEVELOPER_DIR)" | |
echo "swift version is currently: $(swift -version)" | |
exit 0 | |
fi | |
requested_version=$(cat .xcoderc) | |
fi | |
local requested_version_path=`mdfind "kMDItemCFBundleIdentifier == 'com.apple.dt.Xcode' && kMDItemVersion == '$requested_version'"` | |
if [ -z $requested_version_path ]; then | |
echo "Can't find installed version of Xcode $requested_version." | |
exit 1 | |
fi | |
echo "Switching to Xcode ${requested_version} at $requested_version_path." | |
# This isn't set globally. Just for this session. | |
export DEVELOPER_DIR="$requested_version_path" | |
echo "DEVELOPER_DIR is currently: $(echo $DEVELOPER_DIR)" | |
echo "swift version is currently: $(swift -version)" | |
echo ${requested_version} > "$SOURCE_DIR/.xcoderc" | |
if [[ -f Cartfile ]]; then | |
carthage_symlinked_dir="$SOURCE_DIR/Carthage" | |
versioned_carthage_dir="$SOURCE_DIR/Carthage-${requested_version}" | |
echo "Symlinking ${versioned_carthage_dir} to ${carthage_symlinked_dir}" | |
mkdir -p "$versioned_carthage_dir" | |
rm -rf $carthage_symlinked_dir | |
ln -sf "$versioned_carthage_dir" "Carthage" | |
if [[ $skip_bootstrap ]]; then | |
exit 0 | |
fi | |
echo "Bootstrapping Carthage for new Xcode and Swift versions." | |
carthage bootstrap --cache-builds --platform ios || exit 1 | |
fi | |
exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi @justin, just to tell you that brand new package has been released doing this (if you have a JS environment): https://www.npmjs.com/package/xcoderc