xcodeproj 0.25.1 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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: []
|