xcake 0.1.5
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.
- checksums.yaml +7 -0
- data/.gitattributes +1 -0
- data/.gitignore +35 -0
- data/.rspec +2 -0
- data/.travis.yml +6 -0
- data/.yardopts +3 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/Cakefile +8 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +87 -0
- data/LICENSE +201 -0
- data/LICENSE.txt +21 -0
- data/README.md +107 -0
- data/Rakefile +6 -0
- data/bin/console +15 -0
- data/bin/setup +7 -0
- data/bin/xcake +5 -0
- data/docs/Cakefile.md +166 -0
- data/docs/Getting Started.md +89 -0
- data/lib/fastlane_plugin.rb +5 -0
- data/lib/xcake.rb +33 -0
- data/lib/xcake/command.rb +22 -0
- data/lib/xcake/configurable.rb +128 -0
- data/lib/xcake/configuration.rb +50 -0
- data/lib/xcake/configuration/sugar.rb +29 -0
- data/lib/xcake/fastlane/xcake.rb +46 -0
- data/lib/xcake/generator/build_phase.rb +81 -0
- data/lib/xcake/generator/build_phase/compile_source_build_phase.rb +18 -0
- data/lib/xcake/generator/build_phase/copy_resources_build_phase.rb +17 -0
- data/lib/xcake/generator/build_phase/copy_xcassets_build_phase.rb +21 -0
- data/lib/xcake/generator/build_phase/header_file_build_phase.rb +13 -0
- data/lib/xcake/generator/build_phase_registry.rb +39 -0
- data/lib/xcake/generator/configuration.rb +40 -0
- data/lib/xcake/generator/path.rb +41 -0
- data/lib/xcake/generator/project.rb +59 -0
- data/lib/xcake/generator/target.rb +48 -0
- data/lib/xcake/node.rb +144 -0
- data/lib/xcake/project.rb +164 -0
- data/lib/xcake/project_structure_resolver.rb +53 -0
- data/lib/xcake/target.rb +202 -0
- data/lib/xcake/version.rb +3 -0
- data/lib/xcake/visitable.rb +23 -0
- data/lib/xcake/visitor.rb +78 -0
- data/lib/xcake/xcode/project.rb +78 -0
- data/lib/xcake/xcode/scheme.rb +11 -0
- data/lib/xcake/xcode/scheme_list.rb +110 -0
- data/xcake.gemspec +31 -0
- metadata +192 -0
@@ -0,0 +1,23 @@
|
|
1
|
+
module Xcake
|
2
|
+
# This namespace provides all of methods for
|
3
|
+
# implementing the Visitable in the Visitor pattern.
|
4
|
+
#
|
5
|
+
module Visitable
|
6
|
+
# This method accepts the visitors.
|
7
|
+
#
|
8
|
+
# The default implementatio lets the
|
9
|
+
# visitor visit then leave.
|
10
|
+
#
|
11
|
+
# Override this if you need to allow
|
12
|
+
# visitors to visit properties of a
|
13
|
+
# class.
|
14
|
+
#
|
15
|
+
# @param [Visitor] visitor
|
16
|
+
# the visitor to accept
|
17
|
+
#
|
18
|
+
def accept(visitor)
|
19
|
+
visitor.visit(self)
|
20
|
+
visitor.leave(self)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
module Xcake
|
2
|
+
# This namespace provides all of methods for
|
3
|
+
# implementing the Vistor in the Visitor pattern.
|
4
|
+
#
|
5
|
+
# This implementation has a slight twist where
|
6
|
+
# a visitor knows when it has "left" an object
|
7
|
+
# it is visiting.
|
8
|
+
#
|
9
|
+
# Classes implementing these methods should
|
10
|
+
# add methods `visit_<visitable classname>`
|
11
|
+
# and `leave_<visitable classname>` for each
|
12
|
+
# visitable they intend to use that class with.
|
13
|
+
#
|
14
|
+
# @example Implementing Visitor Pattern
|
15
|
+
#
|
16
|
+
# class Writer
|
17
|
+
#
|
18
|
+
# include Visitor
|
19
|
+
#
|
20
|
+
# def visit_page
|
21
|
+
# #Write Page
|
22
|
+
# end
|
23
|
+
#
|
24
|
+
# def leave_page
|
25
|
+
# #Append Footer
|
26
|
+
# end
|
27
|
+
# end
|
28
|
+
#
|
29
|
+
module Visitor
|
30
|
+
|
31
|
+
# This is called when a visitor is visiting a
|
32
|
+
# visitable item.
|
33
|
+
#
|
34
|
+
# By default this method calls the method
|
35
|
+
# `visit_<visitable classname>` so make sure
|
36
|
+
# you've created a method for each visitable you
|
37
|
+
# intend to visit.
|
38
|
+
#
|
39
|
+
# @param [Visitable] visitable
|
40
|
+
# the visitable item the visitor is visiting
|
41
|
+
#
|
42
|
+
def visit(item)
|
43
|
+
item_name = item_name(item)
|
44
|
+
|
45
|
+
method = "visit_#{item_name}"
|
46
|
+
send(method, item)
|
47
|
+
end
|
48
|
+
|
49
|
+
# This is called when a visitor is leaving a
|
50
|
+
# visitable item.
|
51
|
+
#
|
52
|
+
# By default this method calls the method
|
53
|
+
# `leave_<visitable classname>` so make sure
|
54
|
+
# you've created a method for each visitable you
|
55
|
+
# intend to visit.
|
56
|
+
#
|
57
|
+
# @param [Visitable] visitable
|
58
|
+
# the visitable item the visitor has left
|
59
|
+
#
|
60
|
+
def leave(item)
|
61
|
+
item_name = item_name(item)
|
62
|
+
|
63
|
+
method = "leave_#{item_name}"
|
64
|
+
send(method, item)
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
def item_name(item)
|
70
|
+
class_name = item.class.to_s
|
71
|
+
|
72
|
+
class_name.gsub!('Xcake::', '')
|
73
|
+
class_name.gsub!('::', '_')
|
74
|
+
|
75
|
+
class_name.downcase!
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'xcodeproj'
|
2
|
+
|
3
|
+
module Xcake
|
4
|
+
module Xcode
|
5
|
+
class Project < Xcodeproj::Project
|
6
|
+
|
7
|
+
# Configures the Project for use with Xcake.
|
8
|
+
# This makes sure we have sensible defaults and
|
9
|
+
# it as clean as possible.
|
10
|
+
#
|
11
|
+
def setup_for_xcake
|
12
|
+
root_object.remove_referrer(self) if root_object
|
13
|
+
root_object = new(Project::Object::PBXProject)
|
14
|
+
root_object.add_referrer(self)
|
15
|
+
|
16
|
+
config_list = new(XCConfigurationList)
|
17
|
+
root_object.build_configuration_list = config_list
|
18
|
+
|
19
|
+
root_object.main_group = new(PBXGroup)
|
20
|
+
root_object.product_ref_group = root_object.main_group.new_group('Products')
|
21
|
+
|
22
|
+
@root_object = root_object
|
23
|
+
end
|
24
|
+
|
25
|
+
# Creates a new xcode target from the target DSL
|
26
|
+
#
|
27
|
+
# @param [Target] target
|
28
|
+
# target DSL to create target from
|
29
|
+
#
|
30
|
+
# @return [Target] new xcode target
|
31
|
+
#
|
32
|
+
def new_target(target)
|
33
|
+
native_target = self.new(Xcodeproj::Project::Object::PBXNativeTarget)
|
34
|
+
native_target.name = target.name
|
35
|
+
native_target.product_name = target.name
|
36
|
+
native_target.product_type = Xcodeproj::Constants::PRODUCT_TYPE_UTI[target.type]
|
37
|
+
native_target.build_configuration_list = self.new(Xcodeproj::Project::Object::XCConfigurationList)
|
38
|
+
|
39
|
+
product = self.products_group.new_product_ref_for_target(native_target.product_name, native_target.product_type)
|
40
|
+
native_target.product_reference = product
|
41
|
+
|
42
|
+
self.targets << native_target
|
43
|
+
native_target
|
44
|
+
end
|
45
|
+
|
46
|
+
# Finds a unit test target for a xcode target
|
47
|
+
#
|
48
|
+
# @param [Target] target
|
49
|
+
# target to find a xcode target for.
|
50
|
+
#
|
51
|
+
# @return [Target] unit test target
|
52
|
+
#
|
53
|
+
def find_unit_test_target_for_target(target)
|
54
|
+
targets.find do |t|
|
55
|
+
t.name == "#{target.name}Tests"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# @return [SchemeList] the scheme list
|
60
|
+
#
|
61
|
+
def scheme_list
|
62
|
+
@scheme_list ||= SchemeList.new(self)
|
63
|
+
end
|
64
|
+
|
65
|
+
def object_version
|
66
|
+
Xcodeproj::Constants::DEFAULT_OBJECT_VERSION.to_s
|
67
|
+
end
|
68
|
+
|
69
|
+
def recreate_user_schemes(visible = true)
|
70
|
+
|
71
|
+
puts "Creating Schemes..."
|
72
|
+
|
73
|
+
scheme_list.recreate_schemes
|
74
|
+
scheme_list.save(path)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
require 'xcodeproj'
|
2
|
+
|
3
|
+
module Xcake
|
4
|
+
module Xcode
|
5
|
+
# This class is used to represent a list of Schemes.
|
6
|
+
#
|
7
|
+
class SchemeList
|
8
|
+
# @return [Project] the project for the scheme list
|
9
|
+
#
|
10
|
+
attr_accessor :project
|
11
|
+
|
12
|
+
# @return [Array<Scheme>] the schemes in the list
|
13
|
+
#
|
14
|
+
attr_accessor :schemes
|
15
|
+
|
16
|
+
# @return [Hash<String, Object>] xcschememanagementfile contents
|
17
|
+
#
|
18
|
+
#
|
19
|
+
attr_accessor :xcschememanagement
|
20
|
+
|
21
|
+
public
|
22
|
+
|
23
|
+
# @param [Project] project
|
24
|
+
# project to create scheme list for.
|
25
|
+
#
|
26
|
+
def initialize(project)
|
27
|
+
@project = project
|
28
|
+
@schemes = []
|
29
|
+
|
30
|
+
@xcschememanagement = {
|
31
|
+
'SchemeUserState' => {},
|
32
|
+
'SuppressBuildableAutocreation' => {}
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
# Creates the schemes based on the targets.
|
37
|
+
#
|
38
|
+
def recreate_schemes
|
39
|
+
@project.targets.each do |t|
|
40
|
+
create_schemes_for_target(t)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# Creates schemes based on a target.
|
45
|
+
#
|
46
|
+
# @param [Target] target
|
47
|
+
# target to create schemes for
|
48
|
+
#
|
49
|
+
def create_schemes_for_target(target)
|
50
|
+
case target.product_type
|
51
|
+
when Xcodeproj::Constants::PRODUCT_TYPE_UTI[:application]
|
52
|
+
create_schemes_for_application(target)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# Creates schemes based on a application target
|
57
|
+
#
|
58
|
+
# @param [Target] target
|
59
|
+
# target to create application schemes for
|
60
|
+
#
|
61
|
+
def create_schemes_for_application(target)
|
62
|
+
target.build_configurations.each do |c|
|
63
|
+
scheme = Scheme.new
|
64
|
+
|
65
|
+
scheme.name = "#{target.name}-#{c.name}"
|
66
|
+
scheme.add_build_target(target)
|
67
|
+
@xcschememanagement['SuppressBuildableAutocreation'][target.uuid] = {"primary" => true}
|
68
|
+
|
69
|
+
unit_test_target = project.find_unit_test_target_for_target(target)
|
70
|
+
|
71
|
+
if unit_test_target then
|
72
|
+
scheme.add_test_target(unit_test_target)
|
73
|
+
unit_test_target.add_dependency(target)
|
74
|
+
@xcschememanagement['SuppressBuildableAutocreation'][unit_test_target.uuid] = {"primary" => true}
|
75
|
+
end
|
76
|
+
|
77
|
+
schemes << scheme
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
# Writes scheme list data.
|
82
|
+
#
|
83
|
+
# @param [String] writing_path
|
84
|
+
# path to write to.
|
85
|
+
#
|
86
|
+
def save(writing_path)
|
87
|
+
|
88
|
+
schemes_dir = Scheme.user_data_dir(writing_path)
|
89
|
+
|
90
|
+
FileUtils.rm_rf(schemes_dir)
|
91
|
+
FileUtils.mkdir_p(schemes_dir)
|
92
|
+
|
93
|
+
schemes.each do |s|
|
94
|
+
|
95
|
+
puts "Saving Scheme #{s.name}..."
|
96
|
+
s.save_as(@project.path, s.name, true)
|
97
|
+
|
98
|
+
@xcschememanagement['SchemeUserState']["#{s.name}.xcscheme_^#shared#^_"] = {
|
99
|
+
"isShown" => true
|
100
|
+
}
|
101
|
+
end
|
102
|
+
|
103
|
+
puts "Saving Scheme List..."
|
104
|
+
|
105
|
+
xcschememanagement_path = schemes_dir + 'xcschememanagement.plist'
|
106
|
+
Xcodeproj.write_plist(@xcschememanagement, xcschememanagement_path)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
data/xcake.gemspec
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'xcake/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "xcake"
|
8
|
+
spec.version = Xcake::VERSION
|
9
|
+
spec.authors = ["James Campbell"]
|
10
|
+
spec.email = ["james@supmenow.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{DSL for Xcode Projects.}
|
13
|
+
spec.description = %q{Create your Xcode projects automatically using a stupid simple
|
14
|
+
DSL.}
|
15
|
+
spec.homepage = "https://github.com/jcampbell05/xcake/"
|
16
|
+
spec.license = "MIT"
|
17
|
+
|
18
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
19
|
+
spec.executables = %w{ xcake }
|
20
|
+
spec.require_paths = ["lib"]
|
21
|
+
|
22
|
+
spec.required_ruby_version = '>= 2.0.0'
|
23
|
+
|
24
|
+
spec.add_development_dependency "bundler", "~> 1.10"
|
25
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
26
|
+
spec.add_development_dependency "rspec"
|
27
|
+
spec.add_development_dependency "coveralls"
|
28
|
+
spec.add_development_dependency "yard"
|
29
|
+
spec.add_dependency "claide"
|
30
|
+
spec.add_dependency "xcodeproj", "~> 0.28"
|
31
|
+
end
|
metadata
ADDED
@@ -0,0 +1,192 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: xcake
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.5
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- James Campbell
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-12-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.10'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.10'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: coveralls
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: yard
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: claide
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: xcodeproj
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.28'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.28'
|
111
|
+
description: |-
|
112
|
+
Create your Xcode projects automatically using a stupid simple
|
113
|
+
DSL.
|
114
|
+
email:
|
115
|
+
- james@supmenow.com
|
116
|
+
executables:
|
117
|
+
- xcake
|
118
|
+
extensions: []
|
119
|
+
extra_rdoc_files: []
|
120
|
+
files:
|
121
|
+
- ".gitattributes"
|
122
|
+
- ".gitignore"
|
123
|
+
- ".rspec"
|
124
|
+
- ".travis.yml"
|
125
|
+
- ".yardopts"
|
126
|
+
- CODE_OF_CONDUCT.md
|
127
|
+
- Cakefile
|
128
|
+
- Gemfile
|
129
|
+
- Gemfile.lock
|
130
|
+
- LICENSE
|
131
|
+
- LICENSE.txt
|
132
|
+
- README.md
|
133
|
+
- Rakefile
|
134
|
+
- bin/console
|
135
|
+
- bin/setup
|
136
|
+
- bin/xcake
|
137
|
+
- docs/Cakefile.md
|
138
|
+
- docs/Getting Started.md
|
139
|
+
- lib/fastlane_plugin.rb
|
140
|
+
- lib/xcake.rb
|
141
|
+
- lib/xcake/command.rb
|
142
|
+
- lib/xcake/configurable.rb
|
143
|
+
- lib/xcake/configuration.rb
|
144
|
+
- lib/xcake/configuration/sugar.rb
|
145
|
+
- lib/xcake/fastlane/xcake.rb
|
146
|
+
- lib/xcake/generator/build_phase.rb
|
147
|
+
- lib/xcake/generator/build_phase/compile_source_build_phase.rb
|
148
|
+
- lib/xcake/generator/build_phase/copy_resources_build_phase.rb
|
149
|
+
- lib/xcake/generator/build_phase/copy_xcassets_build_phase.rb
|
150
|
+
- lib/xcake/generator/build_phase/header_file_build_phase.rb
|
151
|
+
- lib/xcake/generator/build_phase_registry.rb
|
152
|
+
- lib/xcake/generator/configuration.rb
|
153
|
+
- lib/xcake/generator/path.rb
|
154
|
+
- lib/xcake/generator/project.rb
|
155
|
+
- lib/xcake/generator/target.rb
|
156
|
+
- lib/xcake/node.rb
|
157
|
+
- lib/xcake/project.rb
|
158
|
+
- lib/xcake/project_structure_resolver.rb
|
159
|
+
- lib/xcake/target.rb
|
160
|
+
- lib/xcake/version.rb
|
161
|
+
- lib/xcake/visitable.rb
|
162
|
+
- lib/xcake/visitor.rb
|
163
|
+
- lib/xcake/xcode/project.rb
|
164
|
+
- lib/xcake/xcode/scheme.rb
|
165
|
+
- lib/xcake/xcode/scheme_list.rb
|
166
|
+
- xcake.gemspec
|
167
|
+
homepage: https://github.com/jcampbell05/xcake/
|
168
|
+
licenses:
|
169
|
+
- MIT
|
170
|
+
metadata: {}
|
171
|
+
post_install_message:
|
172
|
+
rdoc_options: []
|
173
|
+
require_paths:
|
174
|
+
- lib
|
175
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
176
|
+
requirements:
|
177
|
+
- - ">="
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: 2.0.0
|
180
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
181
|
+
requirements:
|
182
|
+
- - ">="
|
183
|
+
- !ruby/object:Gem::Version
|
184
|
+
version: '0'
|
185
|
+
requirements: []
|
186
|
+
rubyforge_project:
|
187
|
+
rubygems_version: 2.4.6
|
188
|
+
signing_key:
|
189
|
+
specification_version: 4
|
190
|
+
summary: DSL for Xcode Projects.
|
191
|
+
test_files: []
|
192
|
+
has_rdoc:
|