xcodeproject 0.1.1 → 0.2.3

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.
Files changed (35) hide show
  1. data/.yardopts +7 -0
  2. data/README.md +123 -2
  3. data/lib/xcodeproject/build_phase_node.rb +1 -1
  4. data/lib/xcodeproject/builder.rb +21 -0
  5. data/lib/xcodeproject/data.rb +1 -1
  6. data/lib/xcodeproject/exceptions.rb +1 -1
  7. data/lib/xcodeproject/extend/array.rb +1 -1
  8. data/lib/xcodeproject/extend/hash.rb +1 -1
  9. data/lib/xcodeproject/file_node.rb +1 -1
  10. data/lib/xcodeproject/formatter.rb +1 -1
  11. data/lib/xcodeproject/node.rb +1 -1
  12. data/lib/xcodeproject/pbx_build_file.rb +1 -1
  13. data/lib/xcodeproject/pbx_file_reference.rb +1 -1
  14. data/lib/xcodeproject/pbx_group.rb +9 -1
  15. data/lib/xcodeproject/pbx_native_target.rb +1 -1
  16. data/lib/xcodeproject/pbx_project.rb +1 -1
  17. data/lib/xcodeproject/project.rb +21 -1
  18. data/lib/xcodeproject/root_node.rb +2 -2
  19. data/lib/xcodeproject/spec/build_phase_node_spec.rb +5 -5
  20. data/lib/xcodeproject/spec/file_node_spec.rb +7 -7
  21. data/lib/xcodeproject/spec/pbx_build_file_spec.rb +2 -2
  22. data/lib/xcodeproject/spec/pbx_file_reference_spec.rb +1 -1
  23. data/lib/xcodeproject/spec/pbx_group_spec.rb +55 -11
  24. data/lib/xcodeproject/spec/pbx_native_target_spec.rb +2 -2
  25. data/lib/xcodeproject/spec/pbx_project_spec.rb +4 -4
  26. data/lib/xcodeproject/spec/project_spec.rb +7 -7
  27. data/lib/xcodeproject/spec/spec_helper.rb +1 -1
  28. data/lib/xcodeproject/spec/xc_configuration_list_spec.rb +2 -2
  29. data/lib/xcodeproject/uuid_generator.rb +1 -1
  30. data/lib/xcodeproject/version.rb +2 -2
  31. data/lib/xcodeproject/xc_build_configuration.rb +1 -1
  32. data/lib/xcodeproject/xc_configuration_list.rb +1 -1
  33. data/rakefile +4 -0
  34. data/xcodeproject.gemspec +4 -2
  35. metadata +33 -5
data/.yardopts ADDED
@@ -0,0 +1,7 @@
1
+ --markup markdown
2
+ --markup-provider redcarpet
3
+ --charset utf-8
4
+ --readme README.md
5
+ -
6
+ README.md
7
+ LICENSE
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- XCodeProject
1
+ XcodeProject
2
2
  ===
3
3
  Ruby API for working with Xcode project files
4
4
 
@@ -6,9 +6,130 @@ Installation
6
6
  ---
7
7
  `gem install xcodeproject`
8
8
 
9
+ Getting started
10
+ ---
11
+ A simple example that displays all targets of the project will look like this:
12
+
13
+ require 'rubygems'
14
+ require 'xcodeproject'
15
+
16
+ proj = XcodeProject::Project.new('path/to/example.xcodeproj')
17
+ proj.read.targets.each do |target|
18
+ puts target.name
19
+ end
20
+
21
+ First, you must create an XcodeProject::Project object like this:
22
+
23
+ proj = XcodeProject::Project.new('path/to/example.xcodeproj')
24
+
25
+ Or you can find all projects are located in the specified directory:
26
+
27
+ projs = XcodeProject::Project.find_projs('path/to/dir')
28
+
29
+ After creating the project object, you can read the data from it:
30
+
31
+ data = proj.read
32
+ p data.target('example').config('Release').build_settings
33
+
34
+ Or rewrite data:
35
+
36
+ proj.change do |data|
37
+ data.target('example').config('Release').build_settings['GCC_VERSION'] = 'com.apple.compilers.llvmgcc42'
38
+ end
39
+
40
+ Files, groups and directories
41
+ ---
42
+ Displaying all of top-level groups:
43
+
44
+ data.main_group.children.each do |child|
45
+ p child.name
46
+ end
47
+
48
+ Displaying files of specified group:
49
+
50
+ group = data.group('path/from/main_group')
51
+ group.files.each do |file|
52
+ p file.name
53
+ end
54
+
55
+ You can get group's (or file's) group path (the path from the main group):
56
+
57
+ group.group_path
58
+
59
+ Directories are groups that are explicitly represented in the file system. For them, you can also get a file path:
60
+
61
+ group.total_path
62
+
63
+ You can add a group to project by specifying the path from the main group:
64
+
65
+ data.add_group('path/from/main_group')
66
+
67
+ Or from the current group:
68
+
69
+ group.add_group('path/from/current_group')
70
+
71
+ To add a directory to the project, you must specify the file path to it:
72
+
73
+ data.add_dir('group_path/to/parent', '/file_path/to/dir')
74
+ group.add_dir('/file_path/to/dir')
75
+
76
+ Adding files are same:
77
+
78
+ data.add_file('group_path/to/parent', '/file_path/to/file')
79
+ group.add_file('/file_path/to/file')
80
+
81
+ You can also remove files, groups and directories from the project:
82
+
83
+ data.remove_file('path/from/main_group')
84
+ data.remove_group('path/from/main_group')
85
+
86
+ group.remove_file('path/from/current_group')
87
+ group.remove_group('path/from/current_group')
88
+
89
+ Targets
90
+ ---
91
+ Getting the target object is simple:
92
+
93
+ target = data.target('example')
94
+
95
+ After adding a file to the project, you can add it to target's build phase:
96
+
97
+ file = main_group.add_file('/file_path/to/file')
98
+ target.add_source(file)
99
+
100
+ Or remove from target's build phase:
101
+
102
+ target.remove_source(file)
103
+
104
+ Building the project
105
+ ---
106
+ XcodeProject uses XcodeBuilder for building projects
107
+
108
+ Building the project:
109
+
110
+ proj.build
111
+
112
+ Cleaning the project:
113
+
114
+ proj.clean
115
+
116
+ Archiving the project:
117
+
118
+ proj.builder.scheme = 'example'
119
+ proj.archive
120
+
121
+ You can specify options for builder:
122
+
123
+ proj.builder.configuration = 'Debug'
124
+ proj.builder.arch = 'armv7'
125
+ proj.build
126
+
127
+ You can find out more about XcodeBuilder [here][xcodebuilder].
128
+
9
129
  License
10
130
  ---
11
- XCodeProject is provided under the terms of the [the MIT license][license]
131
+ XcodeProject is provided under the terms of the [the MIT license][license]
12
132
 
133
+ [xcodebuilder]:https://github.com/lukeredpath/xcodebuild-rb
13
134
  [license]:http://www.opensource.org/licenses/MIT
14
135
 
@@ -1,7 +1,7 @@
1
1
  require 'xcodeproject/node'
2
2
  require 'xcodeproject/pbx_build_file'
3
3
 
4
- module XCodeProject
4
+ module XcodeProject
5
5
  class BuildPhaseNode < Node
6
6
  def initialize (root, uuid, data)
7
7
  super(root, uuid, data)
@@ -0,0 +1,21 @@
1
+ require 'xcodebuild'
2
+
3
+ module XcodeProject
4
+ class Builder < XcodeBuild::Tasks::BuildTask
5
+ def initialize (&block)
6
+ super(block)
7
+ end
8
+
9
+ def build
10
+ run('build')
11
+ end
12
+
13
+ def clean
14
+ run('clean')
15
+ end
16
+
17
+ def archive
18
+ run('archive')
19
+ end
20
+ end
21
+ end
@@ -22,7 +22,7 @@
22
22
 
23
23
  require 'xcodeproject/root_node'
24
24
 
25
- module XCodeProject
25
+ module XcodeProject
26
26
  class Data
27
27
  def initialize (data, wd)
28
28
  @root = RootNode.new(data, wd)
@@ -1,4 +1,4 @@
1
- module XCodeProject
1
+ module XcodeProject
2
2
  class ParseError < StandardError; end
3
3
  class FilePathError < StandardError; end
4
4
  class GroupPathError < StandardError; end
@@ -1,7 +1,7 @@
1
1
  require 'xcodeproject/formatter'
2
2
 
3
3
  class Array
4
- def to_plist (fmtr = XCodeProject::Formatter.new)
4
+ def to_plist (fmtr = XcodeProject::Formatter.new)
5
5
  items = map { |item| "#{item.to_plist(fmtr)}" }
6
6
  %{(#{fmtr.t2}#{items.join(",#{fmtr.t2}")}#{fmtr.t1})}
7
7
  end
@@ -1,7 +1,7 @@
1
1
  require 'xcodeproject/formatter'
2
2
 
3
3
  class Hash
4
- def to_plist (fmtr = XCodeProject::Formatter.new)
4
+ def to_plist (fmtr = XcodeProject::Formatter.new)
5
5
  fmtr.inc
6
6
  items = map { |key, value| "#{key.to_plist(fmtr)} = #{value.to_plist(fmtr)};" }
7
7
  fmtr.dec
@@ -1,7 +1,7 @@
1
1
  require 'xcodeproject/node'
2
2
  require 'pathname'
3
3
 
4
- module XCodeProject
4
+ module XcodeProject
5
5
  class FileNode < Node
6
6
  attr_reader :name
7
7
  attr_reader :path
@@ -1,4 +1,4 @@
1
- module XCodeProject
1
+ module XcodeProject
2
2
  class Formatter
3
3
  def initialize
4
4
  @counter = 0
@@ -1,4 +1,4 @@
1
- module XCodeProject
1
+ module XcodeProject
2
2
  class Node
3
3
  attr_reader :uuid
4
4
  attr_reader :isa
@@ -1,6 +1,6 @@
1
1
  require 'xcodeproject/node'
2
2
 
3
- module XCodeProject
3
+ module XcodeProject
4
4
  class PBXBuildFile < Node
5
5
  attr_reader :file_ref
6
6
 
@@ -1,7 +1,7 @@
1
1
  require 'xcodeproject/file_node'
2
2
  require 'xcodeproject/exceptions'
3
3
 
4
- module XCodeProject
4
+ module XcodeProject
5
5
  class PBXFileReference < FileNode
6
6
  def initialize (root, uuid, data)
7
7
  super(root, uuid, data)
@@ -2,7 +2,7 @@ require 'xcodeproject/pbx_file_reference'
2
2
  require 'xcodeproject/exceptions'
3
3
  require 'pathname'
4
4
 
5
- module XCodeProject
5
+ module XcodeProject
6
6
  class PBXGroup < FileNode
7
7
  def initialize (root, uuid, data)
8
8
  super(root, uuid, data)
@@ -13,6 +13,14 @@ module XCodeProject
13
13
  @children.map {|uuid| root.object!(uuid)}
14
14
  end
15
15
 
16
+ def groups
17
+ children.select {|child| child.is_a?(PBXGroup) }
18
+ end
19
+
20
+ def files
21
+ children.select {|child| child.is_a?(PBXFileReference) }
22
+ end
23
+
16
24
  def child (gpath)
17
25
  gpath = Pathname.new(gpath).cleanpath
18
26
 
@@ -1,7 +1,7 @@
1
1
  require 'xcodeproject/xc_configuration_list'
2
2
  require 'xcodeproject/build_phase_node'
3
3
 
4
- module XCodeProject
4
+ module XcodeProject
5
5
  class PBXNativeTarget < Node
6
6
  attr_reader :name
7
7
  attr_reader :product_name
@@ -1,6 +1,6 @@
1
1
  require 'xcodeproject/node'
2
2
 
3
- module XCodeProject
3
+ module XcodeProject
4
4
  class PBXProject < Node
5
5
  attr_reader :main_group
6
6
  attr_reader :product_ref_group
@@ -20,12 +20,14 @@
20
20
  # IN THE SOFTWARE.
21
21
  #++
22
22
 
23
+ require 'xcodeproject/builder'
23
24
  require 'xcodeproject/data'
24
25
  require 'pathname'
25
26
  require 'find'
26
27
 
27
- module XCodeProject
28
+ module XcodeProject
28
29
  class Project
30
+ attr_reader :builder
29
31
  attr_reader :bundle_path
30
32
  attr_reader :file_path
31
33
  attr_reader :name
@@ -45,6 +47,12 @@ module XCodeProject
45
47
  @bundle_path = path
46
48
  @file_path = bundle_path.join('project.pbxproj')
47
49
  @name = bundle_path.basename('.*').to_s
50
+
51
+ @builder = Builder.new do |t|
52
+ t.project_name = path.basename
53
+ t.invoke_from_within = path.dirname
54
+ t.formatter = XcodeBuild::Formatters::ProgressFormatter.new
55
+ end
48
56
  end
49
57
 
50
58
  def change
@@ -63,6 +71,18 @@ module XCodeProject
63
71
  end
64
72
  end
65
73
 
74
+ def build
75
+ builder.build
76
+ end
77
+
78
+ def clean
79
+ builder.clean
80
+ end
81
+
82
+ def archive
83
+ builder.archive
84
+ end
85
+
66
86
  def doctor
67
87
  change {|data| data.doctor }
68
88
  end
@@ -31,7 +31,7 @@ require 'xcodeproject/extend/string'
31
31
  require 'xcodeproject/extend/array'
32
32
  require 'xcodeproject/extend/hash'
33
33
 
34
- module XCodeProject
34
+ module XcodeProject
35
35
  class RootNode
36
36
  def initialize (data, wd)
37
37
  @data, @wd = data, Pathname.new(wd)
@@ -50,7 +50,7 @@ module XCodeProject
50
50
 
51
51
  def object (uuid)
52
52
  data = @objects[uuid]
53
- XCodeProject.const_get(data['isa']).new(self, uuid, data) unless data.nil?
53
+ XcodeProject.const_get(data['isa']).new(self, uuid, data) unless data.nil?
54
54
  end
55
55
 
56
56
  def object! (uuid)
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe XCodeProject::BuildPhaseNode do
3
+ describe XcodeProject::BuildPhaseNode do
4
4
  let(:root) { prepare_example_project.read.send(:root) }
5
5
  let(:file_ref) { root.project.main_group.file_ref('group1a/file2c.m') }
6
6
  let(:build_file) { root.project.target('example').sources_build_phase.send(:build_file, file_ref.uuid) }
@@ -9,7 +9,7 @@ describe XCodeProject::BuildPhaseNode do
9
9
  describe "#files" do
10
10
  it "returns an array of files" do
11
11
  obj.files.should be_an_instance_of(Array)
12
- obj.files.each {|obj| obj.should be_an_instance_of(XCodeProject::PBXFileReference) }
12
+ obj.files.each {|obj| obj.should be_an_instance_of(XcodeProject::PBXFileReference) }
13
13
  end
14
14
  end
15
15
 
@@ -56,19 +56,19 @@ describe XCodeProject::BuildPhaseNode do
56
56
  describe "#build_files" do
57
57
  it "returns an array of files" do
58
58
  obj.send(:build_files).should be_an_instance_of(Array)
59
- obj.send(:build_files).each {|obj| obj.should be_an_instance_of(XCodeProject::PBXBuildFile) }
59
+ obj.send(:build_files).each {|obj| obj.should be_an_instance_of(XcodeProject::PBXBuildFile) }
60
60
  end
61
61
  end
62
62
 
63
63
  describe "#build_file" do
64
64
  it "returns the object" do
65
- obj.send(:build_file, file_ref.uuid).should be_an_instance_of(XCodeProject::PBXBuildFile)
65
+ obj.send(:build_file, file_ref.uuid).should be_an_instance_of(XcodeProject::PBXBuildFile)
66
66
  end
67
67
  end
68
68
 
69
69
  describe "#add_build_file" do
70
70
  it "adds the build file, returns the object" do
71
- obj.send(:add_build_file, file_ref.uuid).should be_an_instance_of(XCodeProject::PBXBuildFile)
71
+ obj.send(:add_build_file, file_ref.uuid).should be_an_instance_of(XcodeProject::PBXBuildFile)
72
72
  end
73
73
  end
74
74
 
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe XCodeProject::FileNode do
3
+ describe XcodeProject::FileNode do
4
4
  let(:data_name) { Hash['name', 'file.name'] }
5
5
  let(:data_path) { Hash['path', 'path/to/file.name'] }
6
6
  let(:data_path_name) { data_path.merge!(data_name) }
@@ -10,19 +10,19 @@ describe XCodeProject::FileNode do
10
10
  context "if the name is initialized " do
11
11
  it "returns the name as is" do
12
12
  [data_name, data_path_name].each do |data|
13
- XCodeProject::FileNode.new(stub, stub, data).name.should eql(data['name'])
13
+ XcodeProject::FileNode.new(stub, stub, data).name.should eql(data['name'])
14
14
  end
15
15
  end
16
16
  end
17
17
  context "if the name isn't initialized" do
18
18
  context "and the path is initialized " do
19
19
  it "returns the name as basename of the path" do
20
- XCodeProject::FileNode.new(stub, stub, data_path).name.should eql(File.basename(data_path['path']))
20
+ XcodeProject::FileNode.new(stub, stub, data_path).name.should eql(File.basename(data_path['path']))
21
21
  end
22
22
  end
23
23
  context "and the path isn't initialized" do
24
24
  it "returns nil" do
25
- XCodeProject::FileNode.new(stub, stub, data_empty).name.should be_nil
25
+ XcodeProject::FileNode.new(stub, stub, data_empty).name.should be_nil
26
26
  end
27
27
  end
28
28
  end
@@ -32,13 +32,13 @@ describe XCodeProject::FileNode do
32
32
  context "if the path is initialized " do
33
33
  it "returns the path as is" do
34
34
  [data_path, data_path_name].each do |data|
35
- XCodeProject::FileNode.new(stub, stub, data_path).path.should eql(data['path'])
35
+ XcodeProject::FileNode.new(stub, stub, data_path).path.should eql(data['path'])
36
36
  end
37
37
  end
38
38
  end
39
39
  context "if the path isn't initialized" do
40
40
  it "returns nil" do
41
- XCodeProject::FileNode.new(stub, stub, data_empty).path.should be_nil
41
+ XcodeProject::FileNode.new(stub, stub, data_empty).path.should be_nil
42
42
  end
43
43
  end
44
44
  end
@@ -58,7 +58,7 @@ describe XCodeProject::FileNode do
58
58
  context "if the object is nested file node" do
59
59
  it "returns the parent object" do
60
60
  file_nodes_gpaths do |gpath|
61
- main_group.child(gpath).parent.should be_an_instance_of(XCodeProject::PBXGroup)
61
+ main_group.child(gpath).parent.should be_an_instance_of(XcodeProject::PBXGroup)
62
62
  end
63
63
  end
64
64
  end
@@ -1,13 +1,13 @@
1
1
  require "spec_helper"
2
2
 
3
- describe XCodeProject::PBXBuildFile do
3
+ describe XcodeProject::PBXBuildFile do
4
4
  let(:root) { prepare_example_project.read.send(:root) }
5
5
  let(:obj_file_ref) { root.project.main_group.file_ref("group1a/file2c.m") }
6
6
  let(:obj) { root.project.target('example').sources_build_phase.send(:build_file, obj_file_ref.uuid) }
7
7
 
8
8
  describe "#file_ref" do
9
9
  it "returns the object" do
10
- obj.file_ref.should be_an_instance_of(XCodeProject::PBXFileReference)
10
+ obj.file_ref.should be_an_instance_of(XcodeProject::PBXFileReference)
11
11
  end
12
12
  end
13
13
 
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe XCodeProject::PBXFileReference do
3
+ describe XcodeProject::PBXFileReference do
4
4
  let(:root) { prepare_example_project.read.send(:root) }
5
5
  let(:obj_gpath) { "group1a/file2c.m" }
6
6
  let(:obj) { root.project.main_group.file_ref(obj_gpath) }
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe XCodeProject::PBXGroup do
3
+ describe XcodeProject::PBXGroup do
4
4
  let(:root) { prepare_example_project.read.send(:root) }
5
5
  let(:obj) { root.project.main_group.group('group1a') }
6
6
 
@@ -21,6 +21,50 @@ describe XCodeProject::PBXGroup do
21
21
  end
22
22
  end
23
23
 
24
+ describe "#files" do
25
+ context "if children exists" do
26
+ it "Returns an array of only those children who are files" do
27
+ chs = obj.files
28
+ chs.should be_an_instance_of(Array)
29
+ chs.size.should > 0
30
+ chs.each do |child|
31
+ child.should be_an_instance_of(XcodeProject::PBXFileReference)
32
+ end
33
+ end
34
+ end
35
+ context "if children doesn't exist" do
36
+ let(:obj) { root.project.main_group.group("group1a/dir2c") }
37
+
38
+ it "returns an empty array" do
39
+ chs = obj.files
40
+ chs.should be_an_instance_of(Array)
41
+ chs.size.should eql(0)
42
+ end
43
+ end
44
+ end
45
+
46
+ describe "#groups" do
47
+ context "if children exists" do
48
+ it "Returns an array of only those children who are group" do
49
+ chs = obj.groups
50
+ chs.should be_an_instance_of(Array)
51
+ chs.size.should > 0
52
+ chs.each do |child|
53
+ child.should be_an_instance_of(XcodeProject::PBXGroup)
54
+ end
55
+ end
56
+ end
57
+ context "if children doesn't exist" do
58
+ let(:obj) { root.project.main_group.group("group1a/dir2c/dir3a/dir4a") }
59
+
60
+ it "returns an empty array" do
61
+ chs = obj.groups
62
+ chs.should be_an_instance_of(Array)
63
+ chs.size.should eql(0)
64
+ end
65
+ end
66
+ end
67
+
24
68
  describe "#child" do
25
69
  context "if passed '.'" do
26
70
  it "returns the self" do
@@ -101,7 +145,7 @@ describe XCodeProject::PBXGroup do
101
145
  describe "#group" do
102
146
  context "if the group exists" do
103
147
  it "returns the object" do
104
- obj.group('group2a').should be_an_instance_of(XCodeProject::PBXGroup)
148
+ obj.group('group2a').should be_an_instance_of(XcodeProject::PBXGroup)
105
149
  end
106
150
  end
107
151
  context "if the group doesn't exist" do
@@ -114,7 +158,7 @@ describe XCodeProject::PBXGroup do
114
158
  describe "#file_ref" do
115
159
  context "if the file reference exists" do
116
160
  it "returns the object" do
117
- obj.file_ref('file2c.m').should be_an_instance_of(XCodeProject::PBXFileReference)
161
+ obj.file_ref('file2c.m').should be_an_instance_of(XcodeProject::PBXFileReference)
118
162
  end
119
163
  end
120
164
  context "if the file reference doesn't exist" do
@@ -127,12 +171,12 @@ describe XCodeProject::PBXGroup do
127
171
  describe "#add_file_ref" do
128
172
  context "if passed the relative path" do
129
173
  it "adds the file reference, returns the object" do
130
- obj.send(:add_file_ref, 'dir1b/file2b.m').should be_an_instance_of(XCodeProject::PBXFileReference)
174
+ obj.send(:add_file_ref, 'dir1b/file2b.m').should be_an_instance_of(XcodeProject::PBXFileReference)
131
175
  end
132
176
  end
133
177
  context "if passed the absolute path" do
134
178
  it "adds the file reference, returns the object" do
135
- obj.send(:add_file_ref, "#{example_project_dir}/dir1b/file2b.m").should be_an_instance_of(XCodeProject::PBXFileReference)
179
+ obj.send(:add_file_ref, "#{example_project_dir}/dir1b/file2b.m").should be_an_instance_of(XcodeProject::PBXFileReference)
136
180
  end
137
181
  end
138
182
  context "if file reference already exists" do
@@ -143,7 +187,7 @@ describe XCodeProject::PBXGroup do
143
187
  end
144
188
  context "if file doesn't exit" do
145
189
  it "raise an exception " do
146
- lambda { obj.send(:add_file_ref, "file2c_ghost.m") }.should raise_exception(XCodeProject::FilePathError)
190
+ lambda { obj.send(:add_file_ref, "file2c_ghost.m") }.should raise_exception(XcodeProject::FilePathError)
147
191
  end
148
192
  end
149
193
  end
@@ -151,7 +195,7 @@ describe XCodeProject::PBXGroup do
151
195
  describe "#add_group" do
152
196
  it "adds the group, returns the object" do
153
197
  group_obj = obj.add_group("group2a_ghost")
154
- group_obj.should be_an_instance_of(XCodeProject::PBXGroup)
198
+ group_obj.should be_an_instance_of(XcodeProject::PBXGroup)
155
199
  group_obj.group?.should eql(true)
156
200
  end
157
201
  end
@@ -159,7 +203,7 @@ describe XCodeProject::PBXGroup do
159
203
  describe "#add_dir" do
160
204
  it "adds the group, returns the object" do
161
205
  group_obj = obj.add_dir("dir1c")
162
- group_obj.should be_an_instance_of(XCodeProject::PBXGroup)
206
+ group_obj.should be_an_instance_of(XcodeProject::PBXGroup)
163
207
  group_obj.dir?.should eql(true)
164
208
  end
165
209
  it "adds all dir's children" do
@@ -172,7 +216,7 @@ describe XCodeProject::PBXGroup do
172
216
  end
173
217
  context "if dir doesn't exit" do
174
218
  it "raise an exception " do
175
- lambda { obj.add_dir("dir2c_ghost") }.should raise_exception(XCodeProject::FilePathError)
219
+ lambda { obj.add_dir("dir2c_ghost") }.should raise_exception(XcodeProject::FilePathError)
176
220
  end
177
221
  end
178
222
  end
@@ -180,7 +224,7 @@ describe XCodeProject::PBXGroup do
180
224
  describe "#create_group" do
181
225
  context "if passed a group name" do
182
226
  it "creates and returns the group object" do
183
- obj.create_group('group2a_ghost').should be_an_instance_of(XCodeProject::PBXGroup)
227
+ obj.create_group('group2a_ghost').should be_an_instance_of(XcodeProject::PBXGroup)
184
228
  end
185
229
  end
186
230
  context "if passed a group path" do
@@ -190,7 +234,7 @@ describe XCodeProject::PBXGroup do
190
234
  'group2a_ghost/group3a_ghost',
191
235
  'group2a_ghost/../create_group2a_ghost/./group3a_ghost'
192
236
  ].each do |gpath|
193
- obj.create_group(gpath).should be_an_instance_of(XCodeProject::PBXGroup)
237
+ obj.create_group(gpath).should be_an_instance_of(XcodeProject::PBXGroup)
194
238
  end
195
239
  end
196
240
  end
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe XCodeProject::PBXNativeTarget do
3
+ describe XcodeProject::PBXNativeTarget do
4
4
  before(:each) { @data = prepare_example_project.read }
5
5
  let(:obj) { obj = @data.target('example') }
6
6
 
@@ -30,7 +30,7 @@ describe XCodeProject::PBXNativeTarget do
30
30
 
31
31
  describe "#build_configurations_list" do
32
32
  it "returns the build configuration list object" do
33
- obj.build_configurations_list.should be_an_instance_of(XCodeProject::XCConfigurationList)
33
+ obj.build_configurations_list.should be_an_instance_of(XcodeProject::XCConfigurationList)
34
34
  end
35
35
  end
36
36
 
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe XCodeProject::PBXProject do
3
+ describe XcodeProject::PBXProject do
4
4
  before(:each) { @data = prepare_example_project.read }
5
5
  let(:obj) { @data.project }
6
6
 
@@ -8,14 +8,14 @@ describe XCodeProject::PBXProject do
8
8
  it "returns the array of target objects" do
9
9
  targets = obj.targets
10
10
  targets.should be_an_instance_of(Array)
11
- targets.each {|obj| obj.should be_an_instance_of(XCodeProject::PBXNativeTarget) }
11
+ targets.each {|obj| obj.should be_an_instance_of(XcodeProject::PBXNativeTarget) }
12
12
  end
13
13
  end
14
14
 
15
15
  describe "#target" do
16
16
  context "if the target exists" do
17
17
  it "returns the object" do
18
- obj.target('example').should be_an_instance_of(XCodeProject::PBXNativeTarget)
18
+ obj.target('example').should be_an_instance_of(XcodeProject::PBXNativeTarget)
19
19
  end
20
20
  end
21
21
  context "if the target doesn't exist" do
@@ -27,7 +27,7 @@ describe XCodeProject::PBXProject do
27
27
 
28
28
  describe "#main_group" do
29
29
  it "returns the main group object" do
30
- obj.main_group.should be_an_instance_of(XCodeProject::PBXGroup)
30
+ obj.main_group.should be_an_instance_of(XcodeProject::PBXGroup)
31
31
  end
32
32
  end
33
33
  end
@@ -1,19 +1,19 @@
1
1
  require "spec_helper"
2
2
 
3
- describe XCodeProject::Project do
3
+ describe XcodeProject::Project do
4
4
  let(:proj) { prepare_example_project }
5
5
 
6
6
  describe "#new" do
7
7
  context "if the project file exists" do
8
8
  it "constructs an project object" do
9
- XCodeProject::Project.new(example_project_bundle_path).should be_an_instance_of(XCodeProject::Project)
9
+ XcodeProject::Project.new(example_project_bundle_path).should be_an_instance_of(XcodeProject::Project)
10
10
  end
11
11
  end
12
12
 
13
13
  context "if the project file doesn't exist" do
14
14
  let(:proj_ne) { "#{example_empty_sandbox_path}/ghost.xcodeproj" }
15
15
  it "trows the exception" do
16
- lambda { XCodeProject::Project.new(proj_ne) }.should raise_exception(XCodeProject::FilePathError)
16
+ lambda { XcodeProject::Project.new(proj_ne) }.should raise_exception(XcodeProject::FilePathError)
17
17
  end
18
18
  end
19
19
  end
@@ -33,7 +33,7 @@ describe XCodeProject::Project do
33
33
  describe "#find_projs" do
34
34
  context "if a path contains project files" do
35
35
  it "returns an array of project objects" do
36
- projs = XCodeProject::Project.find_projs(example_sandbox_path)
36
+ projs = XcodeProject::Project.find_projs(example_sandbox_path)
37
37
  projs.size.should eql(1)
38
38
  projs.first.bundle_path.should eql(proj.bundle_path)
39
39
  end
@@ -41,7 +41,7 @@ describe XCodeProject::Project do
41
41
 
42
42
  context "if a path doesn't contain project files" do
43
43
  it "returns an empty array" do
44
- projs = XCodeProject::Project.find_projs(example_empty_sandbox_path)
44
+ projs = XcodeProject::Project.find_projs(example_empty_sandbox_path)
45
45
  projs.size.should eql(0)
46
46
  end
47
47
  end
@@ -49,7 +49,7 @@ describe XCodeProject::Project do
49
49
 
50
50
  describe "#read" do
51
51
  it "returns the data object" do
52
- proj.read.should be_an_instance_of(XCodeProject::Data)
52
+ proj.read.should be_an_instance_of(XcodeProject::Data)
53
53
  end
54
54
 
55
55
  it "reads the project file" do
@@ -71,7 +71,7 @@ describe XCodeProject::Project do
71
71
  it "reads the file file and then writes it" do
72
72
  proj_mock = mock.proxy(proj)
73
73
  proj_mock.read
74
- proj_mock.write(is_a(XCodeProject::Data))
74
+ proj_mock.write(is_a(XcodeProject::Data))
75
75
  proj.change {|data| }
76
76
  end
77
77
  end
@@ -34,7 +34,7 @@ def prepare_example_project
34
34
  %x{ rm -vr #{example_project_dir} }
35
35
  %x{ cp -vr #{proj_source_dir} #{example_sandbox_path} }
36
36
 
37
- XCodeProject::Project.new(example_project_bundle_path)
37
+ XcodeProject::Project.new(example_project_bundle_path)
38
38
  end
39
39
 
40
40
  def example_sandbox_path; Pathname.new('/tmp/example_sandbox') end
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe XCodeProject::XCConfigurationList do
3
+ describe XcodeProject::XCConfigurationList do
4
4
  before(:each) { @data = prepare_example_project.read }
5
5
  let(:obj) { obj = @data.target('example').build_configurations_list }
6
6
 
@@ -8,7 +8,7 @@ describe XCodeProject::XCConfigurationList do
8
8
  let(:name) { 'Release' }
9
9
 
10
10
  it "returns build configuration object" do
11
- obj.build_configuration(name).should be_an_instance_of(XCodeProject::XCBuildConfiguration)
11
+ obj.build_configuration(name).should be_an_instance_of(XcodeProject::XCBuildConfiguration)
12
12
  end
13
13
  end
14
14
 
@@ -1,6 +1,6 @@
1
1
  require 'uuid'
2
2
 
3
- module XCodeProject
3
+ module XcodeProject
4
4
  class UUIDGenerator
5
5
  def initialize
6
6
  @generator = UUID.new
@@ -1,3 +1,3 @@
1
- module Xcodeproject
2
- VERSION = "0.1.1"
1
+ module XcodeProject
2
+ VERSION = "0.2.3"
3
3
  end
@@ -1,6 +1,6 @@
1
1
  require 'xcodeproject/node'
2
2
 
3
- module XCodeProject
3
+ module XcodeProject
4
4
  class XCBuildConfiguration < Node
5
5
  attr_reader :name
6
6
  attr_accessor :build_settings
@@ -1,6 +1,6 @@
1
1
  require 'xcodeproject/node'
2
2
 
3
- module XCodeProject
3
+ module XcodeProject
4
4
  class XCConfigurationList < Node
5
5
  attr_reader :default_configuration_name
6
6
  attr_reader :default_configuration_is_visible
data/rakefile CHANGED
@@ -1,3 +1,7 @@
1
1
  #!/usr/bin/env rake
2
2
  require 'rubygems'
3
3
  require 'bundler/gem_tasks'
4
+ require 'yard'
5
+
6
+ YARD::Rake::YardocTask.new
7
+
data/xcodeproject.gemspec CHANGED
@@ -3,9 +3,9 @@ require File.expand_path('../lib/xcodeproject/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
5
  gem.name = 'xcodeproject'
6
- gem.version = Xcodeproject::VERSION
6
+ gem.version = XcodeProject::VERSION
7
7
  gem.summary = 'Read, write and build xcode projects'
8
- gem.description = 'XCodeProject is Ruby API for working with Xcode project files'
8
+ gem.description = 'XcodeProject is Ruby API for working with Xcode project files'
9
9
  gem.author = 'Andrey Nesterov'
10
10
  gem.email = 'ae.nesterov@gmail.com'
11
11
  gem.homepage = 'https://github.com/manifest/xcodeproject'
@@ -22,5 +22,7 @@ Gem::Specification.new do |gem|
22
22
  gem.add_runtime_dependency 'uuid', '~> 2.3'
23
23
  gem.add_development_dependency 'rspec', '~> 2.10'
24
24
  gem.add_development_dependency 'rr', '~> 1.0'
25
+ gem.add_development_dependency 'redcarpet', '~> 1.17'
26
+ gem.add_development_dependency 'yard', '~> 0.7'
25
27
  end
26
28
 
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
8
- - 1
9
- version: 0.1.1
7
+ - 2
8
+ - 3
9
+ version: 0.2.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Andrey Nesterov
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2012-06-13 00:00:00 +04:00
17
+ date: 2012-06-14 00:00:00 +04:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -69,7 +69,33 @@ dependencies:
69
69
  version: "1.0"
70
70
  type: :development
71
71
  version_requirements: *id004
72
- description: XCodeProject is Ruby API for working with Xcode project files
72
+ - !ruby/object:Gem::Dependency
73
+ name: redcarpet
74
+ prerelease: false
75
+ requirement: &id005 !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ~>
78
+ - !ruby/object:Gem::Version
79
+ segments:
80
+ - 1
81
+ - 17
82
+ version: "1.17"
83
+ type: :development
84
+ version_requirements: *id005
85
+ - !ruby/object:Gem::Dependency
86
+ name: yard
87
+ prerelease: false
88
+ requirement: &id006 !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ~>
91
+ - !ruby/object:Gem::Version
92
+ segments:
93
+ - 0
94
+ - 7
95
+ version: "0.7"
96
+ type: :development
97
+ version_requirements: *id006
98
+ description: XcodeProject is Ruby API for working with Xcode project files
73
99
  email: ae.nesterov@gmail.com
74
100
  executables: []
75
101
 
@@ -79,11 +105,13 @@ extra_rdoc_files: []
79
105
 
80
106
  files:
81
107
  - .gitignore
108
+ - .yardopts
82
109
  - Gemfile
83
110
  - LICENSE
84
111
  - README.md
85
112
  - lib/xcodeproject.rb
86
113
  - lib/xcodeproject/build_phase_node.rb
114
+ - lib/xcodeproject/builder.rb
87
115
  - lib/xcodeproject/data.rb
88
116
  - lib/xcodeproject/exceptions.rb
89
117
  - lib/xcodeproject/extend/array.rb