crafter 0.1.3 → 0.1.4.1
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|