xcoder 0.0.10 → 0.0.11
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +2 -1
- data/README.md +46 -5
- data/lib/xcode/builder.rb +21 -11
- data/lib/xcode/info_plist.rb +3 -3
- data/lib/xcode/project.rb +9 -2
- data/lib/xcode/scheme.rb +3 -0
- data/lib/xcode/version.rb +1 -1
- data/lib/xcode/workspace.rb +7 -0
- data/spec/TestProject/TestProject.xcodeproj/project.pbxproj +426 -0
- data/spec/TestProject/TestProject.xcodeproj/xcuserdata/ray.xcuserdatad/xcschemes/TestProject.xcscheme +94 -0
- data/spec/TestProject/TestProject.xcodeproj/xcuserdata/ray.xcuserdatad/xcschemes/xcschememanagement.plist +27 -0
- data/spec/TestProject/TestProject/AppDelegate.h +15 -0
- data/spec/TestProject/TestProject/AppDelegate.m +69 -0
- data/spec/TestProject/TestProject/TestProject-Info.plist +47 -0
- data/spec/TestProject/TestProject/TestProject-Prefix.pch +14 -0
- data/spec/TestProject/TestProject/en.lproj/InfoPlist.strings +2 -0
- data/spec/TestProject/TestProject/main.m +18 -0
- data/spec/TestProject/TestProjectTests/TestProjectTests-Info.plist +22 -0
- data/spec/TestProject/TestProjectTests/TestProjectTests.h +13 -0
- data/spec/TestProject/TestProjectTests/TestProjectTests.m +32 -0
- data/spec/TestProject/TestProjectTests/en.lproj/InfoPlist.strings +2 -0
- data/spec/TestProject/build/Debug-iphoneos/TestProject-Debug-1.0.dSYM.zip +0 -0
- data/spec/TestProject/build/Debug-iphoneos/TestProject-Debug-1.0.ipa +0 -0
- data/spec/TestProject/build/Debug-iphoneos/TestProject.app.dSYM/Contents/Info.plist +20 -0
- data/spec/TestProject/build/Debug-iphoneos/TestProject.app.dSYM/Contents/Resources/DWARF/TestProject +0 -0
- data/spec/TestProject/build/Debug-iphoneos/TestProject.app/Info.plist +0 -0
- data/spec/TestProject/build/Debug-iphoneos/TestProject.app/PkgInfo +1 -0
- data/spec/TestProject/build/Debug-iphoneos/TestProject.app/ResourceRules.plist +25 -0
- data/spec/TestProject/build/Debug-iphoneos/TestProject.app/TestProject +0 -0
- data/spec/TestProject/build/Debug-iphoneos/TestProject.app/_CodeSignature/CodeResources +40 -0
- data/spec/TestProject/build/Debug-iphoneos/TestProject.app/embedded.mobileprovision +0 -0
- data/spec/TestProject/build/Debug-iphoneos/TestProject.app/en.lproj/InfoPlist.strings +0 -0
- data/spec/TestProject/build/TestProject.build/Debug-iphoneos/TestProject.build/Objects-normal/armv7/AppDelegate.d +3 -0
- data/spec/TestProject/build/TestProject.build/Debug-iphoneos/TestProject.build/Objects-normal/armv7/AppDelegate.o +0 -0
- data/spec/TestProject/build/TestProject.build/Debug-iphoneos/TestProject.build/Objects-normal/armv7/TestProject.LinkFileList +2 -0
- data/spec/TestProject/build/TestProject.build/Debug-iphoneos/TestProject.build/Objects-normal/armv7/main.d +3 -0
- data/spec/TestProject/build/TestProject.build/Debug-iphoneos/TestProject.build/Objects-normal/armv7/main.o +0 -0
- data/spec/TestProject/build/TestProject.build/Debug-iphoneos/TestProject.build/TestProject-all-target-headers.hmap +0 -0
- data/spec/TestProject/build/TestProject.build/Debug-iphoneos/TestProject.build/TestProject-generated-files.hmap +0 -0
- data/spec/TestProject/build/TestProject.build/Debug-iphoneos/TestProject.build/TestProject-own-target-headers.hmap +0 -0
- data/spec/TestProject/build/TestProject.build/Debug-iphoneos/TestProject.build/TestProject-project-headers.hmap +0 -0
- data/spec/TestProject/build/TestProject.build/Debug-iphoneos/TestProject.build/TestProject.dep +12 -0
- data/spec/TestProject/build/TestProject.build/Debug-iphoneos/TestProject.build/TestProject.hmap +0 -0
- data/spec/TestProject/build/TestProject.build/Debug-iphoneos/TestProject.build/TestProject.xcent +20 -0
- data/spec/TestProject/build/TestProject.build/Debug-iphoneos/TestProject.build/build-state.dat +254 -0
- data/spec/TestWorkspace.xcworkspace/contents.xcworkspacedata +7 -0
- data/spec/TestWorkspace.xcworkspace/xcuserdata/ray.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- data/spec/configuration_spec.rb +29 -0
- data/spec/project_spec.rb +43 -0
- data/spec/scheme_spec.rb +29 -0
- data/spec/target_spec.rb +25 -0
- data/spec/workspace_spec.rb +33 -0
- data/xcoder.gemspec +1 -0
- metadata +96 -8
data/Gemfile
CHANGED
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
|
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
|
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
|
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
|
-
|
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
|
-
|
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
|
-
|
35
|
-
cmd << "-
|
36
|
-
cmd << "
|
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
|
-
|
45
|
-
cmd << "-
|
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
|
data/lib/xcode/info_plist.rb
CHANGED
@@ -3,10 +3,10 @@ require 'pp'
|
|
3
3
|
|
4
4
|
module Xcode
|
5
5
|
class InfoPlist
|
6
|
-
def initialize(
|
7
|
-
@
|
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
|
47
|
-
Dir["#{@path}
|
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
data/lib/xcode/version.rb
CHANGED
data/lib/xcode/workspace.rb
CHANGED
@@ -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
|
+
}
|