Class: Macinbox::Actions::CheckMacosVersions

Inherits:
Object
  • Object
show all
Defined in:
lib/macinbox/actions/check_macos_versions.rb

Instance Method Summary collapse

Constructor Details

#initialize(opts) ⇒ CheckMacosVersions

Returns a new instance of CheckMacosVersions.

Raises:



10
11
12
13
14
15
16
# File 'lib/macinbox/actions/check_macos_versions.rb', line 10

def initialize(opts)
  @installer_app     = opts[:installer_path]  or raise ArgumentError.new(":installer_path not specified")

  @collector         = opts[:collector]       or raise ArgumentError.new(":collector not specified")

  raise Macinbox::Error.new("Installer app not found") unless File.exist? @installer_app
end

Instance Method Details

#runObject

Raises:



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/macinbox/actions/check_macos_versions.rb', line 18

def run
  install_info_plist = "#{@installer_app}/Contents/SharedSupport/InstallInfo.plist"
  raise Macinbox::Error.new("InstallInfo.plist not found in installer app bundle") unless File.exist? install_info_plist

  installer_os_version = Macinbox::OSVersion.new(Task.backtick %W[ /usr/libexec/PlistBuddy -c #{'Print :System\ Image\ Info:version'} #{install_info_plist} ])
  Logger.info "Installer macOS version detected: #{installer_os_version}" if $verbose

  host_os_version = Macinbox::OSVersion.new(Task.backtick %W[ /usr/bin/sw_vers -productVersion ])
  Logger.info "Host macOS version detected: #{host_os_version}" if $verbose

  unless installer_os_version.is_sierra_or_later?
    raise Macinbox::Error.new("Installer macOS version is not supported: #{installer_os_version}")
  end

  if (host_os_version.is_catalina_or_later? && installer_os_version.is_mojave_or_earlier?) ||
     (host_os_version.is_mojave_or_earlier? && installer_os_version.is_catalina_or_later?)
    raise Macinbox::Error.new("macOS #{host_os_version} cannot install macOS #{installer_os_version}")
  end

  if installer_os_version.major != host_os_version.major || installer_os_version.minor != host_os_version.minor
    Logger.error "Warning: host OS version (#{host_os_version}) and installer OS version (#{installer_os_version}) do not match"
  end

  installer_os_version
end