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 +4 -4
- data/bin/xcodeproj +1 -1
- data/lib/xcodeproj.rb +2 -0
- data/lib/xcodeproj/command.rb +30 -116
- data/lib/xcodeproj/command/config_dump.rb +20 -11
- data/lib/xcodeproj/command/project_diff.rb +26 -22
- data/lib/xcodeproj/command/show.rb +17 -18
- data/lib/xcodeproj/command/sort.rb +16 -9
- data/lib/xcodeproj/command/target_diff.rb +13 -11
- data/lib/xcodeproj/gem_version.rb +1 -1
- data/lib/xcodeproj/project.rb +16 -0
- data/lib/xcodeproj/project/uuid_generator.rb +100 -0
- metadata +23 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2c231842b2ee35dc87dd3005deff2ef60557a9fe
|
4
|
+
data.tar.gz: 78d9bb3482208d8d9d66584ef465de0c28909988
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1e530ccfdd06efed97f4ae18e44b892a0fbeaa4da6fedf4ef53f0e56682bf6a5b83e575669223e652f402b7ccf9b9e989866fe45d0a3263825a1a605ee59f0b4
|
7
|
+
data.tar.gz: 2fc50ec63b9e481de45afaae65a0ce544323b5fe90e36da80b8e5a1c7511ef74f7b5a8a489c6dfe90632eca55f47cb0766d4671be0e6af6ddaeda2f6035864ff
|
data/bin/xcodeproj
CHANGED
data/lib/xcodeproj.rb
CHANGED
data/lib/xcodeproj/command.rb
CHANGED
@@ -1,126 +1,28 @@
|
|
1
1
|
module Xcodeproj
|
2
2
|
require 'colored'
|
3
|
+
require 'claide'
|
3
4
|
|
4
|
-
class Command
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
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
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
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
|
76
|
-
|
77
|
-
|
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
|
-
|
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 =
|
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
|
-
|
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
|
-
|
8
|
+
It extracts common build settings in a per target base.xcconfig file.
|
11
9
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
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
|
-
|
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
|
-
|
5
|
-
%{Shows the difference between two projects:
|
4
|
+
self.summary = 'Shows the difference between two projects'
|
6
5
|
|
7
|
-
|
6
|
+
self.description = summary + <<-EOS.gsub(/ {8}/, '')
|
8
7
|
|
9
|
-
|
8
|
+
It shows the difference in a UUID agnostic fashion.
|
10
9
|
|
11
|
-
|
12
|
-
|
13
|
-
|
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
|
-
[
|
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
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
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 =
|
35
|
-
hash_2 =
|
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
|
46
|
-
yaml
|
47
|
-
yaml
|
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
|
-
|
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
|
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
|
-
@
|
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
|
-
|
24
|
-
|
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
|
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
|
-
|
5
|
-
|
4
|
+
self.description = <<-eos
|
5
|
+
Sorts the given project.
|
6
6
|
|
7
|
-
|
7
|
+
If no `PROJECT' is specified then the current work directory is searched for one.
|
8
|
+
eos
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
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
|
-
|
16
|
-
|
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
|
-
|
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
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
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
|
data/lib/xcodeproj/project.rb
CHANGED
@@ -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.
|
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-
|
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: []
|