costan-zerg_xcode 0.1 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,14 @@
1
+ require 'test/unit'
2
+
3
+ require 'zerg_xcode'
4
+
5
+ class PBXContainerItemProxyTest < Test::Unit::TestCase
6
+ PBXContainerItemProxy = ZergXcode::Objects::PBXContainerItemProxy
7
+
8
+ def test_target
9
+ proj = ZergXcode.load 'testdata/ZergSupport.xcodeproj/project.pbxproj'
10
+ proxy = proj['targets'][2]['dependencies'].first['targetProxy']
11
+ assert_equal PBXContainerItemProxy, proxy.class
12
+ assert_equal proj['targets'][1], proxy.target
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ require 'test/unit'
2
+
3
+ require 'zerg_xcode'
4
+
5
+ class PBXGroupTest < Test::Unit::TestCase
6
+ PBXGroup = ZergXcode::Objects::PBXGroup
7
+
8
+ def test_instantiation
9
+ proj = ZergXcode.load 'testdata/project.pbxproj'
10
+ assert_equal PBXGroup, proj['mainGroup'].class
11
+ end
12
+ end
@@ -59,4 +59,16 @@ class PBXProjectTest < Test::Unit::TestCase
59
59
  and_return(nil)
60
60
  project.save!
61
61
  end
62
+
63
+ def test_root_path
64
+ project = ZergXcode.load('testdata/ZergSupport.xcodeproj')
65
+ assert_equal 'testdata', project.root_path
66
+ end
67
+
68
+ def test_copy_metadata
69
+ project = ZergXcode.load('testdata/ZergSupport.xcodeproj')
70
+ clone = ZergXcode::XcodeObject.from project
71
+
72
+ assert_equal project.source_filename, clone.source_filename
73
+ end
62
74
  end
@@ -0,0 +1,14 @@
1
+ require 'test/unit'
2
+
3
+ require 'zerg_xcode'
4
+
5
+ class PBXTargetDependencyTest < Test::Unit::TestCase
6
+ PBXTargetDependency = ZergXcode::Objects::PBXTargetDependency
7
+
8
+ def test_target
9
+ proj = ZergXcode.load 'testdata/ZergSupport.xcodeproj/project.pbxproj'
10
+ dependency = proj['targets'][2]['dependencies'].first
11
+ assert_equal PBXTargetDependency, dependency.class
12
+ assert_equal proj['targets'][1], dependency.target
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ require 'test/unit'
2
+
3
+ require 'zerg_xcode'
4
+
5
+ class XCConfigurationListTest < Test::Unit::TestCase
6
+ XCConfigurationList = ZergXcode::Objects::XCConfigurationList
7
+
8
+ def test_instantiation
9
+ proj = ZergXcode.load 'testdata/project.pbxproj'
10
+ assert_equal XCConfigurationList, proj['buildConfigurationList'].class
11
+ end
12
+ end
@@ -46,6 +46,32 @@ class ObjectTest < Test::Unit::TestCase
46
46
  assert_equal golden_visited.sort, visited.sort
47
47
  end
48
48
 
49
+ def test_visit_once
50
+ golden_visited = [
51
+ [49, 'sub1', @sub1],
52
+ [39, 'array', @sub1[:array]],
53
+ [39, '0', 'a'],
54
+ [39, '1', 'b'],
55
+ [39, '2', 'c'],
56
+ [39, 'string', 's'],
57
+ [39, 'root', @root],
58
+ [49, 'sub2', @sub2],
59
+ [42, 'hash', @sub2[:hash]],
60
+ [42, 'k', 'v'],
61
+ [42, 'k2', 'v2'],
62
+ [42, 'sub1', @sub1],
63
+ ]
64
+ @sub1['root'] = @root
65
+
66
+ visited = []
67
+ @root.visit_once do |object, parent, key, value|
68
+ assert_equal value, parent[key], 'Parent/Key/Value check'
69
+ visited << [object.archive_id, key.to_s, value]
70
+ next true
71
+ end
72
+ assert_equal golden_visited.sort, visited.sort
73
+ end
74
+
49
75
  def test_mutating_visit
50
76
  golden_visited = [
51
77
  [49, 'sub1', @sub1],
@@ -16,7 +16,216 @@ class Plugins::ImportTest < Test::Unit::TestCase
16
16
  @plugin = ZergXcode.plugin 'import'
17
17
  end
18
18
 
19
- def test_plugin
20
- flunk
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
+ }