Skip to content

Commit 4813b3e

Browse files
authored
Merge pull request #123 from Ziugy/develop
Enables support on macOS for `Find-UnitySetupInstaller`.
2 parents d845593 + 9702380 commit 4813b3e

File tree

1 file changed

+53
-21
lines changed

1 file changed

+53
-21
lines changed

UnitySetup/UnitySetup.psm1

Lines changed: 53 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -272,36 +272,52 @@ function Find-UnitySetupInstaller {
272272
[UnitySetupComponent] $Components = [UnitySetupComponent]::All
273273
)
274274

275-
$unitySetupRegEx = "^(.+)\/([a-z0-9]+)\/Windows64EditorInstaller\/UnitySetup64-(\d+)\.(\d+)\.(\d+)([fpb])(\d+).exe$"
275+
$currentOS = Get-OperatingSystem
276+
switch ($currentOS) {
277+
([OperatingSystem]::Windows) {
278+
$unitySetupRegEx = "^(.+)\/([a-z0-9]+)\/Windows64EditorInstaller\/UnitySetup64-(\d+)\.(\d+)\.(\d+)([fpb])(\d+).exe$"
279+
$targetSupport = "TargetSupportInstaller"
280+
$installerExtension = "exe"
281+
}
282+
([OperatingSystem]::Linux) {
283+
throw "Find-UnitySetupInstaller has not been implemented on the Linux platform. Contributions welcomed!";
284+
}
285+
([OperatingSystem]::Mac) {
286+
$unitySetupRegEx = "^(.+)\/([a-z0-9]+)\/MacEditorInstaller\/Unity-(\d+)\.(\d+)\.(\d+)([fpb])(\d+).pkg$"
287+
$targetSupport = "MacEditorTargetInstaller"
288+
$installerExtension = "pkg"
289+
}
290+
}
291+
276292
$knownBaseUrls = @(
277293
"https://download.unity3d.com/download_unity",
278294
"https://netstorage.unity3d.com/unity",
279295
"https://beta.unity3d.com/download"
280296
)
281297

282298
$installerTemplates = @{
283-
[UnitySetupComponent]::Documentation = , "WindowsDocumentationInstaller/UnityDocumentationSetup-$Version.exe";
284-
[UnitySetupComponent]::StandardAssets = , "WindowsStandardAssetsInstaller/UnityStandardAssetsSetup-$Version.exe";
285-
[UnitySetupComponent]::UWP = "TargetSupportInstaller/UnitySetup-UWP-.NET-Support-for-Editor-$Version.exe",
286-
"TargetSupportInstaller/UnitySetup-Metro-Support-for-Editor-$Version.exe";
287-
[UnitySetupComponent]::UWP_IL2CPP = , "TargetSupportInstaller/UnitySetup-UWP-IL2CPP-Support-for-Editor-$Version.exe";
288-
[UnitySetupComponent]::Android = , "TargetSupportInstaller/UnitySetup-Android-Support-for-Editor-$Version.exe";
289-
[UnitySetupComponent]::iOS = , "TargetSupportInstaller/UnitySetup-iOS-Support-for-Editor-$Version.exe";
290-
[UnitySetupComponent]::AppleTV = , "TargetSupportInstaller/UnitySetup-AppleTV-Support-for-Editor-$Version.exe";
291-
[UnitySetupComponent]::Facebook = , "TargetSupportInstaller/UnitySetup-Facebook-Games-Support-for-Editor-$Version.exe";
292-
[UnitySetupComponent]::Linux = , "TargetSupportInstaller/UnitySetup-Linux-Support-for-Editor-$Version.exe";
293-
[UnitySetupComponent]::Mac = "TargetSupportInstaller/UnitySetup-Mac-Support-for-Editor-$Version.exe",
294-
"TargetSupportInstaller/UnitySetup-Mac-Mono-Support-for-Editor-$Version.exe";
295-
[UnitySetupComponent]::Vuforia = , "TargetSupportInstaller/UnitySetup-Vuforia-AR-Support-for-Editor-$Version.exe";
296-
[UnitySetupComponent]::WebGL = , "TargetSupportInstaller/UnitySetup-WebGL-Support-for-Editor-$Version.exe";
297-
[UnitySetupComponent]::Windows_IL2CPP = , "TargetSupportInstaller/UnitySetup-Windows-IL2CPP-Support-for-Editor-$Version.exe";
299+
[UnitySetupComponent]::UWP = "$targetSupport/UnitySetup-UWP-.NET-Support-for-Editor-$Version.$installerExtension",
300+
"$targetSupport/UnitySetup-Metro-Support-for-Editor-$Version.$installerExtension";
301+
[UnitySetupComponent]::UWP_IL2CPP = , "$targetSupport/UnitySetup-UWP-IL2CPP-Support-for-Editor-$Version.$installerExtension";
302+
[UnitySetupComponent]::Android = , "$targetSupport/UnitySetup-Android-Support-for-Editor-$Version.$installerExtension";
303+
[UnitySetupComponent]::iOS = , "$targetSupport/UnitySetup-iOS-Support-for-Editor-$Version.$installerExtension";
304+
[UnitySetupComponent]::AppleTV = , "$targetSupport/UnitySetup-AppleTV-Support-for-Editor-$Version.$installerExtension";
305+
[UnitySetupComponent]::Facebook = , "$targetSupport/UnitySetup-Facebook-Games-Support-for-Editor-$Version.$installerExtension";
306+
[UnitySetupComponent]::Linux = , "$targetSupport/UnitySetup-Linux-Support-for-Editor-$Version.$installerExtension";
307+
[UnitySetupComponent]::Mac = "$targetSupport/UnitySetup-Mac-Support-for-Editor-$Version.$installerExtension",
308+
"$targetSupport/UnitySetup-Mac-Mono-Support-for-Editor-$Version.$installerExtension";
309+
[UnitySetupComponent]::Vuforia = , "$targetSupport/UnitySetup-Vuforia-AR-Support-for-Editor-$Version.$installerExtension";
310+
[UnitySetupComponent]::WebGL = , "$targetSupport/UnitySetup-WebGL-Support-for-Editor-$Version.$installerExtension";
311+
[UnitySetupComponent]::Windows_IL2CPP = , "$targetSupport/UnitySetup-Windows-IL2CPP-Support-for-Editor-$Version.$installerExtension";
298312
}
299313

300-
$currentOS = Get-OperatingSystem
301314
switch ($currentOS) {
302315
([OperatingSystem]::Windows) {
303316
$setupComponent = [UnitySetupComponent]::Windows
304317
$installerTemplates[$setupComponent] = , "Windows64EditorInstaller/UnitySetup64-$Version.exe";
318+
319+
$installerTemplates[[UnitySetupComponent]::Documentation] = , "WindowsDocumentationInstaller/UnityDocumentationSetup-$Version.exe";
320+
$installerTemplates[[UnitySetupComponent]::StandardAssets] = , "WindowsStandardAssetsInstaller/UnityStandardAssetsSetup-$Version.exe";
305321
}
306322
([OperatingSystem]::Linux) {
307323
$setupComponent = [UnitySetupComponent]::Linux
@@ -311,9 +327,12 @@ function Find-UnitySetupInstaller {
311327
}
312328
([OperatingSystem]::Mac) {
313329
$setupComponent = [UnitySetupComponent]::Mac
314-
# TODO: $installerTemplates[$setupComponent] = , "???/UnitySetup64-$Version.exe";
330+
$installerTemplates[$setupComponent] = , "MacEditorInstaller/Unity-$Version.pkg";
315331

316-
throw "Find-UnitySetupInstaller has not been implemented on the Mac platform. Contributions welcomed!";
332+
# Note: These links appear to be unavailable even on Unity's website for 2018.
333+
# StandardAssets appears to work if you select a 2017 version.
334+
$installerTemplates[[UnitySetupComponent]::Documentation] = , "MacDocumentationInstaller/DocumentationSetup-$Version.pkg";
335+
$installerTemplates[[UnitySetupComponent]::StandardAssets] = , "MacStandardAssetsInstaller/StandardAssets-$Version.pkg";
317336
}
318337
}
319338

@@ -370,12 +389,25 @@ function Find-UnitySetupInstaller {
370389
$endpoint = [uri][System.IO.Path]::Combine($baseUrl, $linkComponents[1], $template);
371390
try {
372391
$testResult = Invoke-WebRequest $endpoint -Method HEAD -UseBasicParsing
392+
# For packages on macOS the Content-Length and Last-Modified are returned as an array.
393+
if ($testResult.Headers['Content-Length'] -is [System.Array]) {
394+
$installerLength = [int64]$testResult.Headers['Content-Length'][0]
395+
}
396+
else {
397+
$installerLength = [int64]$testResult.Headers['Content-Length']
398+
}
399+
if ($testResult.Headers['Last-Modified'] -is [System.Array]) {
400+
$lastModified = [System.DateTime]$testResult.Headers['Last-Modified'][0]
401+
}
402+
else {
403+
$lastModified = [System.DateTime]$testResult.Headers['Last-Modified']
404+
}
373405
$result = New-Object UnitySetupInstaller -Property @{
374406
'ComponentType' = $_;
375407
'Version' = $Version;
376408
'DownloadUrl' = $endpoint;
377-
'Length' = [int64]$testResult.Headers['Content-Length'];
378-
'LastModified' = ([System.DateTime]$testResult.Headers['Last-Modified']);
409+
'Length' = $installerLength;
410+
'LastModified' = $lastModified;
379411
}
380412

381413
break

0 commit comments

Comments
 (0)