zerg_xcode 0.3.5 → 0.4.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.
- data/.document +5 -0
- data/.project +17 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +30 -0
- data/Rakefile +50 -23
- data/VERSION +1 -0
- data/lib/zerg_xcode/file_format/archiver.rb +0 -24
- data/lib/zerg_xcode/file_format/id_generator.rb +30 -0
- data/lib/zerg_xcode/file_format/lexer.rb +113 -56
- data/lib/zerg_xcode/file_format/parser.rb +28 -34
- data/lib/zerg_xcode/file_format/scan_buffer.rb +46 -0
- data/lib/zerg_xcode/objects/pbx_project.rb +1 -1
- data/lib/zerg_xcode/objects/xcode_object.rb +2 -1
- data/lib/zerg_xcode/{file_format/paths.rb → paths.rb} +5 -6
- data/lib/zerg_xcode/shortcuts.rb +2 -2
- data/lib/zerg_xcode.rb +7 -1
- data/spec/archiver_spec.rb +83 -0
- data/spec/builder/runner_spec.rb +27 -0
- data/spec/builder/sdk_spec.rb +11 -0
- data/spec/encoder_spec.rb +17 -0
- data/{test → spec}/fixtures/ClosedLib/ClosedLib.xcodeproj/project.pbxproj +0 -0
- data/{test → spec}/fixtures/ClosedLib/ClosedLib_Prefix.pch +0 -0
- data/{test → spec}/fixtures/ClosedLib/ClosedNative.c +0 -0
- data/{test → spec}/fixtures/ClosedLib/ClosedNative.h +0 -0
- data/{test → spec}/fixtures/FlatTestApp/FlatTestApp.xcodeproj/project.pbxproj +0 -0
- data/{test → spec}/fixtures/TestApp/TestApp.xcodeproj/project.pbxproj +0 -0
- data/{test → spec}/fixtures/TestApp30.xcodeproj/project.pbxproj +0 -0
- data/{test → spec}/fixtures/TestLib30.xcodeproj/project.pbxproj +0 -0
- data/{test → spec}/fixtures/ZergSupport.xcodeproj/project.pbxproj +0 -0
- data/{test → spec}/fixtures/project.pbxproj +0 -0
- data/{test → spec}/fixtures/project.pbxproj.compat +0 -0
- data/spec/id_generator_spec.rb +38 -0
- data/spec/lexer_spec.rb +111 -0
- data/spec/parser_spec.rb +34 -0
- data/spec/paths_spec.rb +75 -0
- data/spec/shortcuts_spec.rb +24 -0
- data/test/objects/pbx_build_file_test.rb +3 -3
- data/test/objects/pbx_build_phase_test.rb +1 -1
- data/test/objects/pbx_container_item_proxy_test.rb +1 -1
- data/test/objects/pbx_group_test.rb +1 -1
- data/test/objects/pbx_native_target_test.rb +2 -2
- data/test/objects/pbx_project_test.rb +9 -9
- data/test/objects/pbx_target_dependency_test.rb +1 -1
- data/test/objects/xc_configuration_list_test.rb +1 -1
- data/test/plugins/addlibrary_test.rb +2 -2
- data/test/plugins/core/core_test.rb +1 -1
- data/test/plugins/import_test.rb +71 -71
- data/test/plugins/irb_test.rb +3 -3
- data/test/plugins/ls_test.rb +3 -3
- data/test/plugins/lstargets_test.rb +3 -3
- data/test/plugins/retarget_test.rb +2 -2
- data/zerg_xcode.gemspec +112 -17
- metadata +115 -113
- data/test/builder/runner_test.rb +0 -35
- data/test/builder/sdk_test.rb +0 -17
- data/test/file_format/archiver_test.rb +0 -74
- data/test/file_format/encoder_test.rb +0 -15
- data/test/file_format/lexer_test.rb +0 -60
- data/test/file_format/parser_test.rb +0 -49
- data/test/file_format/path_test.rb +0 -47
- data/test/shortcuts_test.rb +0 -22
data/.document
ADDED
data/.project
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<projectDescription>
|
3
|
+
<name>zerg_xcode</name>
|
4
|
+
<comment></comment>
|
5
|
+
<projects>
|
6
|
+
</projects>
|
7
|
+
<buildSpec>
|
8
|
+
<buildCommand>
|
9
|
+
<name>org.rubypeople.rdt.core.rubybuilder</name>
|
10
|
+
<arguments>
|
11
|
+
</arguments>
|
12
|
+
</buildCommand>
|
13
|
+
</buildSpec>
|
14
|
+
<natures>
|
15
|
+
<nature>org.rubypeople.rdt.core.rubynature</nature>
|
16
|
+
</natures>
|
17
|
+
</projectDescription>
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
diff-lcs (1.1.3)
|
5
|
+
flexmock (0.9.0)
|
6
|
+
git (1.2.5)
|
7
|
+
jeweler (1.6.4)
|
8
|
+
bundler (~> 1.0)
|
9
|
+
git (>= 1.2.5)
|
10
|
+
rake
|
11
|
+
rake (0.9.2.2)
|
12
|
+
rcov (0.9.11)
|
13
|
+
rspec (2.7.0)
|
14
|
+
rspec-core (~> 2.7.0)
|
15
|
+
rspec-expectations (~> 2.7.0)
|
16
|
+
rspec-mocks (~> 2.7.0)
|
17
|
+
rspec-core (2.7.1)
|
18
|
+
rspec-expectations (2.7.0)
|
19
|
+
diff-lcs (~> 1.1.2)
|
20
|
+
rspec-mocks (2.7.0)
|
21
|
+
|
22
|
+
PLATFORMS
|
23
|
+
ruby
|
24
|
+
|
25
|
+
DEPENDENCIES
|
26
|
+
bundler (~> 1.0.0)
|
27
|
+
flexmock
|
28
|
+
jeweler (~> 1.6.4)
|
29
|
+
rcov
|
30
|
+
rspec (~> 2.7.0)
|
data/Rakefile
CHANGED
@@ -5,29 +5,56 @@
|
|
5
5
|
# License:: MIT
|
6
6
|
|
7
7
|
require 'rubygems'
|
8
|
-
require '
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
p.need_tar_gz = true
|
26
|
-
p.need_zip = true
|
27
|
-
p.rdoc_pattern = /^(lib|bin|tasks|ext)|^BUILD|^README|^CHANGELOG|^LICENSE$/
|
8
|
+
require 'bundler'
|
9
|
+
begin
|
10
|
+
Bundler.setup(:default, :development)
|
11
|
+
rescue Bundler::BundlerError => e
|
12
|
+
$stderr.puts e.message
|
13
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
14
|
+
exit e.status_code
|
15
|
+
end
|
16
|
+
require 'rake'
|
17
|
+
|
18
|
+
require 'jeweler'
|
19
|
+
Jeweler::Tasks.new do |gem|
|
20
|
+
gem.name = 'zerg_xcode'
|
21
|
+
gem.homepage = "http://github.com/zerglings/zerg_xcode"
|
22
|
+
gem.authors = ['Victor Costan']
|
23
|
+
gem.email = 'victor@zergling.net'
|
24
|
+
gem.summary = 'Automated modifications for Xcode project files'
|
28
25
|
end
|
26
|
+
Jeweler::RubygemsDotOrgTasks.new
|
27
|
+
|
28
|
+
require 'rake/testtask'
|
29
|
+
Rake::TestTask.new(:test) do |test|
|
30
|
+
test.libs << 'lib' << 'test'
|
31
|
+
test.pattern = 'test/**/*_test.rb'
|
32
|
+
test.verbose = true
|
33
|
+
end
|
34
|
+
|
35
|
+
require 'rspec/core/rake_task'
|
36
|
+
RSpec::Core::RakeTask.new(:spec)
|
29
37
|
|
30
|
-
|
31
|
-
|
32
|
-
|
38
|
+
require 'rcov/rcovtask'
|
39
|
+
Rcov::RcovTask.new do |test|
|
40
|
+
test.libs << 'test'
|
41
|
+
test.pattern = 'test/**/test_*.rb'
|
42
|
+
test.verbose = true
|
43
|
+
test.rcov_opts << '--exclude "gems/*"'
|
44
|
+
end
|
45
|
+
|
46
|
+
task :default => [:spec, :test]
|
47
|
+
|
48
|
+
begin
|
49
|
+
require 'rdoc/task'
|
50
|
+
RDoc::Task.new do |rdoc|
|
51
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
52
|
+
|
53
|
+
rdoc.rdoc_dir = 'rdoc'
|
54
|
+
rdoc.title = "zerg_xcode #{version}"
|
55
|
+
rdoc.rdoc_files.include('README*')
|
56
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
57
|
+
end
|
58
|
+
rescue LoadError => e
|
59
|
+
# Rdoc compatible with 1.8 doesn't have rdoc/task
|
33
60
|
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.4.0
|
@@ -71,30 +71,6 @@ module Archiver
|
|
71
71
|
'objects' => objects }
|
72
72
|
end
|
73
73
|
|
74
|
-
# Generates archive IDs for objects.
|
75
|
-
class IdGenerator
|
76
|
-
def initialize
|
77
|
-
@assigned_ids = Set.new
|
78
|
-
end
|
79
|
-
|
80
|
-
def new_id
|
81
|
-
loop do
|
82
|
-
id = (0...24).map { '%02X' % rand(256) }.join
|
83
|
-
next if @assigned_ids.include? id
|
84
|
-
@assigned_ids << id
|
85
|
-
return id
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
def id_for(object)
|
90
|
-
if object.archive_id && !@assigned_ids.include?(object.archive_id)
|
91
|
-
@assigned_ids << object.archive_id
|
92
|
-
return object.archive_id
|
93
|
-
else
|
94
|
-
return new_id
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
74
|
end # module ZergXcode::Archiver
|
99
75
|
|
100
76
|
end # namespace ZergXcode
|
@@ -0,0 +1,30 @@
|
|
1
|
+
|
2
|
+
# :nodoc: namespace
|
3
|
+
module ZergXcode
|
4
|
+
|
5
|
+
# Generates archive IDs for objects.
|
6
|
+
class IdGenerator
|
7
|
+
def initialize
|
8
|
+
@assigned_ids = Set.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def new_id
|
12
|
+
loop do
|
13
|
+
id = (0...24).map { '%02X' % rand(256) }.join
|
14
|
+
next if @assigned_ids.include? id
|
15
|
+
@assigned_ids << id
|
16
|
+
return id
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def id_for(object)
|
21
|
+
if object.archive_id && !@assigned_ids.include?(object.archive_id)
|
22
|
+
@assigned_ids << object.archive_id
|
23
|
+
return object.archive_id
|
24
|
+
else
|
25
|
+
return new_id
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -9,65 +9,122 @@ module ZergXcode
|
|
9
9
|
|
10
10
|
|
11
11
|
# Lexer for flattened object graphs stored in .xcodeproj files.
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
12
|
+
class Lexer
|
13
|
+
|
14
|
+
SIMPLE_TOKENS = [ '(', ')', '{', '}', '=', ';', ',' ]
|
15
|
+
|
16
|
+
def initialize(string)
|
17
|
+
@scan_buffer = ScanBuffer.new(string)
|
18
|
+
end
|
19
|
+
|
20
|
+
def tokenize
|
21
|
+
tokens, token = [], nil
|
22
|
+
tokens << token until (token = scan_token).nil?
|
23
|
+
tokens
|
24
|
+
end
|
25
|
+
|
26
|
+
def scan_token
|
27
|
+
skip_encodings_comments_and_whitespace
|
28
|
+
|
29
|
+
return nil if at_end_of_buffer?
|
30
|
+
return scan_simple_token if at_simple_token?
|
31
|
+
return scan_quoted_string if at_quoted_string?
|
32
|
+
return scan_bare_string
|
33
|
+
end
|
34
|
+
private :scan_token
|
35
|
+
|
36
|
+
def skip_encodings_comments_and_whitespace
|
37
|
+
nil while skip_encoding_comment_or_whitespace
|
38
|
+
end
|
39
|
+
private :skip_encodings_comments_and_whitespace
|
40
|
+
|
41
|
+
def skip_encoding_comment_or_whitespace
|
42
|
+
if at_encoding?
|
43
|
+
skip_encoding
|
44
|
+
true
|
45
|
+
elsif @scan_buffer.peek =~ /\s/
|
46
|
+
@scan_buffer.advance
|
47
|
+
true
|
48
|
+
elsif @scan_buffer.at?('/*')
|
49
|
+
skip_comment
|
50
|
+
true
|
51
|
+
else
|
52
|
+
false
|
53
|
+
end
|
54
|
+
end
|
55
|
+
private :skip_encoding_comment_or_whitespace
|
56
|
+
|
57
|
+
def skip_comment
|
58
|
+
@scan_buffer.advance(2)
|
59
|
+
@scan_buffer.advance until @scan_buffer.at?('*/')
|
60
|
+
@scan_buffer.advance(2)
|
61
|
+
end
|
62
|
+
private :skip_comment
|
63
|
+
|
64
|
+
def at_end_of_buffer?
|
65
|
+
@scan_buffer.at_end?
|
66
|
+
end
|
67
|
+
private :at_end_of_buffer?
|
68
|
+
|
69
|
+
def at_encoding?
|
70
|
+
@scan_buffer.at?('// !$*')
|
71
|
+
end
|
72
|
+
private :at_encoding?
|
73
|
+
|
74
|
+
def skip_encoding
|
75
|
+
@scan_buffer.match_and_advance(/^\/\/ \!\$\*(.*?)\*\$\!/)
|
76
|
+
end
|
77
|
+
private :skip_encoding
|
78
|
+
|
79
|
+
def at_quoted_string?
|
80
|
+
@scan_buffer.at?('"')
|
81
|
+
end
|
82
|
+
private :at_quoted_string?
|
83
|
+
|
84
|
+
def scan_quoted_string
|
85
|
+
@scan_buffer.advance
|
86
|
+
token = ''
|
87
|
+
until @scan_buffer.at?('"')
|
88
|
+
if @scan_buffer.at?('\\')
|
89
|
+
@scan_buffer.advance
|
90
|
+
case @scan_buffer.peek
|
91
|
+
when 'n', 'r', 't'
|
92
|
+
token << { 'n' => "\n", 't' => "\t", 'r' => "\r" }[@scan_buffer.take]
|
93
|
+
when '"', "'", '\\'
|
94
|
+
token << @scan_buffer.take
|
95
|
+
else
|
96
|
+
raise "Uknown escape sequence \\#{@scan_buffer.peek 20}"
|
58
97
|
end
|
59
|
-
tokens << [:string, token]
|
60
|
-
i += 1
|
61
98
|
else
|
62
|
-
|
63
|
-
len = 0
|
64
|
-
len += 1 while /[^\s\t\r\n\f(){}=;,]/ =~ string[i + len, 1]
|
65
|
-
tokens << [:symbol, string[i, len]]
|
66
|
-
i += len
|
99
|
+
token << @scan_buffer.take
|
67
100
|
end
|
68
101
|
end
|
69
|
-
|
102
|
+
@scan_buffer.advance
|
103
|
+
return [token]
|
104
|
+
end
|
105
|
+
private :scan_quoted_string
|
106
|
+
|
107
|
+
def at_simple_token?
|
108
|
+
SIMPLE_TOKENS.include?(@scan_buffer.peek)
|
109
|
+
end
|
110
|
+
private :at_simple_token?
|
111
|
+
|
112
|
+
def scan_simple_token
|
113
|
+
@scan_buffer.take
|
114
|
+
end
|
115
|
+
private :scan_simple_token
|
116
|
+
|
117
|
+
def scan_bare_string
|
118
|
+
text = ""
|
119
|
+
text << @scan_buffer.take while @scan_buffer.peek(1) =~ /[^\s\t\r\n\f(){}=;,]/
|
120
|
+
return [text]
|
70
121
|
end
|
71
|
-
|
122
|
+
private :scan_bare_string
|
123
|
+
|
124
|
+
def self.tokenize(string)
|
125
|
+
Lexer.new(string).tokenize
|
126
|
+
end
|
127
|
+
|
128
|
+
end
|
72
129
|
|
73
|
-
end
|
130
|
+
end
|
@@ -13,47 +13,41 @@ module Parser
|
|
13
13
|
def self.parse(project_string)
|
14
14
|
tokens = ZergXcode::Lexer.tokenize project_string
|
15
15
|
|
16
|
-
|
17
|
-
last_token = nil
|
16
|
+
stack = [[]]
|
18
17
|
tokens.each do |token|
|
19
18
|
case token
|
20
|
-
when
|
21
|
-
|
22
|
-
when
|
23
|
-
|
24
|
-
when
|
25
|
-
last_object =
|
26
|
-
if
|
27
|
-
|
28
|
-
elsif
|
29
|
-
hash_key =
|
30
|
-
|
19
|
+
when '('
|
20
|
+
stack << Array.new
|
21
|
+
when '{'
|
22
|
+
stack << Hash.new
|
23
|
+
when ')', '}'
|
24
|
+
last_object = stack.pop
|
25
|
+
if stack.last.kind_of? Array
|
26
|
+
stack.last << last_object
|
27
|
+
elsif stack.last.kind_of? String
|
28
|
+
hash_key = stack.pop
|
29
|
+
stack.last[hash_key] = last_object
|
31
30
|
end
|
32
|
-
when :assign, :stop, :comma
|
33
|
-
|
34
31
|
when Array
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
raise 'WTFed'
|
49
|
-
end
|
50
|
-
end
|
32
|
+
token_string = token.first
|
33
|
+
if stack.last.kind_of? Hash
|
34
|
+
stack << token_string
|
35
|
+
elsif stack.last.kind_of? Array
|
36
|
+
stack.last << token_string
|
37
|
+
elsif stack.last.kind_of? String
|
38
|
+
key = stack.pop
|
39
|
+
stack.last[key] = token_string
|
40
|
+
else
|
41
|
+
p stack
|
42
|
+
raise 'WTFed'
|
43
|
+
end
|
44
|
+
when '=', ';', ','
|
51
45
|
else
|
52
46
|
raise "Unknown token #{token}"
|
53
47
|
end
|
54
48
|
end
|
55
|
-
return
|
49
|
+
return stack[0][0]
|
56
50
|
end
|
57
|
-
end
|
51
|
+
end
|
58
52
|
|
59
|
-
end
|
53
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module ZergXcode
|
2
|
+
|
3
|
+
class ScanBuffer
|
4
|
+
def initialize(string)
|
5
|
+
@string = string
|
6
|
+
@i = 0
|
7
|
+
end
|
8
|
+
|
9
|
+
def at_beginning?
|
10
|
+
@i == 0
|
11
|
+
end
|
12
|
+
|
13
|
+
def at_end?
|
14
|
+
@i == @string.length
|
15
|
+
end
|
16
|
+
|
17
|
+
def at?(literal)
|
18
|
+
peek(literal.length) == literal
|
19
|
+
end
|
20
|
+
|
21
|
+
def unconsumed
|
22
|
+
@string[@i..-1]
|
23
|
+
end
|
24
|
+
|
25
|
+
def advance(n=1)
|
26
|
+
@i += n
|
27
|
+
end
|
28
|
+
|
29
|
+
def peek(n=1)
|
30
|
+
@string[@i, n]
|
31
|
+
end
|
32
|
+
|
33
|
+
def take(n=1)
|
34
|
+
result = peek(n)
|
35
|
+
advance(n)
|
36
|
+
result
|
37
|
+
end
|
38
|
+
|
39
|
+
def match_and_advance(pattern)
|
40
|
+
match = @string[@i..-1].match(pattern)
|
41
|
+
@i += match[0].length if match
|
42
|
+
match
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -36,7 +36,8 @@ class XcodeObject
|
|
36
36
|
def self.new(*args)
|
37
37
|
return super unless self == ZergXcode::XcodeObject
|
38
38
|
if hash_isa = args.first['isa']
|
39
|
-
|
39
|
+
hash_isa = hash_isa.to_sym
|
40
|
+
classes = ZergXcode::Objects.constants.map(&:to_sym)
|
40
41
|
if classes.include? hash_isa
|
41
42
|
return ZergXcode::Objects.const_get(hash_isa).new(*args)
|
42
43
|
end
|
@@ -7,11 +7,10 @@
|
|
7
7
|
# :nodoc: namespace
|
8
8
|
module ZergXcode
|
9
9
|
|
10
|
-
|
11
|
-
# Finds the .pbxproj file inside an Xcode project.
|
12
10
|
module Paths
|
11
|
+
|
13
12
|
# The most likely project file name for the given path.
|
14
|
-
def
|
13
|
+
def project_file_at(base_path)
|
15
14
|
return base_path if File.exist?(base_path) and File.file?(base_path)
|
16
15
|
pbxfile = 'project.pbxproj'
|
17
16
|
|
@@ -48,10 +47,10 @@ module Paths
|
|
48
47
|
end
|
49
48
|
|
50
49
|
# The most likely project root dir for the given path.
|
51
|
-
def
|
50
|
+
def project_root_at(base_path)
|
52
51
|
file = project_file_at base_path
|
53
52
|
File.dirname File.dirname(file)
|
54
53
|
end
|
55
|
-
end
|
54
|
+
end
|
56
55
|
|
57
|
-
end
|
56
|
+
end
|
data/lib/zerg_xcode/shortcuts.rb
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
module ZergXcode
|
10
10
|
# Reads an Xcode project from the filesystem.
|
11
11
|
def self.load(path)
|
12
|
-
file = ZergXcode
|
12
|
+
file = ZergXcode.project_file_at path
|
13
13
|
pbx_contents = File.read file
|
14
14
|
project = Archiver.unarchive pbx_contents
|
15
15
|
project.source_filename = file
|
@@ -18,7 +18,7 @@ module ZergXcode
|
|
18
18
|
|
19
19
|
# Dumps an Xcode project to the filesystem.
|
20
20
|
def self.dump(project, path)
|
21
|
-
file = ZergXcode
|
21
|
+
file = ZergXcode.project_file_at path
|
22
22
|
pbx_contents = Archiver.archive project
|
23
23
|
File.open(file, 'w') { |f| f.write pbx_contents }
|
24
24
|
end
|
data/lib/zerg_xcode.rb
CHANGED
@@ -6,9 +6,10 @@
|
|
6
6
|
|
7
7
|
require 'zerg_xcode/file_format/archiver.rb'
|
8
8
|
require 'zerg_xcode/file_format/encoder.rb'
|
9
|
+
require 'zerg_xcode/file_format/id_generator.rb'
|
9
10
|
require 'zerg_xcode/file_format/lexer.rb'
|
10
11
|
require 'zerg_xcode/file_format/parser.rb'
|
11
|
-
require 'zerg_xcode/file_format/
|
12
|
+
require 'zerg_xcode/file_format/scan_buffer.rb'
|
12
13
|
|
13
14
|
require 'zerg_xcode/builder/runner.rb'
|
14
15
|
require 'zerg_xcode/builder/sdks.rb'
|
@@ -24,4 +25,9 @@ require 'zerg_xcode/objects/pbx_target_dependency.rb'
|
|
24
25
|
require 'zerg_xcode/objects/xc_configuration_list.rb'
|
25
26
|
require 'zerg_xcode/plugins/core/core.rb'
|
26
27
|
|
28
|
+
require 'zerg_xcode/paths.rb'
|
27
29
|
require 'zerg_xcode/shortcuts.rb'
|
30
|
+
|
31
|
+
module ZergXcode
|
32
|
+
extend ZergXcode::Paths
|
33
|
+
end
|