need to test

This commit is contained in:
Maxim Lobanov
2020-10-31 18:41:04 +03:00
parent 14a848397e
commit b49a705f6b
9 changed files with 245 additions and 222 deletions

View File

@@ -0,0 +1,160 @@
Import-Module "$PSScriptRoot/Xcode.Helpers.psm1"
function Install-XcodeVersion {
param(
[Parameter(Mandatory)]
[string]$Version,
[Parameter(Mandatory)]
[string]$LocalLink
)
$xcodeDownloadDirectory = "$env:HOME/Library/Caches/XcodeInstall"
$xcodeTargetPath = Get-XcodeRootPath -Version $LocalLink
Push-Location $xcodeDownloadDirectory
Invoke-DownloadXcodeArchive -Version $Version
Expand-XcodeXipArchive -DownloadDirectory $xcodeDownloadDirectory -TargetPath $xcodeTargetPath
Confirm-XcodeIntegrity -XcodeRootPath $xcodeTargetPath
Approve-XcodeLicense -XcodeRootPath $xcodeTargetPath
Get-ChildItem $xcodeDownloadDirectory | Remove-Item -Force
}
function Invoke-DownloadXcodeArchive {
param(
[Parameter(Mandatory)]
[string]$Version
)
$resolvedVersion = Resolve-ExactXcodeVersion -Version $Version
if (-not $resolvedVersion) {
throw "Version '$Version' can't be matched to any available version"
}
# TO-DO: Consider replacing of xcversion with own implementation
Write-Host "Downloading Xcode $resolvedVersion"
xcversion install "$resolvedVersion" --no-install
}
function Resolve-ExactXcodeVersion {
param(
[Parameter(Mandatory)]
[string]$Version
)
# TO-DO
return $Version
}
function Expand-XcodeXipArchive {
param(
[Parameter(Mandatory)]
[string]$DownloadDirectory,
[Parameter(Mandatory)]
[string]$TargetPath
)
$xcodeXipPath = Get-ChildItem -Path $DownloadDirectory -Filter "Xcode_*.xip" | Select-Object -First 1
Write-Host "Extracting Xcode from '$xcodeXipPath'"
Push-Location $DownloadDirectory
xip -x $xcodeXipPath
Pop-Location
if (Test-Path "$DownloadDirectory/Xcode-beta.app") {
Write-Host "Renaming Xcode-beta.app to Xcode.app"
Rename-File -Path "$DownloadDirectory/Xcode-beta.app" -NewName "Xcode.app"
}
if (-not (Test-Path "$DownloadDirectory/Xcode.app")) {
throw "XIP archive '$xcodeXipPath' doesn't contain 'Xcode.app'"
}
Write-Host "Moving '$DownloadDirectory/Xcode.app' to '$TargetPath'"
Move-Item -Path "$DownloadDirectory/Xcode.app" -Destination $TargetPath
}
function Confirm-XcodeIntegrity {
param(
[Parameter(Mandatory)]
[string]$XcodeRootPath
)
if (Test-XcodeStableRelease -XcodeRootPath $XcodeRootPath) {
spctl --assess --raw $XcodeRootPath
}
}
function Approve-XcodeLicense {
param(
[Parameter(Mandatory)]
$XcodeRootPath
)
$xcodeBuildPath = Get-XcodeToolPath -XcodeRootPath $XcodeRootPath -ToolName "xcodebuild"
sudo $xcodeBuildPath -license accept
}
function Install-XcodeAdditionalPackages {
param(
[Parameter(Mandatory)]
[string]$Version
)
Write-Host "Installing additional packages for Xcode $Version..."
$xcodeRootPath = Get-XcodeRootPath -Version $Version
$packages = Get-ChildItem -Path "$xcodeRootPath/Contents/Resources/Packages" -Filter "*.pkg" -Name -File
$packages | ForEach-Object { & sudo installer -pkg $_ -target / -allowUntrusted }
}
function Invoke-XcodeRunFirstLaunch {
param(
[Parameter(Mandatory)]
[string]$Version
)
if ($Version.StartsWith("8.") -or $Version.StartsWith("9.")) {
return
}
Write-Host "Running 'runFirstLaunch' for Xcode $Version..."
$xcodeRootPath = Get-XcodeToolPath -Version $Version -ToolName "xcodebuild"
& sudo $xcodeRootPath -runFirstLaunch
}
function Build-XcodeSymlinks {
param(
[Parameter(Mandatory)]
[string]$Version,
[Parameter(Mandatory)]
[string[]]$Symlinks
)
$sourcePath = Get-XcodeRootPath -Version $Version
$Symlinks | ForEach-Object {
$targetPath = Get-XcodeRootPath -Version $_
Write-Host "Creating symlink: '$targetPath' -> '$sourcePath'"
New-Item -Path $targetPath -ItemType SymbolicLink -Value $sourcePath
}
}
function Build-ProvisionatorSymlink {
param(
[Parameter(Mandatory)]
[string]$Version
)
$sourcePath = Get-XcodeRootPath -Version $Version
$versionInfo = Get-XcodeVersionInfo -XcodeRootPath $sourcePath
$targetVersion = [SemVer]::Parse($versionInfo.Version).ToString()
$targetPath = Get-XcodeRootPath -Version $targetVersion
if ($sourcePath -ne $targetPath) {
Write-Host "Creating provisionator symlink: '$targetPath' -> '$sourcePath'"
New-Item -Path $targetPath -ItemType SymbolicLink -Value $sourcePath
}
}
function Set-XcodeDeveloperDirEnvironmentVariables {
# TO-DO
}