xcodeproj 0.25.1 → 0.26.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 362652d47890e422884822cbddea7e111300f631
4
- data.tar.gz: 530b5a22dc14ef0af7f4564f57be23cd850c3f4e
3
+ metadata.gz: 2c231842b2ee35dc87dd3005deff2ef60557a9fe
4
+ data.tar.gz: 78d9bb3482208d8d9d66584ef465de0c28909988
5
5
  SHA512:
6
- metadata.gz: cb7de4876f0254a035c46d339f084c872a539c38d3dab4f491ad26fb2c2814c85ea997ba0fcb149dbab9b3bf693cfd06cefa99af7fb35337d9ac0eec397986e2
7
- data.tar.gz: 10195a51baf29a6af0e4daba851e41b5c77a9ce8a452848d176332a1ccff63c723db828a58b3a4f9504328a738c8665daf005ebbb641b2c229d0d53d4c433d45
6
+ metadata.gz: 1e530ccfdd06efed97f4ae18e44b892a0fbeaa4da6fedf4ef53f0e56682bf6a5b83e575669223e652f402b7ccf9b9e989866fe45d0a3263825a1a605ee59f0b4
7
+ data.tar.gz: 2fc50ec63b9e481de45afaae65a0ce544323b5fe90e36da80b8e5a1c7511ef74f7b5a8a489c6dfe90632eca55f47cb0766d4671be0e6af6ddaeda2f6035864ff
data/bin/xcodeproj CHANGED
@@ -10,4 +10,4 @@ end
10
10
 
11
11
  require 'xcodeproj'
12
12
 
13
- Xcodeproj::Command.run(*ARGV)
13
+ Xcodeproj::Command.run(ARGV)
data/lib/xcodeproj.rb CHANGED
@@ -1,7 +1,9 @@
1
1
  module Xcodeproj
2
2
  require 'pathname'
3
+ require 'claide'
3
4
 
4
5
  class PlainInformative < StandardError
6
+ include CLAide::InformativeError
5
7
  end
6
8
 
7
9
  class Informative < PlainInformative
@@ -1,126 +1,28 @@
1
1
  module Xcodeproj
2
2
  require 'colored'
3
+ require 'claide'
3
4
 
4
- class Command
5
- autoload :ConfigDump, 'xcodeproj/command/config_dump'
6
- autoload :TargetDiff, 'xcodeproj/command/target_diff'
7
- autoload :ProjectDiff, 'xcodeproj/command/project_diff'
8
- autoload :Show, 'xcodeproj/command/show'
9
- autoload :Sort, 'xcodeproj/command/sort'
5
+ class Command < CLAide::Command
6
+ require 'xcodeproj/command/config_dump'
7
+ require 'xcodeproj/command/target_diff'
8
+ require 'xcodeproj/command/project_diff'
9
+ require 'xcodeproj/command/show'
10
+ require 'xcodeproj/command/sort'
10
11
 
11
- class Help < StandardError
12
- def initialize(command_class, argv, unrecognized_command = nil)
13
- @command_class, @argv, @unrecognized_command = command_class, argv, unrecognized_command
14
- end
15
-
16
- def message
17
- message = [
18
- '',
19
- @command_class.banner.gsub(/\$ pod (.*)/, '$ pod \1'.green),
20
- '',
21
- 'Options:',
22
- '',
23
- options,
24
- "\n",
25
- ].join("\n")
26
- message << "[!] Unrecognized command: `#{@unrecognized_command}'\n".red if @unrecognized_command
27
- message << "[!] Unrecognized argument#{@argv.count > 1 ? 's' : ''}: `#{@argv.join(' - ')}'\n".red unless @argv.empty?
28
- message
29
- end
30
-
31
- private
32
-
33
- def options
34
- options = @command_class.options
35
- keys = options.map(&:first)
36
- key_size = keys.reduce(0) { |size, key| key.size > size ? key.size : size }
37
- options.map { |key, desc| " #{key.ljust(key_size)} #{desc}" }.join("\n")
38
- end
39
- end
40
-
41
- class ARGV < Array
42
- def options
43
- select { |x| x.to_s[0, 1] == '-' }
44
- end
45
-
46
- def arguments
47
- self - options
48
- end
49
-
50
- def option(name)
51
- !!delete(name)
52
- end
53
-
54
- def shift_argument
55
- (arg = arguments[0]) && delete(arg)
56
- end
57
- end
58
-
59
- def self.banner
60
- commands = ['config-dump', 'target-diff', 'project-diff', 'show', 'sort']
61
- banner = "To see help for the available commands run:\n\n"
62
- banner + commands.map { |cmd| " * $ xcodeproj #{cmd.green} --help" }.join("\n")
63
- end
64
-
65
- def self.options
66
- [
67
- ['--help', 'Show help information'],
68
- # ['--silent', 'Print nothing'],
69
- # ['--no-color', 'Print output without color'],
70
- # ['--verbose', 'Print more information while working'],
71
- ['--version', 'Prints the version of Xcodeproj'],
72
- ]
73
- end
12
+ self.abstract_command = true
13
+ self.command = 'xcodeproj'
14
+ self.version = VERSION
15
+ self.description = 'Xcodeproj lets you create and modify Xcode projects from Ruby.'
16
+ self.plugin_prefixes = %w(claide xcodeproj)
74
17
 
75
- def self.run(*argv)
76
- sub_command = parse(*argv)
77
- sub_command.run
78
-
79
- rescue Interrupt
80
- puts '[!] Cancelled'.red
81
- # Config.instance.verbose? ? raise : exit(1)
82
- exit(1)
83
-
84
- rescue => e
85
- puts e.message
86
- unless e.is_a?(Informative) || e.is_a?(Help)
87
- puts e.backtrace
88
- end
89
- exit 1
90
- end
91
-
92
- def self.parse(*argv)
93
- argv = ARGV.new(argv)
94
- if argv.option('--version')
95
- require 'xcodeproj/gem_version'
96
- puts VERSION
97
- exit!(0)
98
- end
99
-
100
- show_help = argv.option('--help')
101
-
102
- String.send(:define_method, :colorize) { |string, _| string } if argv.option('--no-color')
103
-
104
- command_class = case command_argument = argv.shift_argument
105
- when 'config-dump' then ConfigDump
106
- when 'target-diff' then TargetDiff
107
- when 'project-diff' then ProjectDiff
108
- when 'show' then Show
109
- when 'sort' then Sort
110
- end
111
-
112
- if command_class.nil?
113
- raise Help.new(self, argv, command_argument)
114
- elsif show_help
115
- raise Help.new(command_class, argv)
116
- else
117
- command_class.new(argv)
18
+ def initialize(argv)
19
+ super
20
+ unless self.ansi_output?
21
+ String.send(:define_method, :colorize) { |string, _| string }
118
22
  end
119
23
  end
120
24
 
121
- def initialize(argv)
122
- raise Help.new(self.class, argv)
123
- end
25
+ private
124
26
 
125
27
  def xcodeproj_path
126
28
  unless @xcodeproj_path
@@ -136,11 +38,23 @@ module Xcodeproj
136
38
  'working directory. Please specify which to use ' \
137
39
  'with the `--project` option.'
138
40
  end
139
- @xcodeproj_path = File.expand_path(xcodeproj_path)
41
+ @xcodeproj_path = Pathname.new(xcodeproj_path).expand_path
140
42
  end
141
43
  @xcodeproj_path
142
44
  end
143
45
 
46
+ def open_project!(*paths)
47
+ if paths.empty?
48
+ [xcodeproj]
49
+ else
50
+ paths.map { |path| Project.open(path) }
51
+ end
52
+ end
53
+
54
+ def xcodeproj_path=(path)
55
+ @xcodeproj_path = path && Pathname.new(path).expand_path
56
+ end
57
+
144
58
  def xcodeproj
145
59
  @xcodeproj ||= Project.open(xcodeproj_path)
146
60
  end
@@ -1,24 +1,28 @@
1
1
  module Xcodeproj
2
2
  class Command
3
3
  class ConfigDump < Command
4
- def self.banner
5
- require 'active_support/core_ext/string/strip.rb'
6
- <<-eos.strip_heredoc
4
+ self.description = <<-eos
7
5
  Dumps the build settings of all project targets for all configurations in
8
6
  directories named by the target in given output directory.
9
7
 
10
- $ config-dump PROJECT OUTPUT
8
+ It extracts common build settings in a per target base.xcconfig file.
11
9
 
12
- It extracts common build settings in a per target base.xcconfig file.
13
- If no `PROJECT` is specified then the current work directory is searched
14
- for one.
15
- If no `OUTPUT` is specified then the project directory will be used.%)
10
+ If no `PROJECT` is specified then the current work directory is searched
11
+ for one.
12
+
13
+ If no `OUTPUT` is specified then the project directory will be used.
16
14
  eos
17
- end
15
+
16
+ self.summary = 'Dumps the build settings of all project targets for ' \
17
+ 'all configurations in directories named by the target ' \
18
+ 'in the given output directory.'
19
+
20
+ self.arguments = [
21
+ CLAide::Argument.new('PROJECT', false),
22
+ ]
18
23
 
19
24
  def initialize(argv)
20
- xcodeproj_path = argv.shift_argument
21
- @xcodeproj_path = File.expand_path(xcodeproj_path) if xcodeproj_path
25
+ self.xcodeproj_path = argv.shift_argument
22
26
 
23
27
  @output_path = Pathname(argv.shift_argument || '.')
24
28
  unless @output_path.directory?
@@ -28,6 +32,11 @@ module Xcodeproj
28
32
  super unless argv.empty?
29
33
  end
30
34
 
35
+ def validate!
36
+ super
37
+ open_project!
38
+ end
39
+
31
40
  def run
32
41
  dump_all_configs(xcodeproj, 'Project')
33
42
 
@@ -1,38 +1,42 @@
1
1
  module Xcodeproj
2
2
  class Command
3
3
  class ProjectDiff < Command
4
- def self.banner
5
- %{Shows the difference between two projects:
4
+ self.summary = 'Shows the difference between two projects'
6
5
 
7
- $ project-diff PROJECT_1 PROJECT_2
6
+ self.description = summary + <<-EOS.gsub(/ {8}/, '')
8
7
 
9
- It shows the difference in a UUID agnostic fashion.
8
+ It shows the difference in a UUID agnostic fashion.
10
9
 
11
- To reduce the noise (and to simplify implementation) differences in the
12
- order of arrays are ignored.}
13
- end
10
+ To reduce the noise (and to simplify implementation) differences in the
11
+ order of arrays are ignored.
12
+ EOS
14
13
 
15
14
  def self.options
16
- [['--ignore KEY', 'A key to ignore in the comparison. Can be specified multiple times.']].concat(super)
15
+ [
16
+ ['--ignore=KEY', 'A key to ignore in the comparison. Can be specified multiple times.'],
17
+ ].concat(super)
17
18
  end
18
19
 
20
+ self.arguments = [
21
+ CLAide::Argument.new('PROJECT1', true),
22
+ CLAide::Argument.new('PROJECT2', true),
23
+ ]
24
+
19
25
  def initialize(argv)
20
26
  @path_project1 = argv.shift_argument
21
27
  @path_project2 = argv.shift_argument
22
- unless @path_project1 && @path_project2
23
- raise Informative, 'Two project paths are required.'
24
- end
25
- @keys_to_ignore = []
26
- while (idx = argv.index('--ignore'))
27
- @keys_to_ignore << argv.delete_at(idx + 1)
28
- argv.delete_at(idx)
29
- end
30
- super unless argv.empty?
28
+ @keys_to_ignore = argv.all_options('ignore')
29
+ super
30
+ end
31
+
32
+ def validate!
33
+ super
34
+ @project1, @project2 = open_project!(@path_project1, @path_project2)
31
35
  end
32
36
 
33
37
  def run
34
- hash_1 = Project.new(@path_project1).to_tree_hash.dup
35
- hash_2 = Project.new(@path_project2).to_tree_hash.dup
38
+ hash_1 = @project1.to_tree_hash.dup
39
+ hash_2 = @project2.to_tree_hash.dup
36
40
  @keys_to_ignore.each do |key|
37
41
  Differ.clean_hash!(hash_1, key)
38
42
  Differ.clean_hash!(hash_2, key)
@@ -42,9 +46,9 @@ module Xcodeproj
42
46
 
43
47
  require 'yaml'
44
48
  yaml = diff.to_yaml
45
- yaml = yaml.gsub(@path_project1, @path_project1.cyan)
46
- yaml = yaml.gsub(@path_project2, @path_project2.magenta)
47
- yaml = yaml.gsub(':diff:', 'diff:'.yellow)
49
+ yaml.gsub!(@path_project1, @path_project1.cyan)
50
+ yaml.gsub!(@path_project2, @path_project2.magenta)
51
+ yaml.gsub!(':diff:', 'diff:'.yellow)
48
52
  puts yaml
49
53
  end
50
54
  end
@@ -1,45 +1,44 @@
1
1
  module Xcodeproj
2
2
  class Command
3
3
  class Show < Command
4
- def self.banner
5
- %(Shows an overview of a project in a YAML representation.'
6
-
7
- $ show [PROJECT]
8
-
9
- If no `PROJECT' is specified then the current work directory is searched
10
- for one.)
11
- end
4
+ self.summary = 'Shows an overview of a project in a YAML representation.'
12
5
 
13
6
  def self.options
14
7
  [
15
- ['--format [hash|tree_hash|raw]', 'YAML output format, optional'],
8
+ ['--format=[hash|tree_hash|raw]', 'YAML output format'],
16
9
  ].concat(super)
17
10
  end
18
11
 
12
+ self.arguments = [
13
+ CLAide::Argument.new('PROJECT', false),
14
+ ]
15
+
19
16
  def initialize(argv)
20
- xcodeproj_path = argv.shift_argument
21
- @xcodeproj_path = File.expand_path(xcodeproj_path) if xcodeproj_path
17
+ self.xcodeproj_path = argv.shift_argument
18
+ @output_format = argv.option('format')
19
+ @output_format &&= @output_format.to_sym
20
+ super
21
+ end
22
22
 
23
- if argv.option('--format')
24
- @output_format = argv.shift_argument
23
+ def validate
24
+ super
25
+ unless [nil, :hash, :tree_hash, :raw].include?(@output_format)
26
+ help! "Unknown format `#{@output_format}`"
25
27
  end
26
-
27
- super unless argv.empty?
28
+ open_project!
28
29
  end
29
30
 
30
31
  def run
31
32
  require 'yaml'
32
33
 
33
34
  if @output_format
34
- case @output_format.to_sym
35
+ case @output_format
35
36
  when :hash
36
37
  puts xcodeproj.to_hash.to_yaml
37
38
  when :tree_hash
38
39
  puts xcodeproj.to_tree_hash.to_yaml
39
40
  when :raw
40
41
  puts xcodeproj.to_yaml
41
- else
42
- raise Informative, "Unknowh format #{@output_format}!"
43
42
  end
44
43
  return
45
44
  end
@@ -1,19 +1,26 @@
1
1
  module Xcodeproj
2
2
  class Command
3
3
  class Sort < Command
4
- def self.banner
5
- %(Sorts the give project
4
+ self.description = <<-eos
5
+ Sorts the given project.
6
6
 
7
- $ sort [PROJECT]
7
+ If no `PROJECT' is specified then the current work directory is searched for one.
8
+ eos
8
9
 
9
- If no `PROJECT' is specified then the current work directory is searched
10
- for one.)
11
- end
10
+ self.summary = 'Sorts the give project.'
11
+
12
+ self.arguments = [
13
+ CLAide::Argument.new('PROJECT', false),
14
+ ]
12
15
 
13
16
  def initialize(argv)
14
- xcodeproj_path = argv.shift_argument
15
- @xcodeproj_path = File.expand_path(xcodeproj_path) if xcodeproj_path
16
- super unless argv.empty?
17
+ self.xcodeproj_path = argv.shift_argument
18
+ super
19
+ end
20
+
21
+ def validate!
22
+ super
23
+ open_project!
17
24
  end
18
25
 
19
26
  def run
@@ -1,13 +1,7 @@
1
1
  module Xcodeproj
2
2
  class Command
3
3
  class TargetDiff < Command
4
- def self.banner
5
- %(Shows the difference between two targets:
6
-
7
- $ targets-diff [target 1] [target 2]
8
-
9
- Only supports build source files atm.)
10
- end
4
+ self.summary = 'Shows the difference between two targets'
11
5
 
12
6
  def self.options
13
7
  [
@@ -15,13 +9,21 @@ module Xcodeproj
15
9
  ].concat(super)
16
10
  end
17
11
 
12
+ self.arguments = [
13
+ CLAide::Argument.new('TARGET1', true),
14
+ CLAide::Argument.new('TARGET2', true),
15
+ ]
16
+
18
17
  def initialize(argv)
19
18
  @target1 = argv.shift_argument
20
19
  @target2 = argv.shift_argument
21
- if argv.option('--project')
22
- @xcodeproj_path = File.expand_path(argv.shift_argument)
23
- end
24
- super unless argv.empty?
20
+ self.xcodeproj_path = argv.option('--project')
21
+ super
22
+ end
23
+
24
+ def validate!
25
+ super
26
+ open_project!
25
27
  end
26
28
 
27
29
  def run
@@ -1,5 +1,5 @@
1
1
  module Xcodeproj
2
2
  # The version of the xcodeproj gem.
3
3
  #
4
- VERSION = '0.25.1' unless defined? Xcodeproj::VERSION
4
+ VERSION = '0.26.0' unless defined? Xcodeproj::VERSION
5
5
  end
@@ -3,6 +3,7 @@ require 'securerandom'
3
3
 
4
4
  require 'xcodeproj/project/object'
5
5
  require 'xcodeproj/project/project_helper'
6
+ require 'xcodeproj/project/uuid_generator'
6
7
  require 'xcodeproj/plist_helper'
7
8
 
8
9
  module Xcodeproj
@@ -321,6 +322,21 @@ module Xcodeproj
321
322
  Xcodeproj.write_plist(to_hash, file)
322
323
  end
323
324
 
325
+ # Replaces all the UUIDs in the project with deterministic MD5 checksums.
326
+ #
327
+ # @note The current sorting of the project is taken into account when
328
+ # generating the new UUIDs.
329
+ #
330
+ # @note This method should only be used for entirely machine-generated
331
+ # projects, as true UUIDs are useful for tracking changes in the
332
+ # project.
333
+ #
334
+ # @return [void]
335
+ #
336
+ def predictabilize_uuids
337
+ UUIDGenerator.new(self).generate!
338
+ end
339
+
324
340
  public
325
341
 
326
342
  # @!group Creating objects
@@ -0,0 +1,100 @@
1
+ module Xcodeproj
2
+ class Project
3
+ class UUIDGenerator
4
+ def initialize(project)
5
+ @project = project
6
+ @new_objects_by_uuid = {}
7
+ @paths_by_object = {}
8
+ end
9
+
10
+ def generate!
11
+ all_objects = @project.objects
12
+ generate_paths(@project.root_object)
13
+ switch_uuids(all_objects)
14
+ verify_no_duplicates!(all_objects)
15
+ fixup_uuid_references
16
+ @project.instance_variable_set(:@generated_uuids, @project.instance_variable_get(:@available_uuids))
17
+ @project.instance_variable_set(:@objects_by_uuid, @new_objects_by_uuid)
18
+ end
19
+
20
+ private
21
+
22
+ def verify_no_duplicates!(all_objects)
23
+ duplicates = all_objects - @new_objects_by_uuid.values
24
+ raise "[Xcodeproj] Generated duplicate UUIDs:\n\n" <<
25
+ duplicates.map { |d| "#{d.isa} -- #{@paths_by_object[d]}" }.join("\n") unless duplicates.empty?
26
+ end
27
+
28
+ def fixup_uuid_references
29
+ fixup = ->(object, attr) do
30
+ if object.respond_to?(attr) && link = @project.objects_by_uuid[object.send(attr)]
31
+ object.send(:"#{attr}=", link.uuid)
32
+ end
33
+ end
34
+ @project.objects.each do |object|
35
+ [:remote_global_id_string, :container_portal, :target_proxy].each do |attr|
36
+ fixup[object, attr]
37
+ end
38
+ end
39
+ end
40
+
41
+ def generate_paths(object, path = '')
42
+ @paths_by_object[object] = path
43
+
44
+ object.to_one_attributes.each do |attrb|
45
+ obj = attrb.get_value(object)
46
+ generate_paths(obj, path + '/' << attrb.plist_name) if obj
47
+ end
48
+
49
+ object.to_many_attributes.each do |attrb|
50
+ attrb.get_value(object).each do |o|
51
+ generate_paths(o, path + '/' << attrb.plist_name << "/#{path_component_for_object(o)}")
52
+ end
53
+ end
54
+
55
+ object.references_by_keys_attributes.each do |attrb|
56
+ attrb.get_value(object).each do |dictionary|
57
+ dictionary.each do |key, value|
58
+ generate_paths(value, path + '/' << attrb.plist_name << "/k:#{key}/#{path_component_for_object(value)}")
59
+ end
60
+ end
61
+ end
62
+ end
63
+
64
+ def switch_uuids(objects)
65
+ objects.each do |object|
66
+ next unless path = @paths_by_object[object]
67
+ uuid = uuid_for_path(path)
68
+ object.instance_variable_set(:@uuid, uuid)
69
+ @new_objects_by_uuid[uuid] = object
70
+ end
71
+ end
72
+
73
+ def uuid_for_path(path)
74
+ Digest::MD5.hexdigest(path).upcase
75
+ end
76
+
77
+ def path_component_for_object(object)
78
+ hash = object.to_tree_hash
79
+ tree_hash_to_path(hash)
80
+ end
81
+
82
+ def tree_hash_to_path(object)
83
+ case object
84
+ when Hash
85
+ object.sort.each_with_object('') do |(key, value), string|
86
+ string << key << ':' << tree_hash_to_path(value) << ','
87
+ end
88
+ when Array
89
+ object.map do |value|
90
+ tree_hash_to_path(value)
91
+ end.join(',')
92
+ when String
93
+ object
94
+ else
95
+ raise "[Xcodeproj] Unrecognized object `#{hash}` in #tree_hash_to_path"
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
metadata CHANGED
@@ -1,43 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xcodeproj
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.25.1
4
+ version: 0.26.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eloy Duran
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-27 00:00:00.000000000 Z
11
+ date: 2015-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: '3'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: colored
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ~>
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.2'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: claide
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 0.9.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 0.9.0
41
55
  description: Xcodeproj lets you create and modify Xcode projects from Ruby. Script
42
56
  boring management tasks or build Xcode-friendly libraries. Also includes support
43
57
  for Xcode workspaces (.xcworkspace) and configuration files (.xcconfig).
@@ -85,6 +99,7 @@ files:
85
99
  - lib/xcodeproj/project/object_dictionary.rb
86
100
  - lib/xcodeproj/project/object_list.rb
87
101
  - lib/xcodeproj/project/project_helper.rb
102
+ - lib/xcodeproj/project/uuid_generator.rb
88
103
  - lib/xcodeproj/scheme.rb
89
104
  - lib/xcodeproj/user_interface.rb
90
105
  - lib/xcodeproj/workspace.rb
@@ -100,12 +115,12 @@ require_paths:
100
115
  - lib
101
116
  required_ruby_version: !ruby/object:Gem::Requirement
102
117
  requirements:
103
- - - ">="
118
+ - - '>='
104
119
  - !ruby/object:Gem::Version
105
120
  version: 2.0.0
106
121
  required_rubygems_version: !ruby/object:Gem::Requirement
107
122
  requirements:
108
- - - ">="
123
+ - - '>='
109
124
  - !ruby/object:Gem::Version
110
125
  version: '0'
111
126
  requirements: []