crafter 0.1.3 → 0.1.4.1
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 +4 -4
- data/README.md +152 -0
- data/bin/crafter +1 -1
- data/craft.gemspec +3 -2
- data/lib/config/default.rb +12 -2
- data/lib/config/default_scripts.rb +15 -9
- data/lib/crafter.rb +14 -3
- data/lib/project_helper.rb +13 -0
- data/lib/target_configuration.rb +2 -2
- metadata +13 -18
- data/.idea/.name +0 -1
- data/.idea/encodings.xml +0 -5
- data/.idea/misc.xml +0 -5
- data/.idea/modules.xml +0 -9
- data/.idea/scopes/scope_settings.xml +0 -5
- data/.idea/takeoff.iml +0 -24
- data/.idea/vcs.xml +0 -8
- data/.idea/workspace.xml +0 -718
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 068142308dca128dc9e38a30d943e3e2c7c32bbb
|
4
|
+
data.tar.gz: e9da89b46eff01cdd604570b0c4915f3d5fb5323
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9713ca76924b080d84954966219f3b62778f3d92f08aeadcdd23bba36787a8ffe63533db003bcb2e5f51c28e827fb557426dc523cdd1aaf6110faa5aa75a4550
|
7
|
+
data.tar.gz: c6ae2290717ac13c4ff46a94f5217c66403e6465963fb85e6bca7b61fd342b8e77fa9aff4b370ae83ea9be90edf91fa0b78d718f7bb78e18bec94b913ddc200b
|
data/README.md
ADDED
@@ -0,0 +1,152 @@
|
|
1
|
+
How do you setup your Cocoa projects? Do you always set same warnings, clone configurations and do bunch of other stuff? Or maybe you work in a big company and you are missing some standardised setup?
|
2
|
+
|
3
|
+
Programmers tend to automatise boring and repetitive tasks, yet I often see people spending time and time again configuring their Xcode Projects, even thought they always set it up same way.
|
4
|
+
|
5
|
+
We all know that Xcode templating system is far from perfect, beside we often use different templates, but same level of warnings, scripts etc.
|
6
|
+
|
7
|
+
What if you could define your project setup once (even with optional stuff) then just apply that to all your projects?
|
8
|
+
|
9
|
+
## Enter crafter
|
10
|
+
That's why I've created **crafter**, a ruby gem that you can install, setup your configuration once and enjoy hours of time saved.
|
11
|
+
|
12
|
+
### So how does it work?
|
13
|
+
Install it by calling:
|
14
|
+
```
|
15
|
+
gem install crafter
|
16
|
+
crafter reset
|
17
|
+
```
|
18
|
+
this will create your personal configuration file at **~/.crafter.rb**
|
19
|
+
|
20
|
+
now open that file with your favourite editor and you will see default configuration, along with description of different parts:
|
21
|
+
|
22
|
+
|
23
|
+
```ruby
|
24
|
+
load "#{Crafter::ROOT}/config/default_scripts.rb"
|
25
|
+
|
26
|
+
# All your configuration should happen inside configure block
|
27
|
+
Crafter.configure do
|
28
|
+
|
29
|
+
# This are projects wide instructions
|
30
|
+
add_platform({:platform => :ios, :deployment => 6.0})
|
31
|
+
add_git_ignore
|
32
|
+
duplicate_configurations({:adhoc => :debug, :profiling => :debug})
|
33
|
+
|
34
|
+
# set of options, warnings, static analyser and anything else normal xcode treats as build options
|
35
|
+
set_options %w(
|
36
|
+
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED
|
37
|
+
GCC_WARN_MISSING_PARENTHESES
|
38
|
+
GCC_WARN_ABOUT_RETURN_TYPE
|
39
|
+
GCC_WARN_SIGN_COMPARE
|
40
|
+
GCC_WARN_CHECK_SWITCH_STATEMENTS
|
41
|
+
GCC_WARN_UNUSED_FUNCTION
|
42
|
+
GCC_WARN_UNUSED_LABEL
|
43
|
+
GCC_WARN_UNUSED_VALUE
|
44
|
+
GCC_WARN_UNUSED_VARIABLE
|
45
|
+
GCC_WARN_SHADOW
|
46
|
+
GCC_WARN_64_TO_32_BIT_CONVERSION
|
47
|
+
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS
|
48
|
+
GCC_WARN_UNDECLARED_SELECTOR
|
49
|
+
GCC_WARN_TYPECHECK_CALLS_TO_PRINTF
|
50
|
+
|
51
|
+
RUN_CLANG_STATIC_ANALYZER
|
52
|
+
GCC_TREAT_WARNINGS_AS_ERRORS
|
53
|
+
)
|
54
|
+
|
55
|
+
# set non boolean options
|
56
|
+
set_build_settings ({
|
57
|
+
:'OTHER_CFLAGS' => '-Wall'
|
58
|
+
})
|
59
|
+
|
60
|
+
# target specific options, :default is just a name for you, feel free to call it whatever you like
|
61
|
+
with :default do
|
62
|
+
|
63
|
+
# each target have set of pods
|
64
|
+
pods << %w(NSLogger-CocoaLumberjack-connector TestFlightSDK)
|
65
|
+
|
66
|
+
# each target can have optional blocks, eg. crafter will ask you if you want to include networking with a project
|
67
|
+
add_option :networking do
|
68
|
+
pods << 'AFNetworking'
|
69
|
+
end
|
70
|
+
|
71
|
+
add_option :coredata do
|
72
|
+
pods << 'MagicalRecord'
|
73
|
+
end
|
74
|
+
|
75
|
+
# each target can have shell scripts added, in this example we are adding my icon versioning script as in http://www.merowing.info/2013/03/overlaying-application-version-on-top-of-your-icon/
|
76
|
+
scripts << {:name => 'icon versioning', :script => Crafter.icon_versioning_script}
|
77
|
+
|
78
|
+
# we can also execute arbitrary ruby code when configuring our projects, here we rename all our standard icon* to icon_base for versioning script
|
79
|
+
icon_rename = proc do |file|
|
80
|
+
extension = File.extname(file)
|
81
|
+
file_name = File.basename(file, extension)
|
82
|
+
File.rename(file, "#{File.dirname(file)}/#{file_name}_base#{extension}")
|
83
|
+
end
|
84
|
+
|
85
|
+
Dir['**/Icon.png'].each(&icon_rename)
|
86
|
+
Dir['**/Icon@2x.png'].each(&icon_rename)
|
87
|
+
Dir['**/Icon-72.png'].each(&icon_rename)
|
88
|
+
Dir['**/Icon-72@2x.png'].each(&icon_rename)
|
89
|
+
end
|
90
|
+
|
91
|
+
# more targets setup
|
92
|
+
with :tests do
|
93
|
+
add_option :kiwi do
|
94
|
+
pods << 'Kiwi'
|
95
|
+
scripts << {:name => 'command line unit tests', :script => Crafter.command_line_test_script}
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
```
|
100
|
+
|
101
|
+
As you can see the configuration files is quite easy, yet is pretty flexible.
|
102
|
+
Once you set it up as you see fit, go to your project folder (the one with xcodeproj, workspace etc.) and call:
|
103
|
+
|
104
|
+
```bash
|
105
|
+
crafter
|
106
|
+
```
|
107
|
+
|
108
|
+
it will guide you through project setup, with default configuration it would look like this:
|
109
|
+
```bash
|
110
|
+
1. sample
|
111
|
+
2. sampleTests
|
112
|
+
Which target should I use for default?
|
113
|
+
1
|
114
|
+
1. sample
|
115
|
+
2. sampleTests
|
116
|
+
Which target should I use for tests?
|
117
|
+
2
|
118
|
+
do you want to add networking? [Yn]
|
119
|
+
n
|
120
|
+
do you want to add coredata? [Yn]
|
121
|
+
y
|
122
|
+
do you want to add testing? [Yn]
|
123
|
+
n
|
124
|
+
duplicating configurations
|
125
|
+
setting up variety of options
|
126
|
+
preparing git ignore
|
127
|
+
preparing pod file
|
128
|
+
adding scripts
|
129
|
+
Finished.
|
130
|
+
```
|
131
|
+
|
132
|
+
Now your project should have all options applied, generated Podfile (call pod install or set it up in your configuration).
|
133
|
+
|
134
|
+
I'm learning Ruby, so I'm looking forward to pull requests on [GitHub][5]
|
135
|
+
|
136
|
+
Send me your thoughts, I'm [merowing_ on twitter][7]
|
137
|
+
|
138
|
+
#### Acknowledgements:
|
139
|
+
|
140
|
+
[The App Business][1] (the company I worked for) for supporting my idea.
|
141
|
+
|
142
|
+
to [@alloy][2], [@orta][3], [@romainbriche][4] - for taking some of their valuable time and sharing their thoughts about beta version.
|
143
|
+
|
144
|
+
Inspired by [liftoff][6]
|
145
|
+
|
146
|
+
[1]: http://theappbusiness.com
|
147
|
+
[2]: http://twitter.com/alloy
|
148
|
+
[3]: http://twitter.com/orta
|
149
|
+
[4]: http://twitter.com/romainbriche
|
150
|
+
[5]: https://github.com/krzysztofzablocki/crafter
|
151
|
+
[6]: https://github.com/thoughtbot/liftoff
|
152
|
+
[7]: http://twitter.com/merowing_
|
data/bin/crafter
CHANGED
@@ -6,7 +6,7 @@ $:.push File.expand_path("../../lib", __FILE__)
|
|
6
6
|
if ARGV[0] == 'reset'
|
7
7
|
puts 'reseting to default setup in ~/.crafter.rb'
|
8
8
|
root = File.expand_path('.', File.dirname(__FILE__))
|
9
|
-
FileUtils.cp("#{root}/../lib/config/default.rb", File.join(
|
9
|
+
FileUtils.cp("#{root}/../lib/config/default.rb", File.join(ENV['HOME'], '.crafter.rb'))
|
10
10
|
exit(0)
|
11
11
|
end
|
12
12
|
|
data/craft.gemspec
CHANGED
@@ -3,12 +3,13 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
5
|
gem.name = 'crafter'
|
6
|
-
gem.version = '0.1.
|
6
|
+
gem.version = '0.1.4.1'
|
7
7
|
gem.authors = ['Krzysztof Zabłocki']
|
8
8
|
gem.email = ['merowing2@gmail.com']
|
9
9
|
gem.description = %q{CLI for setting up new Xcode projects. Inspired by thoughtbot liftoff.}
|
10
10
|
gem.summary = %q{Define your craft rules once, then apply it to all your Xcode projects.}
|
11
11
|
gem.homepage = 'https://github.com/krzysztofzablocki/crafter'
|
12
|
+
gem.license = 'MIT'
|
12
13
|
|
13
14
|
gem.add_dependency 'xcodeproj', '~> 0.5.5'
|
14
15
|
gem.add_dependency 'highline', '~> 1.6'
|
@@ -17,4 +18,4 @@ Gem::Specification.new do |gem|
|
|
17
18
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
18
19
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
19
20
|
gem.require_paths = ['lib']
|
20
|
-
end
|
21
|
+
end
|
data/lib/config/default.rb
CHANGED
@@ -2,6 +2,7 @@ load "#{Crafter::ROOT}/config/default_scripts.rb"
|
|
2
2
|
|
3
3
|
# All your configuration should happen inside configure block
|
4
4
|
Crafter.configure do
|
5
|
+
|
5
6
|
# This are projects wide instructions
|
6
7
|
add_platform({:platform => :ios, :deployment => 6.0})
|
7
8
|
add_git_ignore
|
@@ -23,6 +24,14 @@ Crafter.configure do
|
|
23
24
|
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS
|
24
25
|
GCC_WARN_UNDECLARED_SELECTOR
|
25
26
|
GCC_WARN_TYPECHECK_CALLS_TO_PRINTF
|
27
|
+
GCC_WARN_UNINITIALIZED_AUTOS
|
28
|
+
CLANG_WARN_INT_CONVERSION
|
29
|
+
CLANG_WARN_ENUM_CONVERSION
|
30
|
+
CLANG_WARN_CONSTANT_CONVERSION
|
31
|
+
CLANG_WARN_BOOL_CONVERSION
|
32
|
+
CLANG_WARN_EMPTY_BODY
|
33
|
+
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION
|
34
|
+
GCC_WARN_64_TO_32_BIT_CONVERSION
|
26
35
|
|
27
36
|
RUN_CLANG_STATIC_ANALYZER
|
28
37
|
GCC_TREAT_WARNINGS_AS_ERRORS
|
@@ -30,6 +39,7 @@ Crafter.configure do
|
|
30
39
|
|
31
40
|
# target specific options, :default is just a name for you, feel free to call it whatever you like
|
32
41
|
with :default do
|
42
|
+
|
33
43
|
# each target have set of pods
|
34
44
|
pods << %w(NSLogger-CocoaLumberjack-connector TestFlightSDK)
|
35
45
|
|
@@ -43,7 +53,7 @@ Crafter.configure do
|
|
43
53
|
end
|
44
54
|
|
45
55
|
# each target can have shell scripts added, in this example we are adding my icon versioning script as in http://www.merowing.info/2013/03/overlaying-application-version-on-top-of-your-icon/
|
46
|
-
scripts << {:name => 'icon versioning', :script =>
|
56
|
+
scripts << {:name => 'icon versioning', :script => Crafter.icon_versioning_script}
|
47
57
|
|
48
58
|
# we can also execute arbitrary ruby code when configuring our projects, here we rename all our standard icon* to icon_base for versioning script
|
49
59
|
icon_rename = proc do |file|
|
@@ -62,7 +72,7 @@ Crafter.configure do
|
|
62
72
|
with :tests do
|
63
73
|
add_option :kiwi do
|
64
74
|
pods << 'Kiwi'
|
65
|
-
scripts << {:name => 'command line unit tests', :script =>
|
75
|
+
scripts << {:name => 'command line unit tests', :script => Crafter.command_line_test_script}
|
66
76
|
end
|
67
77
|
end
|
68
78
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
module Crafter
|
2
2
|
extend self
|
3
3
|
|
4
|
+
attr_reader :icon_versioning_script, :command_line_test_script
|
5
|
+
|
4
6
|
@icon_versioning_script = %q[
|
5
7
|
commit=`git rev-parse --short HEAD`
|
6
8
|
branch=`git rev-parse --abbrev-ref HEAD`
|
@@ -9,27 +11,31 @@ version=`/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${INFOPLIST_FILE}"`
|
|
9
11
|
function processIcon() {
|
10
12
|
export PATH=$PATH:/usr/local/bin
|
11
13
|
base_file=$1
|
12
|
-
|
14
|
+
base_path=`find ${SRCROOT} -name $base_file`
|
15
|
+
|
16
|
+
if [[ ! -f ${base_path} || -z ${base_path} ]]; then
|
17
|
+
return;
|
18
|
+
fi
|
13
19
|
|
14
20
|
target_file=`echo $base_file | sed "s/_base//"`
|
15
21
|
target_path="${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/${target_file}"
|
16
22
|
|
17
23
|
if [ $CONFIGURATION = "Release" ]; then
|
18
|
-
|
19
|
-
|
24
|
+
cp ${base_file} $target_path
|
25
|
+
return
|
20
26
|
fi
|
21
27
|
|
22
|
-
width=`identify -format %w ${
|
28
|
+
width=`identify -format %w ${base_path}`
|
23
29
|
|
24
30
|
convert -background '#0008' -fill white -gravity center -size ${width}x40\
|
25
|
-
|
26
|
-
|
31
|
+
caption:"${version} ${branch} ${commit}"\
|
32
|
+
${base_path} +swap -gravity south -composite ${target_path}
|
27
33
|
}
|
28
34
|
|
29
35
|
processIcon "Icon_base.png"
|
30
|
-
processIcon "
|
31
|
-
processIcon "
|
32
|
-
processIcon "
|
36
|
+
processIcon "Icon@2x_base.png"
|
37
|
+
processIcon "Icon-72_base.png"
|
38
|
+
processIcon "Icon-72@2x_base.png"
|
33
39
|
]
|
34
40
|
|
35
41
|
|
data/lib/crafter.rb
CHANGED
@@ -17,6 +17,7 @@ module Crafter
|
|
17
17
|
@targets = {}
|
18
18
|
@add_git_ignore = false
|
19
19
|
@platforms = []
|
20
|
+
@build_settings = {}
|
20
21
|
|
21
22
|
def configure(&block)
|
22
23
|
instance_eval &block
|
@@ -54,10 +55,15 @@ module Crafter
|
|
54
55
|
@options = options
|
55
56
|
end
|
56
57
|
|
58
|
+
def set_build_settings(build_settings, configuration: 'crafter_common')
|
59
|
+
@build_settings[configuration] = build_settings
|
60
|
+
end
|
61
|
+
|
57
62
|
def setup_project
|
58
63
|
process_optional()
|
59
|
-
process_configurations()
|
60
|
-
process_options()
|
64
|
+
process_configurations() if @configuration && !@configuration.empty?
|
65
|
+
process_options() if @options && !@options.empty?
|
66
|
+
process_build_settings() if @build_settings && !@build_settings.empty?
|
61
67
|
process_git() if @add_git_ignore
|
62
68
|
process_pods()
|
63
69
|
process_scripts()
|
@@ -77,6 +83,11 @@ module Crafter
|
|
77
83
|
self.project.enable_options(@options)
|
78
84
|
end
|
79
85
|
|
86
|
+
def process_build_settings
|
87
|
+
puts 'set specified values for build settings'
|
88
|
+
self.project.set_build_settings(@build_settings)
|
89
|
+
end
|
90
|
+
|
80
91
|
def process_git
|
81
92
|
puts 'preparing git ignore'
|
82
93
|
GitHelper.new.generate_files
|
@@ -108,7 +119,7 @@ module Crafter
|
|
108
119
|
@targets.each { |_, v| v.process_scripts(self.project) }
|
109
120
|
end
|
110
121
|
|
111
|
-
if File.exists?(File.join(
|
122
|
+
if File.exists?(File.join(ENV['HOME'], '.crafter.rb')) then
|
112
123
|
load '~/.crafter.rb'
|
113
124
|
else
|
114
125
|
load "#{Crafter::ROOT}/config/default.rb"
|
data/lib/project_helper.rb
CHANGED
@@ -17,6 +17,19 @@ class ProjectHelper
|
|
17
17
|
save_changes
|
18
18
|
end
|
19
19
|
|
20
|
+
def set_build_settings(build_settings)
|
21
|
+
@project.build_configurations.each do |configuration|
|
22
|
+
build_settings.each do |configuration_name, settings|
|
23
|
+
if configuration_name.to_s.downcase == "crafter_common" || configuration.name.downcase == configuration_name.to_s.downcase
|
24
|
+
settings.each do |key, value|
|
25
|
+
configuration.build_settings[key] = value
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
save_changes
|
31
|
+
end
|
32
|
+
|
20
33
|
def add_shell_script(target, name, script)
|
21
34
|
if target.shell_script_build_phases.to_a.index { |phase| phase.name == name }
|
22
35
|
puts "Skipping adding \"#{name}\" script for target #{target} as it already exist"
|
data/lib/target_configuration.rb
CHANGED
@@ -17,7 +17,7 @@ class TargetConfiguration
|
|
17
17
|
def process_optional
|
18
18
|
@options.each do |key, obj|
|
19
19
|
key_string = key.to_s
|
20
|
-
if ask_question "do you want to add #{key_string}? [
|
20
|
+
if ask_question "do you want to add #{key_string}? [y/n]"
|
21
21
|
raise unless obj.is_a? Proc
|
22
22
|
obj.call()
|
23
23
|
end
|
@@ -26,7 +26,7 @@ class TargetConfiguration
|
|
26
26
|
|
27
27
|
def write_pods(f)
|
28
28
|
return if @pods.empty?
|
29
|
-
f.puts "target
|
29
|
+
f.puts "target '#{@target.name}', :exclusive => true do"
|
30
30
|
pods.flatten.each do |pod|
|
31
31
|
f.puts " pod '#{pod}'"
|
32
32
|
end
|
metadata
CHANGED
@@ -1,41 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: crafter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Krzysztof Zabłocki
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-10-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: xcodeproj
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 0.5.5
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.5.5
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: highline
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.6'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.6'
|
41
41
|
description: CLI for setting up new Xcode projects. Inspired by thoughtbot liftoff.
|
@@ -46,14 +46,7 @@ executables:
|
|
46
46
|
extensions: []
|
47
47
|
extra_rdoc_files: []
|
48
48
|
files:
|
49
|
-
- .
|
50
|
-
- .idea/encodings.xml
|
51
|
-
- .idea/misc.xml
|
52
|
-
- .idea/modules.xml
|
53
|
-
- .idea/scopes/scope_settings.xml
|
54
|
-
- .idea/takeoff.iml
|
55
|
-
- .idea/vcs.xml
|
56
|
-
- .idea/workspace.xml
|
49
|
+
- README.md
|
57
50
|
- bin/crafter
|
58
51
|
- craft.gemspec
|
59
52
|
- lib/config/default.rb
|
@@ -63,7 +56,8 @@ files:
|
|
63
56
|
- lib/project_helper.rb
|
64
57
|
- lib/target_configuration.rb
|
65
58
|
homepage: https://github.com/krzysztofzablocki/crafter
|
66
|
-
licenses:
|
59
|
+
licenses:
|
60
|
+
- MIT
|
67
61
|
metadata: {}
|
68
62
|
post_install_message:
|
69
63
|
rdoc_options: []
|
@@ -71,18 +65,19 @@ require_paths:
|
|
71
65
|
- lib
|
72
66
|
required_ruby_version: !ruby/object:Gem::Requirement
|
73
67
|
requirements:
|
74
|
-
- -
|
68
|
+
- - ">="
|
75
69
|
- !ruby/object:Gem::Version
|
76
70
|
version: '0'
|
77
71
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
72
|
requirements:
|
79
|
-
- -
|
73
|
+
- - ">="
|
80
74
|
- !ruby/object:Gem::Version
|
81
75
|
version: '0'
|
82
76
|
requirements: []
|
83
77
|
rubyforge_project:
|
84
|
-
rubygems_version: 2.
|
78
|
+
rubygems_version: 2.2.2
|
85
79
|
signing_key:
|
86
80
|
specification_version: 4
|
87
81
|
summary: Define your craft rules once, then apply it to all your Xcode projects.
|
88
82
|
test_files: []
|
83
|
+
has_rdoc:
|