From e03812a6b746cc4ce951c6bcf61e90d1c26699fd Mon Sep 17 00:00:00 2001 From: Maxim Lobanov Date: Thu, 22 Oct 2020 18:01:14 +0300 Subject: [PATCH] xcode-tools --- images/macos/provision/core/xcode-tools.sh | 51 ++++-------------- images/macos/provision/utils/xcode-utils.sh | 58 +++++++++++++++------ images/macos/tests/Xcode.Tests.ps1 | 4 ++ images/macos/toolsets/toolset-10.15.json | 16 +++--- 4 files changed, 65 insertions(+), 64 deletions(-) diff --git a/images/macos/provision/core/xcode-tools.sh b/images/macos/provision/core/xcode-tools.sh index ebd6e43a3..d9f33fe92 100755 --- a/images/macos/provision/core/xcode-tools.sh +++ b/images/macos/provision/core/xcode-tools.sh @@ -14,6 +14,7 @@ if [ -z $XCODE_INSTALL_USER ] || [ -z $XCODE_INSTALL_PASSWORD ]; then fi XCODE_COUNT=$(get_toolset_value '.xcode.versions | length') +XCODE_LOCAL_LIST=$(get_toolset_value '.xcode.versions[].localVersion') DEFAULT_XCODE_VERSION=$(get_toolset_value '.xcode.default') WORK_DIR="${HOME}/Library/Caches/XcodeInstall" @@ -25,64 +26,33 @@ for ((XCODE_INDEX=0; XCODE_INDEX 11.3.1, 11.2 -> 11.2.1 -if is_Catalina; then - ln -sf /Applications/Xcode_11.2.1.app /Applications/Xcode_11.2.app - ln -sf /Applications/Xcode_11.3.1.app /Applications/Xcode_11.3.app -fi - echo "Setting Xcode ${DEFAULT_XCODE_VERSION} as default" sudo xcode-select -s "/Applications/Xcode_${DEFAULT_XCODE_VERSION}.app/Contents/Developer" @@ -95,6 +65,5 @@ sudo /usr/sbin/DevToolsSecurity --enable echo "Setting environment variables 'XCODE__DEVELOPER_DIR'" setXcodeDeveloperDirVariables -# Cleanup echo "Doing cleanup. Emptying ${WORK_DIR}..." rm -rf "$WORK_DIR" diff --git a/images/macos/provision/utils/xcode-utils.sh b/images/macos/provision/utils/xcode-utils.sh index 729b59d94..5c5e871bc 100644 --- a/images/macos/provision/utils/xcode-utils.sh +++ b/images/macos/provision/utils/xcode-utils.sh @@ -1,15 +1,14 @@ -createXamarinProvisionatorSymlink() { +downloadXcode() { local XCODE_VERSION="$1" - local FULL_VERSION=$(echo "${XCODE_VERSION}.0.0" | cut -d'.' -f 1,2,3) - # temporary trick for 12.0.1 - if [[ $XCODE_VERSION == "12" ]]; then - FULL_VERSION="12.0.1" + VERSION_TO_INSTALL=$(resolveLatestXcodeVersion "$XCODE_VERSION") + if [[ -z "$VERSION_TO_INSTALL" ]]; then + echo "No versions were found matching $XCODE_VERSION" + exit 1 fi - if [ $FULL_VERSION != $XCODE_VERSION ]; then - ln -sf "/Applications/Xcode_${XCODE_VERSION}.app" "/Applications/Xcode_${FULL_VERSION}.app" - fi + echo "Downloading Xcode $VERSION_TO_INSTALL ..." + xcversion install "$VERSION_TO_INSTALL" --no-install } resolveLatestXcodeVersion() { @@ -36,7 +35,7 @@ validateXcodeIntegrity() { spctl --assess --raw "${WORKING_DIR}/Xcode.app" } -approveLicense() { +approveXcodeLicense() { local XCODE_VERSION="$1" sudo "/Applications/Xcode_${XCODE_VERSION}.app/Contents/Developer/usr/bin/xcodebuild" -license accept } @@ -52,6 +51,24 @@ runFirstLaunch() { sudo "/Applications/Xcode_${XCODE_VERSION}.app/Contents/Developer/usr/bin/xcodebuild" -runFirstLaunch } +runFirstLaunchXcodeList() { + local XCODE_LIST=("$@") + if is_Less_Catalina; then + echo "Install additional packages for Xcode ${XCODE_LIST[0]}" + installAdditionalPackages ${XCODE_LIST[0]} + fi + + for XCODE_VERSION in "${XCODE_LIST[@]}" + do + if [[ $XCODE_VERSION == 8* || $XCODE_VERSION == 9* ]]; then + continue + fi + + echo "Running 'runFirstLaunch' for Xcode ${XCODE_VERSION}..." + runFirstLaunch $XCODE_VERSION + done +} + setXcodeDeveloperDirVariables() { stable_xcode_versions=$(get_xcode_list_from_toolset | tr " " "\n" | grep -v "beta") major_versions=($(echo ${stable_xcode_versions[@]} | tr " " "\n" | cut -d '.' -f 1 | uniq)) @@ -65,8 +82,7 @@ setXcodeDeveloperDirVariables() { extractXcodeXip() { local WORKING_DIR="$1" - local XCODE_VERSION="$2" - XCODE_XIP="${WORKING_DIR}/Xcode_${XCODE_VERSION// /_}.xip" + local XCODE_XIP=$(find "$WORKING_DIR" -name "Xcode_*.xip" | head -n1) open -W $XCODE_XIP @@ -80,9 +96,21 @@ extractXcodeXip() { fi } -createBetaSymlink() { - local XCODE_VERSION=$1 - if [[ $XCODE_VERSION =~ 1[01].* ]] || [[ $XCODE_VERSION == "12.0" ]]; then - ln -sf "/Applications/Xcode_${XCODE_VERSION}.app" "/Applications/Xcode_${XCODE_VERSION}_beta.app" +createXcodeSymlinks() { + local SOURCE_XCODE=$1 && shift + local SYMLINKS=($@) + + + for TARGET_XCODE in "${SYMLINKS[@]}" + do + echo "Creating symlink '/Applications/Xcode_${SOURCE_XCODE}.app' -> '/Applications/Xcode_${TARGET_XCODE}.app'" + ln -sf "/Applications/Xcode_${SOURCE_XCODE}.app" "/Applications/Xcode_${TARGET_XCODE}.app" + done + + # TO-DO, symlink is not correct + local FULL_XCODE_VERSION=$(echo "${XCODE_VERSION}.0.0" | cut -d'.' -f 1,2,3) + if [ $FULL_XCODE_VERSION != $SOURCE_XCODE ]; then + echo "Creating symlink '/Applications/Xcode_${SOURCE_XCODE}.app' -> '/Applications/Xcode_${FULL_XCODE_VERSION}.app'" + ln -sf "/Applications/Xcode_${SOURCE_XCODE}.app" "/Applications/Xcode_${FULL_XCODE_VERSION}.app" fi } \ No newline at end of file diff --git a/images/macos/tests/Xcode.Tests.ps1 b/images/macos/tests/Xcode.Tests.ps1 index 250c8d8a6..fd12db68f 100644 --- a/images/macos/tests/Xcode.Tests.ps1 +++ b/images/macos/tests/Xcode.Tests.ps1 @@ -13,6 +13,10 @@ Describe "Xcode" { (Get-CommandResult "xcodebuild -version").Output | Should -BeLike "Xcode $DEFAULT_XCODE*" } + It "Xcode.app points to default Xcode" { + + } + # Cut "_beta" postfix for test cases $testCases = $XCODE_VERSIONS | ForEach-Object { @{XcodeVersion = $_.Split("_")[0] } } diff --git a/images/macos/toolsets/toolset-10.15.json b/images/macos/toolsets/toolset-10.15.json index f7d7c6aeb..1425c30ae 100644 --- a/images/macos/toolsets/toolset-10.15.json +++ b/images/macos/toolsets/toolset-10.15.json @@ -5,15 +5,15 @@ { "localVersion": "12.2", "version": "12.2_beta" }, { "localVersion": "12.1", "version": "12.1_GM_seed" }, { "localVersion": "12.0", "version": "12.0.1", "symlinks": ["12"] }, - { "localVersion": "11.7", "version": "11.7" }, - { "localVersion": "11.6", "version": "11.6" }, - { "localVersion": "11.5", "version": "11.5" }, - { "localVersion": "11.4", "version": "11.4.1" }, - { "localVersion": "11.3", "version": "11.3.1", "symlinks": ["11.3"] }, - { "localVersion": "11.2", "version": "11.2.1", "symlinks": ["11.2"] }, - { "localVersion": "11.1", "version": "11.1" }, + { "localVersion": "11.7", "version": "11.7", "symlinks": ["11.7_beta"] }, + { "localVersion": "11.6", "version": "11.6", "symlinks": ["11.6_beta"] }, + { "localVersion": "11.5", "version": "11.5", "symlinks": ["11.5_beta"] }, + { "localVersion": "11.4", "version": "11.4.1", "symlinks": ["11.4_beta"] }, + { "localVersion": "11.3", "version": "11.3.1", "symlinks": ["11.3", "11.3_beta"] }, + { "localVersion": "11.2", "version": "11.2.1", "symlinks": ["11.2", "11.2_beta"] }, + { "localVersion": "11.1", "version": "11.1", "symlinks": ["11.1_beta"] }, { "localVersion": "11.0", "version": "11", "symlinks": ["11"] }, - { "localVersion": "10.3", "version": "10.3" } + { "localVersion": "10.3", "version": "10.3", "symlinks": ["10.3_beta"] } ] }, "xamarin": {