################################################################################ ## File: Install-Xcode.ps1 ## Desc: Install Xcode ################################################################################ $ErrorActionPreference = "Stop" Import-Module "$env:HOME/image-generation/helpers/Common.Helpers.psm1" Import-Module "$env:HOME/image-generation/helpers/Xcode.Installer.psm1" -DisableNameChecking $os = Get-OSVersion $arch = Get-Architecture [Array]$xcodeVersions = (Get-ToolsetContent).xcode.$arch.versions Write-Host $xcodeVersions $defaultXcode = (Get-ToolsetContent).xcode.default [Array]::Reverse($xcodeVersions) $threadCount = "5" Write-Host "Installing Xcode versions..." $xcodeVersions | ForEach-Object -ThrottleLimit $threadCount -Parallel { $ErrorActionPreference = "Stop" Import-Module "$env:HOME/image-generation/helpers/Common.Helpers.psm1" Import-Module "$env:HOME/image-generation/helpers/Xcode.Installer.psm1" -DisableNameChecking Install-XcodeVersion -Version $_.version -LinkTo $_.link -Sha256Sum $_.sha256 Confirm-XcodeIntegrity -Version $_.link } $xcodeVersions | ForEach-Object { Approve-XcodeLicense -Version $_.link } Write-Host "Configuring Xcode versions..." $xcodeVersions | ForEach-Object { Write-Host "Configuring Xcode $($_.link) ..." Invoke-XcodeRunFirstLaunch -Version $_.link Install-XcodeAdditionalSimulatorRuntimes -Version $_.link -Arch $arch -Runtimes $_.install_runtimes if (($_.link -match '^(\d+)\.(\d+)$') -and ([int]$matches[1] -ge 26)) { Install-XcodeAdditionalComponents -Version $_.link } } # Update dyld shared cache for the latest stable Xcode version if ((-not $os.IsSonoma)) { Update-DyldCache -XcodeVersions $xcodeVersions } Invoke-XcodeRunFirstLaunch -Version $defaultXcode Write-Host "Configuring Xcode symlinks..." $xcodeVersions | ForEach-Object { Build-XcodeSymlinks -Version $_.link -Symlinks $_.symlinks # Skip creating symlink to install multiple releases of the same Xcode version side-by-side if ($_."skip-symlink" -ne "true") { Build-ProvisionatorSymlink -Version $_.link } } Write-Host "Rebuilding Launch Services database ..." $xcodeVersions | ForEach-Object { Initialize-XcodeLaunchServicesDb -Version $_.link } Write-Host "Setting default Xcode to $defaultXcode" Switch-Xcode -Version $defaultXcode New-Item -Path "/Applications/Xcode.app" -ItemType SymbolicLink -Value (Get-XcodeRootPath -Version $defaultXcode) | Out-Null Write-Host "Setting environment variables 'XCODE__DEVELOPER_DIR'" Set-XcodeDeveloperDirEnvironmentVariables -XcodeList $xcodeVersions.link