xcoder 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. data/Gemfile +2 -1
  2. data/README.md +46 -5
  3. data/lib/xcode/builder.rb +21 -11
  4. data/lib/xcode/info_plist.rb +3 -3
  5. data/lib/xcode/project.rb +9 -2
  6. data/lib/xcode/scheme.rb +3 -0
  7. data/lib/xcode/version.rb +1 -1
  8. data/lib/xcode/workspace.rb +7 -0
  9. data/spec/TestProject/TestProject.xcodeproj/project.pbxproj +426 -0
  10. data/spec/TestProject/TestProject.xcodeproj/xcuserdata/ray.xcuserdatad/xcschemes/TestProject.xcscheme +94 -0
  11. data/spec/TestProject/TestProject.xcodeproj/xcuserdata/ray.xcuserdatad/xcschemes/xcschememanagement.plist +27 -0
  12. data/spec/TestProject/TestProject/AppDelegate.h +15 -0
  13. data/spec/TestProject/TestProject/AppDelegate.m +69 -0
  14. data/spec/TestProject/TestProject/TestProject-Info.plist +47 -0
  15. data/spec/TestProject/TestProject/TestProject-Prefix.pch +14 -0
  16. data/spec/TestProject/TestProject/en.lproj/InfoPlist.strings +2 -0
  17. data/spec/TestProject/TestProject/main.m +18 -0
  18. data/spec/TestProject/TestProjectTests/TestProjectTests-Info.plist +22 -0
  19. data/spec/TestProject/TestProjectTests/TestProjectTests.h +13 -0
  20. data/spec/TestProject/TestProjectTests/TestProjectTests.m +32 -0
  21. data/spec/TestProject/TestProjectTests/en.lproj/InfoPlist.strings +2 -0
  22. data/spec/TestProject/build/Debug-iphoneos/TestProject-Debug-1.0.dSYM.zip +0 -0
  23. data/spec/TestProject/build/Debug-iphoneos/TestProject-Debug-1.0.ipa +0 -0
  24. data/spec/TestProject/build/Debug-iphoneos/TestProject.app.dSYM/Contents/Info.plist +20 -0
  25. data/spec/TestProject/build/Debug-iphoneos/TestProject.app.dSYM/Contents/Resources/DWARF/TestProject +0 -0
  26. data/spec/TestProject/build/Debug-iphoneos/TestProject.app/Info.plist +0 -0
  27. data/spec/TestProject/build/Debug-iphoneos/TestProject.app/PkgInfo +1 -0
  28. data/spec/TestProject/build/Debug-iphoneos/TestProject.app/ResourceRules.plist +25 -0
  29. data/spec/TestProject/build/Debug-iphoneos/TestProject.app/TestProject +0 -0
  30. data/spec/TestProject/build/Debug-iphoneos/TestProject.app/_CodeSignature/CodeResources +40 -0
  31. data/spec/TestProject/build/Debug-iphoneos/TestProject.app/embedded.mobileprovision +0 -0
  32. data/spec/TestProject/build/Debug-iphoneos/TestProject.app/en.lproj/InfoPlist.strings +0 -0
  33. data/spec/TestProject/build/TestProject.build/Debug-iphoneos/TestProject.build/Objects-normal/armv7/AppDelegate.d +3 -0
  34. data/spec/TestProject/build/TestProject.build/Debug-iphoneos/TestProject.build/Objects-normal/armv7/AppDelegate.o +0 -0
  35. data/spec/TestProject/build/TestProject.build/Debug-iphoneos/TestProject.build/Objects-normal/armv7/TestProject.LinkFileList +2 -0
  36. data/spec/TestProject/build/TestProject.build/Debug-iphoneos/TestProject.build/Objects-normal/armv7/main.d +3 -0
  37. data/spec/TestProject/build/TestProject.build/Debug-iphoneos/TestProject.build/Objects-normal/armv7/main.o +0 -0
  38. data/spec/TestProject/build/TestProject.build/Debug-iphoneos/TestProject.build/TestProject-all-target-headers.hmap +0 -0
  39. data/spec/TestProject/build/TestProject.build/Debug-iphoneos/TestProject.build/TestProject-generated-files.hmap +0 -0
  40. data/spec/TestProject/build/TestProject.build/Debug-iphoneos/TestProject.build/TestProject-own-target-headers.hmap +0 -0
  41. data/spec/TestProject/build/TestProject.build/Debug-iphoneos/TestProject.build/TestProject-project-headers.hmap +0 -0
  42. data/spec/TestProject/build/TestProject.build/Debug-iphoneos/TestProject.build/TestProject.dep +12 -0
  43. data/spec/TestProject/build/TestProject.build/Debug-iphoneos/TestProject.build/TestProject.hmap +0 -0
  44. data/spec/TestProject/build/TestProject.build/Debug-iphoneos/TestProject.build/TestProject.xcent +20 -0
  45. data/spec/TestProject/build/TestProject.build/Debug-iphoneos/TestProject.build/build-state.dat +254 -0
  46. data/spec/TestWorkspace.xcworkspace/contents.xcworkspacedata +7 -0
  47. data/spec/TestWorkspace.xcworkspace/xcuserdata/ray.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  48. data/spec/configuration_spec.rb +29 -0
  49. data/spec/project_spec.rb +43 -0
  50. data/spec/scheme_spec.rb +29 -0
  51. data/spec/target_spec.rb +25 -0
  52. data/spec/workspace_spec.rb +33 -0
  53. data/xcoder.gemspec +1 -0
  54. metadata +96 -8
data/Gemfile CHANGED
@@ -1,3 +1,4 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- gemspec
3
+ gemspec
4
+ gem 'rspec'
data/README.md CHANGED
@@ -33,9 +33,11 @@ and then require the gem in your project/rakefile/etc
33
33
 
34
34
  ### Packaging a built .app
35
35
 
36
+ After performing the above build, you can create a versioned, well named .ipa and .dSYM.zip
37
+
36
38
  builder.package
37
39
 
38
- This will produce a .ipa and a .dSYM.zip
40
+ This will produce something like: MyProject-Debug-1.0.ipa and MyProject-Debug-1.0.dSYM.zip
39
41
 
40
42
  ### Incrementing the build number
41
43
 
@@ -49,7 +51,8 @@ This will produce a .ipa and a .dSYM.zip
49
51
  Loading workspaces can be done in a similar way to projects:
50
52
 
51
53
  Xcode.workspaces.each do |w|
52
- w.describe # prints a recursive description of the structure of the workspace and its projects
54
+ w.describe # prints a recursive description of the
55
+ # structure of the workspace and its projects
53
56
  end
54
57
 
55
58
  Or, if you know the name:
@@ -59,8 +62,46 @@ Or, if you know the name:
59
62
 
60
63
  ### Schemes
61
64
 
62
- There is basic support for schemes, you can access them from a project like so:
65
+ There is basic support for schemes, you can enumerate them from a project like so:
66
+
67
+ project.schemes.each do |s|
68
+ s.builder.build
69
+ end
70
+
71
+ Or, access them by name:
72
+
73
+ builder = project.scheme('MyScheme').builder
74
+
75
+ Note: The builder behaves the same as the builder for the target/config approach and will force xcodebuild to use the local build/ directory (as per xcode3) rather than a generated temporary directory in DerivedData. This may or may not be a good thing.
76
+
77
+ ### Provisioning profiles
78
+
79
+ The library provides a mechanism to install/uninstall a provisioning profile. This normally happens as part of a build (if a profile is provided to the builder, see above), but you can do this manually:
63
80
 
64
- config = project.scheme('MyScheme').launch # Gets the Launch action for specified scheme. Can also specify 'test' to get the test action
81
+ Xcode::ProvisioningProfile.new("Myprofile.mobileprovision").install # installs profile into ~/Library
82
+
83
+ Or enumerate installed profiles:
84
+
85
+ Xcode::ProvisioningProfile.installed_profiles.each do |p|
86
+ p.uninstall # Removes the profile from ~/Library/
87
+ end
88
+
89
+ ### Security / Keychain
90
+
91
+ The missing component here is to be able to manipulate keychains. This is quite possible through the command line 'security' tool, but will probably only be necessary once per project, and so I have no plans to support this. If you can think of a use-case, please raise and issue for it!
92
+
93
+ ### Testflight
94
+
95
+ The common output of this build/package process is to upload to testflight. This may become integrated if there is demand, but you can do something like this (this is calling curl from ruby):
96
+
97
+ `curl -X POST http://testflightapp.com/api/builds.json -F file=@"#{builder.ipa_path}" -F dsym=@"#{builder.dsym_zip_path}" -F api_token='#{TESTFLIGHT_API_TOKEN}' -F team_token='#{TESTFLIGHT_TEAM_TOKEN}' -F notify=True -F notes=\"#{CHANGELOG}\" -F distribution_lists='All'`
98
+
99
+ ## Tests
100
+
101
+ There are some basic RSpec tests in the project which I suspect /wont/ work on machines without my identity installed.
102
+
103
+ Currently these tests only assert the basic project file parsing and build code and do not perform file modification tests (e.g. for info plists) or provisioning profile/keychain importing
104
+
105
+ ## Feedback
65
106
 
66
- The 'launch' and 'test' methods access the different actions within the scheme, and they map to a Xcode::Configuration object (i.e., the schemes map to a target and configuration in a traditional XCode3 project style).
107
+ Please raise issues if you find defects or have a feature request.
data/lib/xcode/builder.rb CHANGED
@@ -3,11 +3,15 @@ require 'xcode/provisioning_profile'
3
3
 
4
4
  module Xcode
5
5
  class Builder
6
- attr_accessor :profile, :identity
7
-
6
+ attr_accessor :profile, :identity, :build_path
8
7
  def initialize(config)
8
+ if config.is_a? Xcode::Scheme
9
+ @scheme = config
10
+ config = config.launch
11
+ end
9
12
  @target = config.target
10
13
  @config = config
14
+ @build_path = "#{File.dirname(@target.project.path)}/build/"
11
15
  end
12
16
 
13
17
  def install_profile
@@ -31,9 +35,14 @@ module Xcode
31
35
  cmd << "xcodebuild"
32
36
  cmd << "-sdk #{@target.project.sdk}" unless @target.project.sdk.nil?
33
37
  cmd << "-project \"#{@target.project.path}\""
34
- cmd << "-target \"#{@target.name}\""
35
- cmd << "-configuration \"#{@config.name}\""
36
- cmd << "CODE_SIGN_IDENTITY=\"#{@identity}\""
38
+
39
+ cmd << "-scheme #{@scheme.name}" unless @scheme.nil?
40
+ cmd << "-target \"#{@target.name}\"" if @scheme.nil?
41
+ cmd << "-configuration \"#{@config.name}\"" if @scheme.nil?
42
+
43
+ cmd << "CODE_SIGN_IDENTITY=\"#{@identity}\"" unless @identity.nil?
44
+ cmd << "OBJROOT=\"#{@build_path}\""
45
+ cmd << "SYMROOT=\"#{@build_path}\""
37
46
  Xcode::Shell.execute(cmd)
38
47
  end
39
48
 
@@ -41,8 +50,13 @@ module Xcode
41
50
  cmd = []
42
51
  cmd << "xcodebuild"
43
52
  cmd << "-project \"#{@target.project.path}\""
44
- cmd << "-target \"#{@target.name}\""
45
- cmd << "-configuration \"#{@config.name}\""
53
+
54
+ cmd << "-scheme #{@scheme.name}" unless @scheme.nil?
55
+ cmd << "-target \"#{@target.name}\"" if @scheme.nil?
56
+ cmd << "-configuration \"#{@config.name}\"" if @scheme.nil?
57
+
58
+ cmd << "OBJROOT=\"#{@build_path}\""
59
+ cmd << "SYMROOT=\"#{@build_path}\""
46
60
  cmd << "clean"
47
61
  Xcode::Shell.execute(cmd)
48
62
 
@@ -92,10 +106,6 @@ module Xcode
92
106
  Xcode::Shell.execute(cmd)
93
107
  end
94
108
 
95
- def build_path
96
- "#{File.dirname(@target.project.path)}/build/"
97
- end
98
-
99
109
  def configuration_build_path
100
110
  "#{build_path}/#{@config.name}-#{@target.project.sdk}"
101
111
  end
@@ -3,10 +3,10 @@ require 'pp'
3
3
 
4
4
  module Xcode
5
5
  class InfoPlist
6
- def initialize(project, plist_location)
7
- @project = project
6
+ def initialize(config, plist_location)
7
+ @config = config
8
8
 
9
- @plist_location = File.expand_path(plist_location)
9
+ @plist_location = File.expand_path("#{File.dirname(@config.target.project.path)}/#{plist_location}")
10
10
  unless File.exists?(@plist_location)
11
11
  puts 'Plist not found ' + @plist_location
12
12
  exit 1
data/lib/xcode/project.rb CHANGED
@@ -17,6 +17,13 @@ module Xcode
17
17
  parse_schemes
18
18
  # parse_configurations
19
19
  end
20
+
21
+ def scheme(name)
22
+ scheme = @schemes.select {|t| t.name == name.to_s}.first
23
+ raise "No such scheme #{name}, available schemes are #{@schemes.map {|t| t.name}.join(', ')}" if scheme.nil?
24
+ yield scheme if block_given?
25
+ scheme
26
+ end
20
27
 
21
28
  def target(name)
22
29
  target = @targets.select {|t| t.name == name.to_s}.first
@@ -43,8 +50,8 @@ module Xcode
43
50
  private
44
51
 
45
52
  def parse_schemes
46
- # schemes are in project/xcshareddata/xcschemes/*.xcscheme
47
- Dir["#{@path}/xcshareddata/xcschemes/*.xcscheme"].each do |scheme|
53
+ # schemes are in project/**/xcschemes/*.xcscheme
54
+ Dir["#{@path}/**/xcschemes/*.xcscheme"].each do |scheme|
48
55
  @schemes << Xcode::Scheme.new(self, scheme)
49
56
  end
50
57
  end
data/lib/xcode/scheme.rb CHANGED
@@ -17,6 +17,9 @@ module Xcode
17
17
  @test = parse_action(doc, 'test')
18
18
  end
19
19
 
20
+ def builder
21
+ Xcode::Builder.new(self)
22
+ end
20
23
 
21
24
  private
22
25
 
data/lib/xcode/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Xcode
2
- VERSION = "0.0.10"
2
+ VERSION = "0.0.11"
3
3
  end
@@ -19,6 +19,13 @@ module Xcode
19
19
  end
20
20
  end
21
21
 
22
+ def project(name)
23
+ project = @projects.select {|c| c.name == name.to_s}.first
24
+ raise "No such project #{name}, available projects are #{@projects.map {|c| c.name}.join(', ')}" if project.nil?
25
+ yield project if block_given?
26
+ project
27
+ end
28
+
22
29
  def describe
23
30
  puts "Workspace #{name} contains:"
24
31
  projects.each do |p|
@@ -0,0 +1,426 @@
1
+ // !$*UTF8*$!
2
+ {
3
+ archiveVersion = 1;
4
+ classes = {
5
+ };
6
+ objectVersion = 46;
7
+ objects = {
8
+
9
+ /* Begin PBXBuildFile section */
10
+ 7165D455146B4EA100DE2F0E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7165D454146B4EA100DE2F0E /* UIKit.framework */; };
11
+ 7165D457146B4EA100DE2F0E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7165D456146B4EA100DE2F0E /* Foundation.framework */; };
12
+ 7165D459146B4EA100DE2F0E /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7165D458146B4EA100DE2F0E /* CoreGraphics.framework */; };
13
+ 7165D45F146B4EA100DE2F0E /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7165D45D146B4EA100DE2F0E /* InfoPlist.strings */; };
14
+ 7165D461146B4EA100DE2F0E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 7165D460146B4EA100DE2F0E /* main.m */; };
15
+ 7165D465146B4EA100DE2F0E /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7165D464146B4EA100DE2F0E /* AppDelegate.m */; };
16
+ 7165D46D146B4EA100DE2F0E /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7165D46C146B4EA100DE2F0E /* SenTestingKit.framework */; };
17
+ 7165D46E146B4EA100DE2F0E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7165D454146B4EA100DE2F0E /* UIKit.framework */; };
18
+ 7165D46F146B4EA100DE2F0E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7165D456146B4EA100DE2F0E /* Foundation.framework */; };
19
+ 7165D477146B4EA100DE2F0E /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7165D475146B4EA100DE2F0E /* InfoPlist.strings */; };
20
+ 7165D47A146B4EA100DE2F0E /* TestProjectTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 7165D479146B4EA100DE2F0E /* TestProjectTests.m */; };
21
+ /* End PBXBuildFile section */
22
+
23
+ /* Begin PBXContainerItemProxy section */
24
+ 7165D470146B4EA100DE2F0E /* PBXContainerItemProxy */ = {
25
+ isa = PBXContainerItemProxy;
26
+ containerPortal = 7165D447146B4EA100DE2F0E /* Project object */;
27
+ proxyType = 1;
28
+ remoteGlobalIDString = 7165D44F146B4EA100DE2F0E;
29
+ remoteInfo = TestProject;
30
+ };
31
+ /* End PBXContainerItemProxy section */
32
+
33
+ /* Begin PBXFileReference section */
34
+ 7165D450146B4EA100DE2F0E /* TestProject.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TestProject.app; sourceTree = BUILT_PRODUCTS_DIR; };
35
+ 7165D454146B4EA100DE2F0E /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
36
+ 7165D456146B4EA100DE2F0E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
37
+ 7165D458146B4EA100DE2F0E /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
38
+ 7165D45C146B4EA100DE2F0E /* TestProject-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "TestProject-Info.plist"; sourceTree = "<group>"; };
39
+ 7165D45E146B4EA100DE2F0E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
40
+ 7165D460146B4EA100DE2F0E /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
41
+ 7165D462146B4EA100DE2F0E /* TestProject-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "TestProject-Prefix.pch"; sourceTree = "<group>"; };
42
+ 7165D463146B4EA100DE2F0E /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
43
+ 7165D464146B4EA100DE2F0E /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
44
+ 7165D46B146B4EA100DE2F0E /* TestProjectTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TestProjectTests.octest; sourceTree = BUILT_PRODUCTS_DIR; };
45
+ 7165D46C146B4EA100DE2F0E /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; };
46
+ 7165D474146B4EA100DE2F0E /* TestProjectTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "TestProjectTests-Info.plist"; sourceTree = "<group>"; };
47
+ 7165D476146B4EA100DE2F0E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
48
+ 7165D478146B4EA100DE2F0E /* TestProjectTests.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TestProjectTests.h; sourceTree = "<group>"; };
49
+ 7165D479146B4EA100DE2F0E /* TestProjectTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TestProjectTests.m; sourceTree = "<group>"; };
50
+ /* End PBXFileReference section */
51
+
52
+ /* Begin PBXFrameworksBuildPhase section */
53
+ 7165D44D146B4EA100DE2F0E /* Frameworks */ = {
54
+ isa = PBXFrameworksBuildPhase;
55
+ buildActionMask = 2147483647;
56
+ files = (
57
+ 7165D455146B4EA100DE2F0E /* UIKit.framework in Frameworks */,
58
+ 7165D457146B4EA100DE2F0E /* Foundation.framework in Frameworks */,
59
+ 7165D459146B4EA100DE2F0E /* CoreGraphics.framework in Frameworks */,
60
+ );
61
+ runOnlyForDeploymentPostprocessing = 0;
62
+ };
63
+ 7165D467146B4EA100DE2F0E /* Frameworks */ = {
64
+ isa = PBXFrameworksBuildPhase;
65
+ buildActionMask = 2147483647;
66
+ files = (
67
+ 7165D46D146B4EA100DE2F0E /* SenTestingKit.framework in Frameworks */,
68
+ 7165D46E146B4EA100DE2F0E /* UIKit.framework in Frameworks */,
69
+ 7165D46F146B4EA100DE2F0E /* Foundation.framework in Frameworks */,
70
+ );
71
+ runOnlyForDeploymentPostprocessing = 0;
72
+ };
73
+ /* End PBXFrameworksBuildPhase section */
74
+
75
+ /* Begin PBXGroup section */
76
+ 7165D445146B4EA100DE2F0E = {
77
+ isa = PBXGroup;
78
+ children = (
79
+ 7165D45A146B4EA100DE2F0E /* TestProject */,
80
+ 7165D472146B4EA100DE2F0E /* TestProjectTests */,
81
+ 7165D453146B4EA100DE2F0E /* Frameworks */,
82
+ 7165D451146B4EA100DE2F0E /* Products */,
83
+ );
84
+ sourceTree = "<group>";
85
+ };
86
+ 7165D451146B4EA100DE2F0E /* Products */ = {
87
+ isa = PBXGroup;
88
+ children = (
89
+ 7165D450146B4EA100DE2F0E /* TestProject.app */,
90
+ 7165D46B146B4EA100DE2F0E /* TestProjectTests.octest */,
91
+ );
92
+ name = Products;
93
+ sourceTree = "<group>";
94
+ };
95
+ 7165D453146B4EA100DE2F0E /* Frameworks */ = {
96
+ isa = PBXGroup;
97
+ children = (
98
+ 7165D454146B4EA100DE2F0E /* UIKit.framework */,
99
+ 7165D456146B4EA100DE2F0E /* Foundation.framework */,
100
+ 7165D458146B4EA100DE2F0E /* CoreGraphics.framework */,
101
+ 7165D46C146B4EA100DE2F0E /* SenTestingKit.framework */,
102
+ );
103
+ name = Frameworks;
104
+ sourceTree = "<group>";
105
+ };
106
+ 7165D45A146B4EA100DE2F0E /* TestProject */ = {
107
+ isa = PBXGroup;
108
+ children = (
109
+ 7165D463146B4EA100DE2F0E /* AppDelegate.h */,
110
+ 7165D464146B4EA100DE2F0E /* AppDelegate.m */,
111
+ 7165D45B146B4EA100DE2F0E /* Supporting Files */,
112
+ );
113
+ path = TestProject;
114
+ sourceTree = "<group>";
115
+ };
116
+ 7165D45B146B4EA100DE2F0E /* Supporting Files */ = {
117
+ isa = PBXGroup;
118
+ children = (
119
+ 7165D45C146B4EA100DE2F0E /* TestProject-Info.plist */,
120
+ 7165D45D146B4EA100DE2F0E /* InfoPlist.strings */,
121
+ 7165D460146B4EA100DE2F0E /* main.m */,
122
+ 7165D462146B4EA100DE2F0E /* TestProject-Prefix.pch */,
123
+ );
124
+ name = "Supporting Files";
125
+ sourceTree = "<group>";
126
+ };
127
+ 7165D472146B4EA100DE2F0E /* TestProjectTests */ = {
128
+ isa = PBXGroup;
129
+ children = (
130
+ 7165D478146B4EA100DE2F0E /* TestProjectTests.h */,
131
+ 7165D479146B4EA100DE2F0E /* TestProjectTests.m */,
132
+ 7165D473146B4EA100DE2F0E /* Supporting Files */,
133
+ );
134
+ path = TestProjectTests;
135
+ sourceTree = "<group>";
136
+ };
137
+ 7165D473146B4EA100DE2F0E /* Supporting Files */ = {
138
+ isa = PBXGroup;
139
+ children = (
140
+ 7165D474146B4EA100DE2F0E /* TestProjectTests-Info.plist */,
141
+ 7165D475146B4EA100DE2F0E /* InfoPlist.strings */,
142
+ );
143
+ name = "Supporting Files";
144
+ sourceTree = "<group>";
145
+ };
146
+ /* End PBXGroup section */
147
+
148
+ /* Begin PBXNativeTarget section */
149
+ 7165D44F146B4EA100DE2F0E /* TestProject */ = {
150
+ isa = PBXNativeTarget;
151
+ buildConfigurationList = 7165D47D146B4EA100DE2F0E /* Build configuration list for PBXNativeTarget "TestProject" */;
152
+ buildPhases = (
153
+ 7165D44C146B4EA100DE2F0E /* Sources */,
154
+ 7165D44D146B4EA100DE2F0E /* Frameworks */,
155
+ 7165D44E146B4EA100DE2F0E /* Resources */,
156
+ );
157
+ buildRules = (
158
+ );
159
+ dependencies = (
160
+ );
161
+ name = TestProject;
162
+ productName = TestProject;
163
+ productReference = 7165D450146B4EA100DE2F0E /* TestProject.app */;
164
+ productType = "com.apple.product-type.application";
165
+ };
166
+ 7165D46A146B4EA100DE2F0E /* TestProjectTests */ = {
167
+ isa = PBXNativeTarget;
168
+ buildConfigurationList = 7165D480146B4EA100DE2F0E /* Build configuration list for PBXNativeTarget "TestProjectTests" */;
169
+ buildPhases = (
170
+ 7165D466146B4EA100DE2F0E /* Sources */,
171
+ 7165D467146B4EA100DE2F0E /* Frameworks */,
172
+ 7165D468146B4EA100DE2F0E /* Resources */,
173
+ 7165D469146B4EA100DE2F0E /* ShellScript */,
174
+ );
175
+ buildRules = (
176
+ );
177
+ dependencies = (
178
+ 7165D471146B4EA100DE2F0E /* PBXTargetDependency */,
179
+ );
180
+ name = TestProjectTests;
181
+ productName = TestProjectTests;
182
+ productReference = 7165D46B146B4EA100DE2F0E /* TestProjectTests.octest */;
183
+ productType = "com.apple.product-type.bundle";
184
+ };
185
+ /* End PBXNativeTarget section */
186
+
187
+ /* Begin PBXProject section */
188
+ 7165D447146B4EA100DE2F0E /* Project object */ = {
189
+ isa = PBXProject;
190
+ attributes = {
191
+ LastUpgradeCheck = 0420;
192
+ };
193
+ buildConfigurationList = 7165D44A146B4EA100DE2F0E /* Build configuration list for PBXProject "TestProject" */;
194
+ compatibilityVersion = "Xcode 3.2";
195
+ developmentRegion = English;
196
+ hasScannedForEncodings = 0;
197
+ knownRegions = (
198
+ en,
199
+ );
200
+ mainGroup = 7165D445146B4EA100DE2F0E;
201
+ productRefGroup = 7165D451146B4EA100DE2F0E /* Products */;
202
+ projectDirPath = "";
203
+ projectRoot = "";
204
+ targets = (
205
+ 7165D44F146B4EA100DE2F0E /* TestProject */,
206
+ 7165D46A146B4EA100DE2F0E /* TestProjectTests */,
207
+ );
208
+ };
209
+ /* End PBXProject section */
210
+
211
+ /* Begin PBXResourcesBuildPhase section */
212
+ 7165D44E146B4EA100DE2F0E /* Resources */ = {
213
+ isa = PBXResourcesBuildPhase;
214
+ buildActionMask = 2147483647;
215
+ files = (
216
+ 7165D45F146B4EA100DE2F0E /* InfoPlist.strings in Resources */,
217
+ );
218
+ runOnlyForDeploymentPostprocessing = 0;
219
+ };
220
+ 7165D468146B4EA100DE2F0E /* Resources */ = {
221
+ isa = PBXResourcesBuildPhase;
222
+ buildActionMask = 2147483647;
223
+ files = (
224
+ 7165D477146B4EA100DE2F0E /* InfoPlist.strings in Resources */,
225
+ );
226
+ runOnlyForDeploymentPostprocessing = 0;
227
+ };
228
+ /* End PBXResourcesBuildPhase section */
229
+
230
+ /* Begin PBXShellScriptBuildPhase section */
231
+ 7165D469146B4EA100DE2F0E /* ShellScript */ = {
232
+ isa = PBXShellScriptBuildPhase;
233
+ buildActionMask = 2147483647;
234
+ files = (
235
+ );
236
+ inputPaths = (
237
+ );
238
+ outputPaths = (
239
+ );
240
+ runOnlyForDeploymentPostprocessing = 0;
241
+ shellPath = /bin/sh;
242
+ shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n";
243
+ };
244
+ /* End PBXShellScriptBuildPhase section */
245
+
246
+ /* Begin PBXSourcesBuildPhase section */
247
+ 7165D44C146B4EA100DE2F0E /* Sources */ = {
248
+ isa = PBXSourcesBuildPhase;
249
+ buildActionMask = 2147483647;
250
+ files = (
251
+ 7165D461146B4EA100DE2F0E /* main.m in Sources */,
252
+ 7165D465146B4EA100DE2F0E /* AppDelegate.m in Sources */,
253
+ );
254
+ runOnlyForDeploymentPostprocessing = 0;
255
+ };
256
+ 7165D466146B4EA100DE2F0E /* Sources */ = {
257
+ isa = PBXSourcesBuildPhase;
258
+ buildActionMask = 2147483647;
259
+ files = (
260
+ 7165D47A146B4EA100DE2F0E /* TestProjectTests.m in Sources */,
261
+ );
262
+ runOnlyForDeploymentPostprocessing = 0;
263
+ };
264
+ /* End PBXSourcesBuildPhase section */
265
+
266
+ /* Begin PBXTargetDependency section */
267
+ 7165D471146B4EA100DE2F0E /* PBXTargetDependency */ = {
268
+ isa = PBXTargetDependency;
269
+ target = 7165D44F146B4EA100DE2F0E /* TestProject */;
270
+ targetProxy = 7165D470146B4EA100DE2F0E /* PBXContainerItemProxy */;
271
+ };
272
+ /* End PBXTargetDependency section */
273
+
274
+ /* Begin PBXVariantGroup section */
275
+ 7165D45D146B4EA100DE2F0E /* InfoPlist.strings */ = {
276
+ isa = PBXVariantGroup;
277
+ children = (
278
+ 7165D45E146B4EA100DE2F0E /* en */,
279
+ );
280
+ name = InfoPlist.strings;
281
+ sourceTree = "<group>";
282
+ };
283
+ 7165D475146B4EA100DE2F0E /* InfoPlist.strings */ = {
284
+ isa = PBXVariantGroup;
285
+ children = (
286
+ 7165D476146B4EA100DE2F0E /* en */,
287
+ );
288
+ name = InfoPlist.strings;
289
+ sourceTree = "<group>";
290
+ };
291
+ /* End PBXVariantGroup section */
292
+
293
+ /* Begin XCBuildConfiguration section */
294
+ 7165D47B146B4EA100DE2F0E /* Debug */ = {
295
+ isa = XCBuildConfiguration;
296
+ buildSettings = {
297
+ ALWAYS_SEARCH_USER_PATHS = NO;
298
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
299
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
300
+ COPY_PHASE_STRIP = NO;
301
+ GCC_C_LANGUAGE_STANDARD = gnu99;
302
+ GCC_DYNAMIC_NO_PIC = NO;
303
+ GCC_OPTIMIZATION_LEVEL = 0;
304
+ GCC_PREPROCESSOR_DEFINITIONS = (
305
+ "DEBUG=1",
306
+ "$(inherited)",
307
+ );
308
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
309
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
310
+ GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
311
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
312
+ GCC_WARN_UNUSED_VARIABLE = YES;
313
+ IPHONEOS_DEPLOYMENT_TARGET = 5.0;
314
+ SDKROOT = iphoneos;
315
+ TARGETED_DEVICE_FAMILY = "1,2";
316
+ };
317
+ name = Debug;
318
+ };
319
+ 7165D47C146B4EA100DE2F0E /* Release */ = {
320
+ isa = XCBuildConfiguration;
321
+ buildSettings = {
322
+ ALWAYS_SEARCH_USER_PATHS = NO;
323
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
324
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
325
+ COPY_PHASE_STRIP = YES;
326
+ GCC_C_LANGUAGE_STANDARD = gnu99;
327
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
328
+ GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
329
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
330
+ GCC_WARN_UNUSED_VARIABLE = YES;
331
+ IPHONEOS_DEPLOYMENT_TARGET = 5.0;
332
+ OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
333
+ SDKROOT = iphoneos;
334
+ TARGETED_DEVICE_FAMILY = "1,2";
335
+ VALIDATE_PRODUCT = YES;
336
+ };
337
+ name = Release;
338
+ };
339
+ 7165D47E146B4EA100DE2F0E /* Debug */ = {
340
+ isa = XCBuildConfiguration;
341
+ buildSettings = {
342
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
343
+ GCC_PREFIX_HEADER = "TestProject/TestProject-Prefix.pch";
344
+ INFOPLIST_FILE = "TestProject/TestProject-Info.plist";
345
+ PRODUCT_NAME = "$(TARGET_NAME)";
346
+ WRAPPER_EXTENSION = app;
347
+ };
348
+ name = Debug;
349
+ };
350
+ 7165D47F146B4EA100DE2F0E /* Release */ = {
351
+ isa = XCBuildConfiguration;
352
+ buildSettings = {
353
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
354
+ GCC_PREFIX_HEADER = "TestProject/TestProject-Prefix.pch";
355
+ INFOPLIST_FILE = "TestProject/TestProject-Info.plist";
356
+ PRODUCT_NAME = "$(TARGET_NAME)";
357
+ WRAPPER_EXTENSION = app;
358
+ };
359
+ name = Release;
360
+ };
361
+ 7165D481146B4EA100DE2F0E /* Debug */ = {
362
+ isa = XCBuildConfiguration;
363
+ buildSettings = {
364
+ BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/TestProject.app/TestProject";
365
+ FRAMEWORK_SEARCH_PATHS = (
366
+ "$(SDKROOT)/Developer/Library/Frameworks",
367
+ "$(DEVELOPER_LIBRARY_DIR)/Frameworks",
368
+ );
369
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
370
+ GCC_PREFIX_HEADER = "TestProject/TestProject-Prefix.pch";
371
+ INFOPLIST_FILE = "TestProjectTests/TestProjectTests-Info.plist";
372
+ PRODUCT_NAME = "$(TARGET_NAME)";
373
+ TEST_HOST = "$(BUNDLE_LOADER)";
374
+ WRAPPER_EXTENSION = octest;
375
+ };
376
+ name = Debug;
377
+ };
378
+ 7165D482146B4EA100DE2F0E /* Release */ = {
379
+ isa = XCBuildConfiguration;
380
+ buildSettings = {
381
+ BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/TestProject.app/TestProject";
382
+ FRAMEWORK_SEARCH_PATHS = (
383
+ "$(SDKROOT)/Developer/Library/Frameworks",
384
+ "$(DEVELOPER_LIBRARY_DIR)/Frameworks",
385
+ );
386
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
387
+ GCC_PREFIX_HEADER = "TestProject/TestProject-Prefix.pch";
388
+ INFOPLIST_FILE = "TestProjectTests/TestProjectTests-Info.plist";
389
+ PRODUCT_NAME = "$(TARGET_NAME)";
390
+ TEST_HOST = "$(BUNDLE_LOADER)";
391
+ WRAPPER_EXTENSION = octest;
392
+ };
393
+ name = Release;
394
+ };
395
+ /* End XCBuildConfiguration section */
396
+
397
+ /* Begin XCConfigurationList section */
398
+ 7165D44A146B4EA100DE2F0E /* Build configuration list for PBXProject "TestProject" */ = {
399
+ isa = XCConfigurationList;
400
+ buildConfigurations = (
401
+ 7165D47B146B4EA100DE2F0E /* Debug */,
402
+ 7165D47C146B4EA100DE2F0E /* Release */,
403
+ );
404
+ defaultConfigurationIsVisible = 0;
405
+ defaultConfigurationName = Release;
406
+ };
407
+ 7165D47D146B4EA100DE2F0E /* Build configuration list for PBXNativeTarget "TestProject" */ = {
408
+ isa = XCConfigurationList;
409
+ buildConfigurations = (
410
+ 7165D47E146B4EA100DE2F0E /* Debug */,
411
+ 7165D47F146B4EA100DE2F0E /* Release */,
412
+ );
413
+ defaultConfigurationIsVisible = 0;
414
+ };
415
+ 7165D480146B4EA100DE2F0E /* Build configuration list for PBXNativeTarget "TestProjectTests" */ = {
416
+ isa = XCConfigurationList;
417
+ buildConfigurations = (
418
+ 7165D481146B4EA100DE2F0E /* Debug */,
419
+ 7165D482146B4EA100DE2F0E /* Release */,
420
+ );
421
+ defaultConfigurationIsVisible = 0;
422
+ };
423
+ /* End XCConfigurationList section */
424
+ };
425
+ rootObject = 7165D447146B4EA100DE2F0E /* Project object */;
426
+ }