zerg_xcode 0.1 → 0.2
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/CHANGELOG +2 -0
- data/Manifest +9 -0
- data/RUBYFORGE +2 -2
- data/lib/zerg_xcode/objects/pbx_container_item_proxy.rb +10 -0
- data/lib/zerg_xcode/objects/pbx_group.rb +3 -0
- data/lib/zerg_xcode/objects/pbx_project.rb +11 -0
- data/lib/zerg_xcode/objects/pbx_target_dependency.rb +7 -0
- data/lib/zerg_xcode/objects/xc_configuration_list.rb +3 -0
- data/lib/zerg_xcode/objects/xcode_object.rb +16 -2
- data/lib/zerg_xcode/plugins/import.rb +306 -1
- data/lib/zerg_xcode.rb +4 -0
- data/test/objects/pbx_container_item_proxy_test.rb +14 -0
- data/test/objects/pbx_group_test.rb +12 -0
- data/test/objects/pbx_project_test.rb +12 -0
- data/test/objects/pbx_target_dependency_test.rb +14 -0
- data/test/objects/xc_configuration_list_test.rb +12 -0
- data/test/objects/xcode_object_test.rb +26 -0
- data/test/plugins/import_test.rb +211 -2
- data/testdata/FlatTestApp/FlatTestApp.xcodeproj/project.pbxproj +332 -0
- data/testdata/ZergSupport.xcodeproj/project.pbxproj +33 -52
- data/zerg_xcode.gemspec +5 -5
- metadata +19 -2
data/test/plugins/import_test.rb
CHANGED
@@ -16,7 +16,216 @@ class Plugins::ImportTest < Test::Unit::TestCase
|
|
16
16
|
@plugin = ZergXcode.plugin 'import'
|
17
17
|
end
|
18
18
|
|
19
|
-
def
|
20
|
-
|
19
|
+
def test_import_identical_small
|
20
|
+
project = ZergXcode.load 'testdata/TestApp'
|
21
|
+
assert_import_identical project
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_import_identical_large
|
25
|
+
project = ZergXcode.load 'testdata/ZergSupport'
|
26
|
+
assert_import_identical project
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_import_differents
|
30
|
+
small = ZergXcode.load 'testdata/TestApp'
|
31
|
+
small_file_set = Set.new(small.all_files.map { |file| file[:path] })
|
32
|
+
small_target_set = Set.new(small['targets'].map { |t| t['name'] })
|
33
|
+
small_target_filesets = target_filesets small
|
34
|
+
|
35
|
+
large = ZergXcode.load 'testdata/ZergSupport'
|
36
|
+
large_file_set = Set.new(large.all_files.map { |file| file[:path] })
|
37
|
+
large_target_set = Set.new(large['targets'].map { |t| t['name'] })
|
38
|
+
large_target_filesets = target_filesets large
|
39
|
+
|
40
|
+
@plugin.import_project! large, small
|
41
|
+
merged_files_set = Set.new(small.all_files.map { |file| file[:path] })
|
42
|
+
merged_target_set = Set.new(small['targets'].map { |t| t['name'] })
|
43
|
+
merged_target_filesets = target_filesets small
|
44
|
+
|
45
|
+
assert_equal((small_file_set + large_file_set), merged_files_set,
|
46
|
+
"Files")
|
47
|
+
assert_equal((small_target_set + large_target_set), merged_target_set,
|
48
|
+
"Targets")
|
49
|
+
assert_equal small_target_filesets.merge(large_target_filesets),
|
50
|
+
merged_target_filesets, "Targets / files associations"
|
51
|
+
end
|
52
|
+
|
53
|
+
# Produces a map of target to file associations for a project.
|
54
|
+
#
|
55
|
+
# Looks like this:
|
56
|
+
# { 'target1' => Set(['filename1.m', 'filename2.h']) }
|
57
|
+
def target_filesets(project)
|
58
|
+
Hash[*(project['targets']).map { |target|
|
59
|
+
[target['name'], Set.new(target.all_files.map { |f| f[:object]['path'] })]
|
60
|
+
}.flatten]
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
# Clones a project, zaps its metadata, and then tries to merge the clone onto
|
65
|
+
# the original. The result should be the original.
|
66
|
+
def assert_import_identical(project)
|
67
|
+
real_files = project.all_files.select { |f| f[:path][0, 1] == '.' }
|
68
|
+
pre_archive = ZergXcode::Archiver.archive_to_hash project
|
69
|
+
|
70
|
+
cloned_project = ZergXcode::XcodeObject.from project
|
71
|
+
cloned_project.visit_once do |object, parent, key, value|
|
72
|
+
object.version = nil
|
73
|
+
object.archive_id = nil
|
74
|
+
next true
|
75
|
+
end
|
76
|
+
|
77
|
+
file_ops = @plugin.import_project! cloned_project, project
|
78
|
+
post_archive = ZergXcode::Archiver.archive_to_hash project
|
79
|
+
assert_equal pre_archive, post_archive
|
80
|
+
|
81
|
+
assert_equal real_files.length, file_ops.length, 'File operations length'
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_bin_mappings
|
85
|
+
proj = ZergXcode.load 'testdata/TestApp'
|
86
|
+
mappings = @plugin.cross_reference proj, ZergXcode::XcodeObject.from(proj)
|
87
|
+
|
88
|
+
bins = @plugin.bin_mappings mappings, proj
|
89
|
+
merge, overwrite = bins[:merge], bins[:overwrite]
|
90
|
+
|
91
|
+
assert_equal Set.new, merge.intersection(overwrite),
|
92
|
+
"Merge and overwrite sets should be disjoint"
|
93
|
+
|
94
|
+
[proj['mainGroup'], proj['buildConfigurationList']].each do |object|
|
95
|
+
assert merge.include?(object), "#{object.xref_key.inspect} not in merge"
|
96
|
+
end
|
97
|
+
|
98
|
+
assert !merge.include?(proj), "Project should not be in any bin"
|
99
|
+
assert !overwrite.include?(proj), "Project should not be in any bin"
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_cross_reference_identical_small
|
103
|
+
project = ZergXcode.load 'testdata/TestApp'
|
104
|
+
assert_cross_reference_covers_project project
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_cross_reference_identical_large
|
108
|
+
project = ZergXcode.load 'testdata/ZergSupport'
|
109
|
+
assert_cross_reference_covers_project project
|
110
|
+
end
|
111
|
+
|
112
|
+
def assert_cross_reference_covers_project(project)
|
113
|
+
cloned_project = ZergXcode::XcodeObject.from project
|
114
|
+
|
115
|
+
map = @plugin.cross_reference project, cloned_project
|
116
|
+
objects = Set.new([cloned_project])
|
117
|
+
cloned_project.visit_once do |object, parent, key, value|
|
118
|
+
objects << value if value.kind_of? ZergXcode::XcodeObject
|
119
|
+
true
|
120
|
+
end
|
121
|
+
|
122
|
+
objects.each do |object|
|
123
|
+
assert map.include?(object), "Missed object #{object.xref_key.inspect}"
|
124
|
+
|
125
|
+
assert_equal object.xref_key, map[object].xref_key,
|
126
|
+
"Merge keys for cross-referenced objects do not match"
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_execute_file_ops
|
131
|
+
ops = [{ :op => :delete, :path => 'testdata/junk.m' },
|
132
|
+
{ :op => :copy, :from => 'test/awesome.m',
|
133
|
+
:to => 'testdata/NewDir/awesome.m' },
|
134
|
+
{ :op => :copy, :from => 'test/ghost.m',
|
135
|
+
:to => 'testdata/Dir/ghost.m' },
|
136
|
+
]
|
137
|
+
flexmock(File).should_receive(:exist?).with('testdata/junk.m').
|
138
|
+
and_return(true)
|
139
|
+
flexmock(FileUtils).should_receive(:rm_r).with('testdata/junk.m').
|
140
|
+
and_return(nil)
|
141
|
+
flexmock(File).should_receive(:exist?).with('testdata/NewDir').
|
142
|
+
and_return(false)
|
143
|
+
flexmock(FileUtils).should_receive(:mkdir_p).with('testdata/NewDir').
|
144
|
+
and_return(nil)
|
145
|
+
flexmock(File).should_receive(:exist?).with('test/awesome.m').
|
146
|
+
and_return(true)
|
147
|
+
flexmock(FileUtils).should_receive(:cp_r).
|
148
|
+
with('test/awesome.m', 'testdata/NewDir/awesome.m').
|
149
|
+
and_return(nil)
|
150
|
+
flexmock(File).should_receive(:exist?).with('testdata/Dir').
|
151
|
+
and_return(true)
|
152
|
+
flexmock(File).should_receive(:exist?).with('test/ghost.m').
|
153
|
+
and_return(false)
|
154
|
+
|
155
|
+
output = capture_output { @plugin.execute_file_ops! ops }
|
156
|
+
assert output.index('test/ghost.m'), "Output does not indicate copy failure"
|
157
|
+
end
|
158
|
+
|
159
|
+
def test_import_file_ops_flatten
|
160
|
+
small = ZergXcode.load 'testdata/TestApp'
|
161
|
+
flat = ZergXcode.load 'testdata/FlatTestApp'
|
162
|
+
|
163
|
+
golden_ops = [
|
164
|
+
['delete', 'testdata/TestApp/Classes/TestAppAppDelegate.h', '*'],
|
165
|
+
['delete', 'testdata/TestApp/Classes/TestAppAppDelegate.m', '*'],
|
166
|
+
['delete', 'testdata/TestApp/Classes/TestAppViewController.h', '*'],
|
167
|
+
['delete', 'testdata/TestApp/Classes/TestAppViewController.m', '*'],
|
168
|
+
['copy', 'testdata/TestApp/TestAppAppDelegate.h',
|
169
|
+
'testdata/FlatTestApp/TestAppAppDelegate.h'],
|
170
|
+
['copy', 'testdata/TestApp/TestAppAppDelegate.m',
|
171
|
+
'testdata/FlatTestApp/TestAppAppDelegate.m'],
|
172
|
+
['copy', 'testdata/TestApp/TestAppViewController.h',
|
173
|
+
'testdata/FlatTestApp/TestAppViewController.h'],
|
174
|
+
['copy', 'testdata/TestApp/TestAppViewController.m',
|
175
|
+
'testdata/FlatTestApp/TestAppViewController.m'],
|
176
|
+
['copy', 'testdata/TestApp/TestApp_Prefix.pch',
|
177
|
+
'testdata/FlatTestApp/TestApp_Prefix.pch'],
|
178
|
+
['copy', 'testdata/TestApp/main.m',
|
179
|
+
'testdata/FlatTestApp/main.m'],
|
180
|
+
['copy', 'testdata/TestApp/TestAppViewController.xib',
|
181
|
+
'testdata/FlatTestApp/TestAppViewController.xib'],
|
182
|
+
['copy', 'testdata/TestApp/MainWindow.xib',
|
183
|
+
'testdata/FlatTestApp/MainWindow.xib'],
|
184
|
+
['copy', 'testdata/TestApp/Info.plist',
|
185
|
+
'testdata/FlatTestApp/Info.plist'],
|
186
|
+
]
|
187
|
+
|
188
|
+
|
189
|
+
file_ops = @plugin.import_project! flat, small
|
190
|
+
flat_ops = file_ops.map do |op|
|
191
|
+
[op[:op].to_s, op[:to] || op[:path], op[:from] || '*']
|
192
|
+
end
|
193
|
+
assert_equal golden_ops.sort, flat_ops.sort
|
194
|
+
end
|
195
|
+
|
196
|
+
def test_import_file_ops_branch
|
197
|
+
small = ZergXcode.load 'testdata/TestApp'
|
198
|
+
flat = ZergXcode.load 'testdata/FlatTestApp'
|
199
|
+
|
200
|
+
golden_ops = [
|
201
|
+
['delete', 'testdata/FlatTestApp/TestAppAppDelegate.h', '*'],
|
202
|
+
['delete', 'testdata/FlatTestApp/TestAppAppDelegate.m', '*'],
|
203
|
+
['delete', 'testdata/FlatTestApp/TestAppViewController.h', '*'],
|
204
|
+
['delete', 'testdata/FlatTestApp/TestAppViewController.m', '*'],
|
205
|
+
['copy', 'testdata/FlatTestApp/Classes/TestAppAppDelegate.h',
|
206
|
+
'testdata/TestApp/Classes/TestAppAppDelegate.h'],
|
207
|
+
['copy', 'testdata/FlatTestApp/Classes/TestAppAppDelegate.m',
|
208
|
+
'testdata/TestApp/Classes/TestAppAppDelegate.m'],
|
209
|
+
['copy', 'testdata/FlatTestApp/Classes/TestAppViewController.h',
|
210
|
+
'testdata/TestApp/Classes/TestAppViewController.h'],
|
211
|
+
['copy', 'testdata/FlatTestApp/Classes/TestAppViewController.m',
|
212
|
+
'testdata/TestApp/Classes/TestAppViewController.m'],
|
213
|
+
['copy', 'testdata/FlatTestApp/TestApp_Prefix.pch',
|
214
|
+
'testdata/TestApp/TestApp_Prefix.pch'],
|
215
|
+
['copy', 'testdata/FlatTestApp/main.m',
|
216
|
+
'testdata/TestApp/main.m'],
|
217
|
+
['copy', 'testdata/FlatTestApp/TestAppViewController.xib',
|
218
|
+
'testdata/TestApp/TestAppViewController.xib'],
|
219
|
+
['copy', 'testdata/FlatTestApp/MainWindow.xib',
|
220
|
+
'testdata/TestApp/MainWindow.xib'],
|
221
|
+
['copy', 'testdata/FlatTestApp/Info.plist',
|
222
|
+
'testdata/TestApp/Info.plist'],
|
223
|
+
]
|
224
|
+
|
225
|
+
file_ops = @plugin.import_project! small, flat
|
226
|
+
branch_ops = file_ops.map do |op|
|
227
|
+
[op[:op].to_s, op[:to] || op[:path], op[:from] || '*']
|
228
|
+
end
|
229
|
+
assert_equal golden_ops.sort, branch_ops.sort
|
21
230
|
end
|
22
231
|
end
|
@@ -0,0 +1,332 @@
|
|
1
|
+
// !$*UTF8*$!
|
2
|
+
{
|
3
|
+
archiveVersion = 1;
|
4
|
+
classes = {
|
5
|
+
};
|
6
|
+
objectVersion = 45;
|
7
|
+
objects = {
|
8
|
+
|
9
|
+
/* Begin PBXBuildFile section */
|
10
|
+
1D3623260D0F684500981E51 /* TestAppAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3623250D0F684500981E51 /* TestAppAppDelegate.m */; };
|
11
|
+
1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; };
|
12
|
+
1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; };
|
13
|
+
1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; };
|
14
|
+
288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765A40DF7441C002DB57D /* CoreGraphics.framework */; };
|
15
|
+
2899E5220DE3E06400AC0155 /* TestAppViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2899E5210DE3E06400AC0155 /* TestAppViewController.xib */; };
|
16
|
+
28AD733F0D9D9553002E5188 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 28AD733E0D9D9553002E5188 /* MainWindow.xib */; };
|
17
|
+
28D7ACF80DDB3853001CB0EB /* TestAppViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D7ACF70DDB3853001CB0EB /* TestAppViewController.m */; };
|
18
|
+
5795E2960F52771600AD2893 /* TestAppAppDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D3623240D0F684500981E51 /* TestAppAppDelegate.h */; };
|
19
|
+
5795E2970F52771600AD2893 /* TestAppViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 28D7ACF60DDB3853001CB0EB /* TestAppViewController.h */; };
|
20
|
+
/* End PBXBuildFile section */
|
21
|
+
|
22
|
+
/* Begin PBXFileReference section */
|
23
|
+
1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
24
|
+
1D3623240D0F684500981E51 /* TestAppAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestAppAppDelegate.h; path = ../TestAppAppDelegate.h; sourceTree = "<group>"; };
|
25
|
+
1D3623250D0F684500981E51 /* TestAppAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TestAppAppDelegate.m; path = ../TestAppAppDelegate.m; sourceTree = "<group>"; };
|
26
|
+
1D6058910D05DD3D006BFB54 /* TestApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TestApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
27
|
+
1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
|
28
|
+
288765A40DF7441C002DB57D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
|
29
|
+
2899E5210DE3E06400AC0155 /* TestAppViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TestAppViewController.xib; sourceTree = "<group>"; };
|
30
|
+
28AD733E0D9D9553002E5188 /* MainWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainWindow.xib; sourceTree = "<group>"; };
|
31
|
+
28D7ACF60DDB3853001CB0EB /* TestAppViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestAppViewController.h; path = ../TestAppViewController.h; sourceTree = "<group>"; };
|
32
|
+
28D7ACF70DDB3853001CB0EB /* TestAppViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TestAppViewController.m; path = ../TestAppViewController.m; sourceTree = "<group>"; };
|
33
|
+
29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
|
34
|
+
32CA4F630368D1EE00C91783 /* TestApp_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestApp_Prefix.pch; sourceTree = "<group>"; };
|
35
|
+
57A5555D0F50DE4B00642792 /* libTestLib.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libTestLib.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
36
|
+
8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
37
|
+
/* End PBXFileReference section */
|
38
|
+
|
39
|
+
/* Begin PBXFrameworksBuildPhase section */
|
40
|
+
1D60588F0D05DD3D006BFB54 /* Frameworks */ = {
|
41
|
+
isa = PBXFrameworksBuildPhase;
|
42
|
+
buildActionMask = 2147483647;
|
43
|
+
files = (
|
44
|
+
1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */,
|
45
|
+
1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */,
|
46
|
+
288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */,
|
47
|
+
);
|
48
|
+
runOnlyForDeploymentPostprocessing = 0;
|
49
|
+
};
|
50
|
+
57A5555B0F50DE4B00642792 /* Frameworks */ = {
|
51
|
+
isa = PBXFrameworksBuildPhase;
|
52
|
+
buildActionMask = 2147483647;
|
53
|
+
files = (
|
54
|
+
);
|
55
|
+
runOnlyForDeploymentPostprocessing = 0;
|
56
|
+
};
|
57
|
+
/* End PBXFrameworksBuildPhase section */
|
58
|
+
|
59
|
+
/* Begin PBXGroup section */
|
60
|
+
080E96DDFE201D6D7F000001 /* Classes */ = {
|
61
|
+
isa = PBXGroup;
|
62
|
+
children = (
|
63
|
+
1D3623240D0F684500981E51 /* TestAppAppDelegate.h */,
|
64
|
+
1D3623250D0F684500981E51 /* TestAppAppDelegate.m */,
|
65
|
+
28D7ACF60DDB3853001CB0EB /* TestAppViewController.h */,
|
66
|
+
28D7ACF70DDB3853001CB0EB /* TestAppViewController.m */,
|
67
|
+
);
|
68
|
+
path = Classes;
|
69
|
+
sourceTree = "<group>";
|
70
|
+
};
|
71
|
+
19C28FACFE9D520D11CA2CBB /* Products */ = {
|
72
|
+
isa = PBXGroup;
|
73
|
+
children = (
|
74
|
+
1D6058910D05DD3D006BFB54 /* TestApp.app */,
|
75
|
+
57A5555D0F50DE4B00642792 /* libTestLib.a */,
|
76
|
+
);
|
77
|
+
name = Products;
|
78
|
+
sourceTree = "<group>";
|
79
|
+
};
|
80
|
+
29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {
|
81
|
+
isa = PBXGroup;
|
82
|
+
children = (
|
83
|
+
080E96DDFE201D6D7F000001 /* Classes */,
|
84
|
+
29B97315FDCFA39411CA2CEA /* Other Sources */,
|
85
|
+
29B97317FDCFA39411CA2CEA /* Resources */,
|
86
|
+
29B97323FDCFA39411CA2CEA /* Frameworks */,
|
87
|
+
19C28FACFE9D520D11CA2CBB /* Products */,
|
88
|
+
);
|
89
|
+
name = CustomTemplate;
|
90
|
+
sourceTree = "<group>";
|
91
|
+
};
|
92
|
+
29B97315FDCFA39411CA2CEA /* Other Sources */ = {
|
93
|
+
isa = PBXGroup;
|
94
|
+
children = (
|
95
|
+
32CA4F630368D1EE00C91783 /* TestApp_Prefix.pch */,
|
96
|
+
29B97316FDCFA39411CA2CEA /* main.m */,
|
97
|
+
);
|
98
|
+
name = "Other Sources";
|
99
|
+
sourceTree = "<group>";
|
100
|
+
};
|
101
|
+
29B97317FDCFA39411CA2CEA /* Resources */ = {
|
102
|
+
isa = PBXGroup;
|
103
|
+
children = (
|
104
|
+
2899E5210DE3E06400AC0155 /* TestAppViewController.xib */,
|
105
|
+
28AD733E0D9D9553002E5188 /* MainWindow.xib */,
|
106
|
+
8D1107310486CEB800E47090 /* Info.plist */,
|
107
|
+
);
|
108
|
+
name = Resources;
|
109
|
+
sourceTree = "<group>";
|
110
|
+
};
|
111
|
+
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
|
112
|
+
isa = PBXGroup;
|
113
|
+
children = (
|
114
|
+
1DF5F4DF0D08C38300B7A737 /* UIKit.framework */,
|
115
|
+
1D30AB110D05D00D00671497 /* Foundation.framework */,
|
116
|
+
288765A40DF7441C002DB57D /* CoreGraphics.framework */,
|
117
|
+
);
|
118
|
+
name = Frameworks;
|
119
|
+
sourceTree = "<group>";
|
120
|
+
};
|
121
|
+
/* End PBXGroup section */
|
122
|
+
|
123
|
+
/* Begin PBXHeadersBuildPhase section */
|
124
|
+
57A555590F50DE4B00642792 /* Headers */ = {
|
125
|
+
isa = PBXHeadersBuildPhase;
|
126
|
+
buildActionMask = 2147483647;
|
127
|
+
files = (
|
128
|
+
5795E2960F52771600AD2893 /* TestAppAppDelegate.h in Headers */,
|
129
|
+
5795E2970F52771600AD2893 /* TestAppViewController.h in Headers */,
|
130
|
+
);
|
131
|
+
runOnlyForDeploymentPostprocessing = 0;
|
132
|
+
};
|
133
|
+
/* End PBXHeadersBuildPhase section */
|
134
|
+
|
135
|
+
/* Begin PBXNativeTarget section */
|
136
|
+
1D6058900D05DD3D006BFB54 /* TestApp */ = {
|
137
|
+
isa = PBXNativeTarget;
|
138
|
+
buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "TestApp" */;
|
139
|
+
buildPhases = (
|
140
|
+
1D60588D0D05DD3D006BFB54 /* Resources */,
|
141
|
+
1D60588E0D05DD3D006BFB54 /* Sources */,
|
142
|
+
1D60588F0D05DD3D006BFB54 /* Frameworks */,
|
143
|
+
);
|
144
|
+
buildRules = (
|
145
|
+
);
|
146
|
+
dependencies = (
|
147
|
+
);
|
148
|
+
name = TestApp;
|
149
|
+
productName = TestApp;
|
150
|
+
productReference = 1D6058910D05DD3D006BFB54 /* TestApp.app */;
|
151
|
+
productType = "com.apple.product-type.application";
|
152
|
+
};
|
153
|
+
57A5555C0F50DE4B00642792 /* TestLib */ = {
|
154
|
+
isa = PBXNativeTarget;
|
155
|
+
buildConfigurationList = 57A555600F50DE6B00642792 /* Build configuration list for PBXNativeTarget "TestLib" */;
|
156
|
+
buildPhases = (
|
157
|
+
57A555590F50DE4B00642792 /* Headers */,
|
158
|
+
57A5555A0F50DE4B00642792 /* Sources */,
|
159
|
+
57A5555B0F50DE4B00642792 /* Frameworks */,
|
160
|
+
);
|
161
|
+
buildRules = (
|
162
|
+
);
|
163
|
+
dependencies = (
|
164
|
+
);
|
165
|
+
name = TestLib;
|
166
|
+
productName = TestLib;
|
167
|
+
productReference = 57A5555D0F50DE4B00642792 /* libTestLib.a */;
|
168
|
+
productType = "com.apple.product-type.library.static";
|
169
|
+
};
|
170
|
+
/* End PBXNativeTarget section */
|
171
|
+
|
172
|
+
/* Begin PBXProject section */
|
173
|
+
29B97313FDCFA39411CA2CEA /* Project object */ = {
|
174
|
+
isa = PBXProject;
|
175
|
+
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "TestApp" */;
|
176
|
+
compatibilityVersion = "Xcode 3.1";
|
177
|
+
hasScannedForEncodings = 1;
|
178
|
+
mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */;
|
179
|
+
projectDirPath = "";
|
180
|
+
projectRoot = "";
|
181
|
+
targets = (
|
182
|
+
1D6058900D05DD3D006BFB54 /* TestApp */,
|
183
|
+
57A5555C0F50DE4B00642792 /* TestLib */,
|
184
|
+
);
|
185
|
+
};
|
186
|
+
/* End PBXProject section */
|
187
|
+
|
188
|
+
/* Begin PBXResourcesBuildPhase section */
|
189
|
+
1D60588D0D05DD3D006BFB54 /* Resources */ = {
|
190
|
+
isa = PBXResourcesBuildPhase;
|
191
|
+
buildActionMask = 2147483647;
|
192
|
+
files = (
|
193
|
+
28AD733F0D9D9553002E5188 /* MainWindow.xib in Resources */,
|
194
|
+
2899E5220DE3E06400AC0155 /* TestAppViewController.xib in Resources */,
|
195
|
+
);
|
196
|
+
runOnlyForDeploymentPostprocessing = 0;
|
197
|
+
};
|
198
|
+
/* End PBXResourcesBuildPhase section */
|
199
|
+
|
200
|
+
/* Begin PBXSourcesBuildPhase section */
|
201
|
+
1D60588E0D05DD3D006BFB54 /* Sources */ = {
|
202
|
+
isa = PBXSourcesBuildPhase;
|
203
|
+
buildActionMask = 2147483647;
|
204
|
+
files = (
|
205
|
+
1D60589B0D05DD56006BFB54 /* main.m in Sources */,
|
206
|
+
);
|
207
|
+
runOnlyForDeploymentPostprocessing = 0;
|
208
|
+
};
|
209
|
+
57A5555A0F50DE4B00642792 /* Sources */ = {
|
210
|
+
isa = PBXSourcesBuildPhase;
|
211
|
+
buildActionMask = 2147483647;
|
212
|
+
files = (
|
213
|
+
1D3623260D0F684500981E51 /* TestAppAppDelegate.m in Sources */,
|
214
|
+
28D7ACF80DDB3853001CB0EB /* TestAppViewController.m in Sources */,
|
215
|
+
);
|
216
|
+
runOnlyForDeploymentPostprocessing = 0;
|
217
|
+
};
|
218
|
+
/* End PBXSourcesBuildPhase section */
|
219
|
+
|
220
|
+
/* Begin XCBuildConfiguration section */
|
221
|
+
1D6058940D05DD3E006BFB54 /* Debug */ = {
|
222
|
+
isa = XCBuildConfiguration;
|
223
|
+
buildSettings = {
|
224
|
+
ALWAYS_SEARCH_USER_PATHS = NO;
|
225
|
+
COPY_PHASE_STRIP = NO;
|
226
|
+
GCC_DYNAMIC_NO_PIC = NO;
|
227
|
+
GCC_OPTIMIZATION_LEVEL = 0;
|
228
|
+
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
229
|
+
GCC_PREFIX_HEADER = TestApp_Prefix.pch;
|
230
|
+
INFOPLIST_FILE = Info.plist;
|
231
|
+
PRODUCT_NAME = TestApp;
|
232
|
+
};
|
233
|
+
name = Debug;
|
234
|
+
};
|
235
|
+
1D6058950D05DD3E006BFB54 /* Release */ = {
|
236
|
+
isa = XCBuildConfiguration;
|
237
|
+
buildSettings = {
|
238
|
+
ALWAYS_SEARCH_USER_PATHS = NO;
|
239
|
+
COPY_PHASE_STRIP = YES;
|
240
|
+
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
241
|
+
GCC_PREFIX_HEADER = TestApp_Prefix.pch;
|
242
|
+
INFOPLIST_FILE = Info.plist;
|
243
|
+
PRODUCT_NAME = TestApp;
|
244
|
+
};
|
245
|
+
name = Release;
|
246
|
+
};
|
247
|
+
57A5555E0F50DE4D00642792 /* Debug */ = {
|
248
|
+
isa = XCBuildConfiguration;
|
249
|
+
buildSettings = {
|
250
|
+
ALWAYS_SEARCH_USER_PATHS = NO;
|
251
|
+
COPY_PHASE_STRIP = NO;
|
252
|
+
GCC_DYNAMIC_NO_PIC = NO;
|
253
|
+
GCC_OPTIMIZATION_LEVEL = 0;
|
254
|
+
PREBINDING = NO;
|
255
|
+
PRODUCT_NAME = TestLib;
|
256
|
+
};
|
257
|
+
name = Debug;
|
258
|
+
};
|
259
|
+
57A5555F0F50DE4D00642792 /* Release */ = {
|
260
|
+
isa = XCBuildConfiguration;
|
261
|
+
buildSettings = {
|
262
|
+
ALWAYS_SEARCH_USER_PATHS = NO;
|
263
|
+
COPY_PHASE_STRIP = YES;
|
264
|
+
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
265
|
+
GCC_ENABLE_FIX_AND_CONTINUE = NO;
|
266
|
+
PREBINDING = NO;
|
267
|
+
PRODUCT_NAME = TestLib;
|
268
|
+
ZERO_LINK = NO;
|
269
|
+
};
|
270
|
+
name = Release;
|
271
|
+
};
|
272
|
+
C01FCF4F08A954540054247B /* Debug */ = {
|
273
|
+
isa = XCBuildConfiguration;
|
274
|
+
buildSettings = {
|
275
|
+
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
|
276
|
+
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
277
|
+
GCC_C_LANGUAGE_STANDARD = c99;
|
278
|
+
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
279
|
+
GCC_WARN_UNUSED_VARIABLE = YES;
|
280
|
+
ONLY_ACTIVE_ARCH = YES;
|
281
|
+
PREBINDING = NO;
|
282
|
+
SDKROOT = iphoneos2.2.1;
|
283
|
+
};
|
284
|
+
name = Debug;
|
285
|
+
};
|
286
|
+
C01FCF5008A954540054247B /* Release */ = {
|
287
|
+
isa = XCBuildConfiguration;
|
288
|
+
buildSettings = {
|
289
|
+
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
|
290
|
+
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
291
|
+
GCC_C_LANGUAGE_STANDARD = c99;
|
292
|
+
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
293
|
+
GCC_WARN_UNUSED_VARIABLE = YES;
|
294
|
+
PREBINDING = NO;
|
295
|
+
SDKROOT = iphoneos2.2.1;
|
296
|
+
};
|
297
|
+
name = Release;
|
298
|
+
};
|
299
|
+
/* End XCBuildConfiguration section */
|
300
|
+
|
301
|
+
/* Begin XCConfigurationList section */
|
302
|
+
1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "TestApp" */ = {
|
303
|
+
isa = XCConfigurationList;
|
304
|
+
buildConfigurations = (
|
305
|
+
1D6058940D05DD3E006BFB54 /* Debug */,
|
306
|
+
1D6058950D05DD3E006BFB54 /* Release */,
|
307
|
+
);
|
308
|
+
defaultConfigurationIsVisible = 0;
|
309
|
+
defaultConfigurationName = Release;
|
310
|
+
};
|
311
|
+
57A555600F50DE6B00642792 /* Build configuration list for PBXNativeTarget "TestLib" */ = {
|
312
|
+
isa = XCConfigurationList;
|
313
|
+
buildConfigurations = (
|
314
|
+
57A5555E0F50DE4D00642792 /* Debug */,
|
315
|
+
57A5555F0F50DE4D00642792 /* Release */,
|
316
|
+
);
|
317
|
+
defaultConfigurationIsVisible = 0;
|
318
|
+
defaultConfigurationName = Release;
|
319
|
+
};
|
320
|
+
C01FCF4E08A954540054247B /* Build configuration list for PBXProject "TestApp" */ = {
|
321
|
+
isa = XCConfigurationList;
|
322
|
+
buildConfigurations = (
|
323
|
+
C01FCF4F08A954540054247B /* Debug */,
|
324
|
+
C01FCF5008A954540054247B /* Release */,
|
325
|
+
);
|
326
|
+
defaultConfigurationIsVisible = 0;
|
327
|
+
defaultConfigurationName = Release;
|
328
|
+
};
|
329
|
+
/* End XCConfigurationList section */
|
330
|
+
};
|
331
|
+
rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
|
332
|
+
}
|