Class: RunLoop::Xcode

Inherits:
Object
  • Object
show all
Includes:
Shell
Defined in:
lib/run_loop/xcode.rb

Overview

Note:

All command line tools are run in the context of `xcrun`.

A model of the active Xcode version.

Throughout this class's documentation, there are references to the _active version of Xcode_. The active Xcode version is the one returned by `xcrun xcodebuild`. The current Xcode version can be set using `xcode-select` or overridden using the `DEVELOPER_DIR`.

Constant Summary

Constants included from Shell

Shell::DEFAULT_OPTIONS

Instance Method Summary collapse

Methods included from Shell

run_shell_command, #run_shell_command

Methods included from Encoding

#transliterate

Instance Method Details

#beta?Boolean

Note:

Relies on Xcode beta versions having and app bundle named Xcode-Beta.app

Is this a beta version of Xcode?

Returns:

  • (Boolean)

    True if the Xcode version is beta.



330
331
332
# File 'lib/run_loop/xcode.rb', line 330

def beta?
  developer_dir[/Xcode-[Bb]eta.app/, 0]
end

#developer_dirString

Returns the path to the current developer directory.

From the man pages:

“` $ man xcode-select DEVELOPER_DIR Overrides the active developer directory. When DEVELOPER_DIR is set, its value will be used instead of the system-wide active developer directory. “`

Returns:

  • (String)

    path to current developer directory

Raises:

  • (RuntimeError)

    If path to Xcode.app/Contents/Developer cannot be determined.



350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
# File 'lib/run_loop/xcode.rb', line 350

def developer_dir
  @xcode_developer_dir ||= begin
    if RunLoop::Environment.developer_dir
      path = RunLoop::Environment.developer_dir
    else
      path = xcode_select_path
    end

    if !File.directory?(path)
      raise RuntimeError,
%Q{Cannot determine the active Xcode.  Expected an Xcode here:

#{path}

Check the value of xcode-select:

# Does this resolve to a valid Xcode.app/Contents/Developer path?
$ xcode-select --print-path

Is the DEVELOPER_DIR variable set in your environment?  You would
only use this if you have multiple Xcode's installed.

$ echo $DEVELOPER_DIR

See the man pages for xcrun and xcode-select for details.

$ man xcrun
$ man xcode-select
}
    end
    path
  end
end

#inspectObject

Returns debug String representation



25
26
27
# File 'lib/run_loop/xcode.rb', line 25

def inspect
  to_s
end

#to_sObject

Returns a String representation.



20
21
22
# File 'lib/run_loop/xcode.rb', line 20

def to_s
  "#<Xcode #{version.to_s}>"
end

#v50RunLoop::Version

Returns a version instance for `Xcode 5.0`; used to check for the availability of features and paths to various items on the filesystem.

Returns:



169
170
171
# File 'lib/run_loop/xcode.rb', line 169

def v50
  fetch_version(:v50)
end

#v51RunLoop::Version

Returns a version instance for `Xcode 5.1`; used to check for the availability of features and paths to various items on the filesystem.

Returns:



161
162
163
# File 'lib/run_loop/xcode.rb', line 161

def v51
  fetch_version(:v51)
end

#v60RunLoop::Version

Returns a version instance for `Xcode 6.0`; used to check for the availability of features and paths to various items on the filesystem.

Returns:



153
154
155
# File 'lib/run_loop/xcode.rb', line 153

def v60
  fetch_version(:v60)
end

#v61RunLoop::Version

Returns a version instance for `Xcode 6.1`; used to check for the availability of features and paths to various items on the filesystem.

Returns:



145
146
147
# File 'lib/run_loop/xcode.rb', line 145

def v61
  fetch_version(:v61)
end

#v62RunLoop::Version

Returns a version instance for `Xcode 6.2`; used to check for the availability of features and paths to various items on the filesystem.

Returns:



137
138
139
# File 'lib/run_loop/xcode.rb', line 137

def v62
  fetch_version(:v62)
end

#v63RunLoop::Version

Returns a version instance for `Xcode 6.3`; used to check for the availability of features and paths to various items on the filesystem.

Returns:



129
130
131
# File 'lib/run_loop/xcode.rb', line 129

def v63
  fetch_version(:v63)
end

#v64RunLoop::Version

Returns a version instance for `Xcode 6.4`; used to check for the availability of features and paths to various items on the filesystem.

Returns:



121
122
123
# File 'lib/run_loop/xcode.rb', line 121

def v64
  fetch_version(:v64)
end

#v70RunLoop::Version

Returns a version instance for `Xcode 7.0`; used to check for the availability of features and paths to various items on the filesystem.

Returns:



113
114
115
# File 'lib/run_loop/xcode.rb', line 113

def v70
  fetch_version(:v70)
end

#v71RunLoop::Version

Returns a version instance for `Xcode 7.1`; used to check for the availability of features and paths to various items on the filesystem.

Returns:



105
106
107
# File 'lib/run_loop/xcode.rb', line 105

def v71
  fetch_version(:v71)
end

#v72RunLoop::Version

Returns a version instance for `Xcode 7.2`; used to check for the availability of features and paths to various items on the filesystem.

Returns:



97
98
99
# File 'lib/run_loop/xcode.rb', line 97

def v72
  fetch_version(:v72)
end

#v73RunLoop::Version

Returns a version instance for `Xcode 7.3`; used to check for the availability of features and paths to various items on the filesystem.

Returns:



89
90
91
# File 'lib/run_loop/xcode.rb', line 89

def v73
  fetch_version(:v73)
end

#v80RunLoop::Version

Returns a version instance for `Xcode 8.0`; used to check for the availability of features and paths to various items on the filesystem.

Returns:



81
82
83
# File 'lib/run_loop/xcode.rb', line 81

def v80
  fetch_version(:v80)
end

#v81RunLoop::Version

Returns a version instance for `Xcode 8.1`; used to check for the availability of features and paths to various items on the filesystem.

Returns:



73
74
75
# File 'lib/run_loop/xcode.rb', line 73

def v81
  fetch_version(:v81)
end

#v82RunLoop::Version

Returns a version instance for Xcode 8.2; used to check for the availability of features and paths to various items on the filesystem

Returns:



65
66
67
# File 'lib/run_loop/xcode.rb', line 65

def v82
  fetch_version(:v82)
end

#v83RunLoop::Version

Returns a version instance for Xcode 8.3; used to check for the availability of features and paths to various items on the filesystem

Returns:



57
58
59
# File 'lib/run_loop/xcode.rb', line 57

def v83
  fetch_version(:v83)
end

#v90RunLoop::Version

Returns a version instance for Xcode 9.0; used to check for the availability of features and paths to various items on the filesystem

Returns:



49
50
51
# File 'lib/run_loop/xcode.rb', line 49

def v90
  fetch_version(:v90)
end

#v91RunLoop::Version

Returns a version instance for Xcode 9.1; used to check for the availability of features and paths to various items on the filesystem

Returns:



41
42
43
# File 'lib/run_loop/xcode.rb', line 41

def v91
  fetch_version(:v91)
end

#v92RunLoop::Version

Returns a version instance for Xcode 9.2; used to check for the availability of features and paths to various items on the filesystem

Returns:



33
34
35
# File 'lib/run_loop/xcode.rb', line 33

def v92
  fetch_version(:v92)
end

#versionRunLoop::Version

Returns the current version of Xcode.

Returns:

  • (RunLoop::Version)

    The current version of Xcode as reported by `xcrun xcodebuild -version`.



298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
# File 'lib/run_loop/xcode.rb', line 298

def version
  @xcode_version ||= begin
    if RunLoop::Environment.xtc?
      RunLoop::Version.new("0.0.0")
    else
      version = RunLoop::Version.new("0.0.0")
      begin
        args = ["xcrun", "xcodebuild", "-version"]
        hash = run_shell_command(args)
        if hash[:exit_status] != 0
          RunLoop.log_error("xcrun xcodebuild -version exited non-zero")
        else
          out = hash[:out]
          version_string = out.chomp[VERSION_REGEX, 0]
          version = RunLoop::Version.new(version_string)
        end
      rescue RuntimeError => e
        RunLoop.log_error(%Q[
Could not find Xcode version:

  #{e.class}: #{e.message}
])
      end
      version
    end
  end
end

#version_gte_51?Boolean

Deprecated.

2.1.0

Is the active Xcode version 5.1 or above?

Returns:

  • (Boolean)

    `true` if the current Xcode version is >= 5.1



289
290
291
292
# File 'lib/run_loop/xcode.rb', line 289

def version_gte_51?
  #RunLoop.deprecated("2.1.0", "No replacement")
  version >= v51
end

#version_gte_61?Boolean

Is the active Xcode version 6.1 or above?

Returns:

  • (Boolean)

    `true` if the current Xcode version is >= 6.1



274
275
276
# File 'lib/run_loop/xcode.rb', line 274

def version_gte_61?
  version >= v61
end

#version_gte_62?Boolean

Is the active Xcode version 6.2 or above?

Returns:

  • (Boolean)

    `true` if the current Xcode version is >= 6.2



267
268
269
# File 'lib/run_loop/xcode.rb', line 267

def version_gte_62?
  version >= v62
end

#version_gte_63?Boolean

Is the active Xcode version 6.3 or above?

Returns:

  • (Boolean)

    `true` if the current Xcode version is >= 6.3



260
261
262
# File 'lib/run_loop/xcode.rb', line 260

def version_gte_63?
  version >= v63
end

#version_gte_64?Boolean

Is the active Xcode version 6.4 or above?

Returns:

  • (Boolean)

    `true` if the current Xcode version is >= 6.4



253
254
255
# File 'lib/run_loop/xcode.rb', line 253

def version_gte_64?
  version >= v64
end

#version_gte_6?Boolean

Is the active Xcode version 6 or above?

Returns:

  • (Boolean)

    `true` if the current Xcode version is >= 6.0



281
282
283
# File 'lib/run_loop/xcode.rb', line 281

def version_gte_6?
  version >= v60
end

#version_gte_71?Boolean

Is the active Xcode version 7.1 or above?

Returns:

  • (Boolean)

    `true` if the current Xcode version is >= 7.1



239
240
241
# File 'lib/run_loop/xcode.rb', line 239

def version_gte_71?
  version >= v71
end

#version_gte_72?Boolean

Is the active Xcode version 7.2 or above?

Returns:

  • (Boolean)

    `true` if the current Xcode version is >= 7.2



232
233
234
# File 'lib/run_loop/xcode.rb', line 232

def version_gte_72?
  version >= v72
end

#version_gte_73?Boolean

Is the active Xcode version 7.3 or above?

Returns:

  • (Boolean)

    `true` if the current Xcode version is >= 7.3



225
226
227
# File 'lib/run_loop/xcode.rb', line 225

def version_gte_73?
  version >= v73
end

#version_gte_7?Boolean

Is the active Xcode version 7 or above?

Returns:

  • (Boolean)

    `true` if the current Xcode version is >= 7.0



246
247
248
# File 'lib/run_loop/xcode.rb', line 246

def version_gte_7?
  version >= v70
end

#version_gte_81?Boolean

Is the active Xcode version 8.1 or above?

Returns:

  • (Boolean)

    `true` if the current Xcode version is >= 8.1



211
212
213
# File 'lib/run_loop/xcode.rb', line 211

def version_gte_81?
  version >= v81
end

#version_gte_82?Boolean

Is the active Xcode version 8.2 or above?

Returns:

  • (Boolean)

    `true` if the current Xcode version is >= 8.2



204
205
206
# File 'lib/run_loop/xcode.rb', line 204

def version_gte_82?
  version >= v82
end

#version_gte_83?Boolean

Is the active Xcode version 8.3 or above?

Returns:

  • (Boolean)

    `true` if the current Xcode version is >= 8.3



197
198
199
# File 'lib/run_loop/xcode.rb', line 197

def version_gte_83?
  version >= v83
end

#version_gte_8?Boolean

Is the active Xcode version 8.0 or above?

Returns:

  • (Boolean)

    `true` if the current Xcode version is >= 8.0



218
219
220
# File 'lib/run_loop/xcode.rb', line 218

def version_gte_8?
  version >= v80
end

#version_gte_90?Boolean

Is the active Xcode version 9.0 or above?

Returns:

  • (Boolean)

    `true` if the current Xcode version is >= 9.0



190
191
192
# File 'lib/run_loop/xcode.rb', line 190

def version_gte_90?
  version >= v90
end

#version_gte_91?Boolean

Is the active Xcode version 9.1 or above?

Returns:

  • (Boolean)

    `true` if the current Xcode version is >= 9.1



183
184
185
# File 'lib/run_loop/xcode.rb', line 183

def version_gte_91?
  version >= v91
end

#version_gte_92?Boolean

Is the active Xcode version 9.1 or above?

Returns:

  • (Boolean)

    `true` if the current Xcode version is >= 9.2



176
177
178
# File 'lib/run_loop/xcode.rb', line 176

def version_gte_92?
  version >= v92
end