()
return XCODE_VERSION_CACHE
Returns a tuple of version and build version of installed Xcode.
Returns a tuple of version and build version of installed Xcode.
Returns a tuple of version and build version of installed Xcode .
def XcodeVersion():
  """Returns a tuple of version and build version of installed Xcode."""
  # `xcodebuild -version` output looks like
  #    Xcode 4.6.3
  #    Build version 4H1503
  # or like
  #    Xcode 3.2.6
  #    Component versions: DevToolsCore-1809.0; DevToolsSupport-1806.0
  #    BuildVersion: 10M2518
  # Convert that to ('0463', '4H1503') or ('0326', '10M2518').
  global XCODE_VERSION_CACHE
  if XCODE_VERSION_CACHE:
    return XCODE_VERSION_CACHE
  version = ""
  build = ""
  try:
    version_list = GetStdoutQuiet(['xcodebuild', '-version']).splitlines()
    # In some circumstances xcodebuild exits 0 but doesn't return
    # the right results; for example, a user on 10.7 or 10.8 with
    # a bogus path set via xcode-select
    # In that case this may be a CLT-only install so fall back to
    # checking that version.
    if len(version_list) < 2:
      raise GypError("xcodebuild returned unexpected results")
    version = version_list[0].split()[-1]  # Last word on first line
    build = version_list[-1].split()[-1]   # Last word on last line
  except GypError:  # Xcode not installed so look for XCode Command Line Tools
    version = CLTVersion()  # macOS Catalina returns 11.0.0.0.1.1567737322
    if not version:
      raise GypError("No Xcode or CLT version detected!")
  # Be careful to convert "4.2.3" to "0423" and "11.0.0" to "1100":
  version = version.split(".")[:3]  # Just major, minor, micro
  version[0] = version[0].zfill(2)  # Add a leading zero if major is one digit
  version = ("".join(version) + "00")[:4]  # Limit to exactly four characters
  XCODE_VERSION_CACHE = (version, build)
  return XCODE_VERSION_CACHE
def XcodeVersion ( ) : # `xcodebuild -version` output looks like #    Xcode 4.6.3 #    Build version 4H1503 # or like #    Xcode 3.2.6 #    Component versions: DevToolsCore-1809.0; DevToolsSupport-1806.0 #    BuildVersion: 10M2518 # Convert that to ('0463', '4H1503') or ('0326', '10M2518'). global XCODE_VERSION_CACHE if XCODE_VERSION_CACHE : return XCODE_VERSION_CACHE version = "" build = "" try : version_list = GetStdoutQuiet ( [ 'xcodebuild' , '-version' ] ) . splitlines ( ) # In some circumstances xcodebuild exits 0 but doesn't return # the right results; for example, a user on 10.7 or 10.8 with # a bogus path set via xcode-select # In that case this may be a CLT-only install so fall back to # checking that version. if len ( version_list ) < 2 : raise GypError ( "xcodebuild returned unexpected results" ) version = version_list [ 0 ] . split ( ) [ - 1 ] # Last word on first line build = version_list [ - 1 ] . split ( ) [ - 1 ] # Last word on last line except GypError : # Xcode not installed so look for XCode Command Line Tools version = CLTVersion ( ) # macOS Catalina returns 11.0.0.0.1.1567737322 if not version : raise GypError ( "No Xcode or CLT version detected!" ) # Be careful to convert "4.2.3" to "0423" and "11.0.0" to "1100": version = version . split ( "." ) [ : 3 ] # Just major, minor, micro version [ 0 ] = version [ 0 ] . zfill ( 2 ) # Add a leading zero if major is one digit version = ( "" . join ( version ) + "00" ) [ : 4 ] # Limit to exactly four characters XCODE_VERSION_CACHE = ( version , build ) return XCODE_VERSION_CACHE