vfastdev 0.0.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 (4) hide show
  1. checksums.yaml +7 -0
  2. data/bin/vfastdev +245 -0
  3. data/lib/vfastdev.rb +216 -0
  4. metadata +60 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 36eb2a935955165465ca8c9b119d6ef203f485ee
4
+ data.tar.gz: e39a391145074d34acb6b3c600875292ccf4bc2d
5
+ SHA512:
6
+ metadata.gz: 2a07df0f18610bdd7727a5320a6b32c1d904ceee2a4705f09ced731127f1d2da012e7b05ec78d4ca9d495b5e2d85ebb9c882487bf6afb748e99abaebe0b522c4
7
+ data.tar.gz: e763cec7188ed3f1e567e7216ba65e3722295a2f7a37d9596a0322452bfab2b1694bb517c3b0d4368930fcca87478681db301c0fdd89a5591e40fc69b7dd0e2c
data/bin/vfastdev ADDED
@@ -0,0 +1,245 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'xcodeproj'
4
+ require 'rexml/document'
5
+ require 'fileutils'
6
+ require 'open-uri'
7
+ require 'open3'
8
+ require 'optparse'
9
+
10
+ # 检查当前代码版本和静态库版本相差多久
11
+
12
+
13
+ usage = <<EOF
14
+ \033[1mNAME\033[0m
15
+ \033[1mvfastdev\033[0m -- Spec快速开发模式。
16
+
17
+ \033[1mDESCRIPTION\033[0m
18
+ \033[1mvfastdev\033[0m 会在工程根目录生成FastDev目录,按照保留指定的模块作为工程引入,剩余模块将会通过下载develop最新的静态库快照引入Spec工程。
19
+ 通过这样可以在一定程度上提高编译速度。目前只支持x86_64的静态库,意味着只在64位模拟器上面生效。
20
+
21
+ \033[1mUSAGE\033[0m
22
+ vfastdev -h
23
+ 显示帮助文档
24
+ vfastdev -k "[biz name]..." -
25
+
26
+ \033[1mEXAMPLE\033[0m
27
+
28
+ vfastdev -k "VSBizUserCenter VSBizCollection"
29
+ 保留VSBizUserCenter和VSBizCollection作为工程引入,其它业务模块通过静态库引入。Spec和Pods工程会默认保留。
30
+
31
+ \033[1mISSUes\033[0m
32
+ 1.如果你的代码版本和develop相差太多,可能导致出现找不到头文件,没有这个方法,找不到符号的问题
33
+ 2.由于业务模块之间依赖还比较严重,并且依赖比较隐晦。在FastDev下面修改业务模块的内容,可能导致运行看起来没有问题,但是在非FastDev下面编译会报错,例如提示没有这个函数的问题。
34
+ 这个问题目前环境下比较难避免,因为不知道修改的东西被谁引用了。
35
+ 3.真机和32位模拟器不嫩使用,因为只有x86_64的符号。
36
+ 4.VSBaseModule/VSPublic这类被公共依赖的工程不能再FastDev下面修改。
37
+ 5.同一个.xcodeproj文件不能被同时打开,使用FastDev打开的工程之前先关闭原来的工程。
38
+ 6.由于FastDev/Spec.xcodeproj是副本,修改它不会影响Spec.xcodeproj原本,如果需要修改Spec.xcodeproj,不能使用FastDev。
39
+ 7.出现___llvm_profile_runtime未找到符号的错误,可在Spec target的OTHER_LDFLAGS增加-fprofile-instr-generate来解决
40
+ EOF
41
+
42
+ $source_names = []
43
+ if ARGV.count > 1
44
+ if ARGV[0] == '-k'
45
+ param = ARGV[1]
46
+ $source_names = param.split(" ")
47
+ elsif ARGV[0] == '-h'
48
+ puts(usage)
49
+ exit(1)
50
+ end
51
+ else
52
+ puts(usage)
53
+ exit(1)
54
+ end
55
+
56
+ # 判断目录是否存在
57
+
58
+ unless File.exist?('FastDev')
59
+ puts '创建FastDev目录'
60
+ Dir.mkdir('FastDev')
61
+ end
62
+
63
+ Dir.chdir('FastDev')
64
+
65
+ if File.exist?('Spec.xcodeproj')
66
+ puts '删除FastDev/Spec.xcodeproj'
67
+ FileUtils.rm_rf('Spec.xcodeproj')
68
+ end
69
+
70
+ if File.exist?('Spec.xcworkspace')
71
+ puts '删除FastDev/Spec.xcworkspace'
72
+ FileUtils.rm_rf('Spec.xcworkspace')
73
+ end
74
+
75
+ vs_framework_dir = 'VSFrameworks'
76
+
77
+ if File.exist?(vs_framework_dir)
78
+ puts '删除FastDev/VSFrameworks'
79
+ FileUtils.rm_rf(vs_framework_dir)
80
+ end
81
+
82
+ puts '拷贝Spec.xcodeproj到FastDev'
83
+ FileUtils.cp_r('../Spec/Spec.xcodeproj', 'Spec.xcodeproj')
84
+ puts '拷贝Spec.xcworkspace到FastDev'
85
+ FileUtils.cp_r('../Spec.xcworkspace', 'Spec.xcworkspace')
86
+
87
+ puts '创建目录FastDev/VSFrameworks'
88
+ Dir.mkdir(vs_framework_dir)
89
+
90
+ vs_framework_name = []
91
+ tmp_workspace = Xcodeproj::Workspace.new_from_xcworkspace("Spec.xcworkspace")
92
+ tmp_workspace.file_references.each do |file_ref|
93
+ match = /VS[a-zA-Z0-9]*?(?=.xcodeproj)/.match(file_ref.path)
94
+ if match != nil
95
+ name = match[0]
96
+ vs_framework_name << name
97
+ end
98
+ end
99
+
100
+
101
+
102
+ puts "工作空间包含的VS模块:#{vs_framework_name}"
103
+
104
+ begin
105
+ open('http://192.168.33.79:8000/lib/latest_framework_info?app_id=Spec') do |f|
106
+ puts "静态库版本信息: " + f.read
107
+ end
108
+ rescue StandardError,Timeout::Error, SystemCallError, Errno::ECONNREFUSED
109
+ puts "获取静态库版本信息失败: " + $!
110
+ end
111
+
112
+ puts '下载模块静态库'
113
+ Dir.chdir(vs_framework_dir)
114
+
115
+ vs_framework_name.each do |name|
116
+ puts '下载:'+ name
117
+ File.open("#{name}.framework.zip", 'wb') do |f|
118
+ framework_name = "#{name}.framework"
119
+ url = "http://192.168.33.79:8000/lib/dowload_framework_file?app_id=Spec&name=#{framework_name}"
120
+ begin
121
+ f.write(open(url) do |f1| f1.read end)
122
+ rescue StandardError,Timeout::Error, SystemCallError, Errno::ECONNREFUSED
123
+ puts $!
124
+ end
125
+
126
+ end
127
+ end
128
+
129
+ puts '解压静态库'
130
+ # 调用shell解压更简单,ruby不好写解压
131
+ system `
132
+ zip_names=$(ls)
133
+ for name in $zip_names
134
+ do
135
+ unzip -qq $name
136
+ rm $name
137
+ done
138
+ `
139
+ Dir.chdir('..')
140
+
141
+ biz_names = $source_names
142
+ k_framework_names = []
143
+ biz_names.each do |name|
144
+ k_framework_names << name + ".framework"
145
+ end
146
+
147
+ project_path = 'Spec.xcodeproj'
148
+ project = Xcodeproj::Project.open(project_path)
149
+
150
+ puts '更改Spec.xcodeproj的pecmain group的引用路径'
151
+ project.main_group.set_source_tree('SOURCE_ROOT')
152
+ project.main_group.set_path('../Spec')
153
+
154
+
155
+ puts '更改Spec.xcodeproj中info.plist,pch,entitlements的引用路径'
156
+ # 修改info.plist,pch,entitlements的引用路径
157
+ project.targets.each do |target|
158
+ target.build_configurations.each do |config|
159
+ if config.build_settings.has_key?('INFOPLIST_FILE')
160
+ info_plist_config = config.build_settings['INFOPLIST_FILE']
161
+
162
+ info_plist_config = "../Spec/" + info_plist_config
163
+ config.build_settings['INFOPLIST_FILE'] = info_plist_config
164
+ end
165
+ if config.build_settings.has_key?('GCC_PREFIX_HEADER')
166
+ pch_config = config.build_settings['GCC_PREFIX_HEADER']
167
+ pch_config = "../Spec/" + pch_config
168
+ config.build_settings['GCC_PREFIX_HEADER'] = pch_config
169
+ end
170
+ if config.build_settings.has_key?('CODE_SIGN_ENTITLEMENTS')
171
+ entitlements_config = config.build_settings['CODE_SIGN_ENTITLEMENTS']
172
+ entitlements_config = "../Spec/" + entitlements_config
173
+ config.build_settings['CODE_SIGN_ENTITLEMENTS'] = entitlements_config
174
+ end
175
+ end
176
+ end
177
+
178
+ puts 'FRAMEWORK_SEARCH_PATHS新增路径'
179
+ project.build_configuration_list.build_configurations.each do |config|
180
+ if config.build_settings.has_key?('FRAMEWORK_SEARCH_PATHS')
181
+ paths = config.build_settings['FRAMEWORK_SEARCH_PATHS']
182
+ if paths.is_a?(String)
183
+ config.build_settings['FRAMEWORK_SEARCH_PATHS'] = [paths,vs_framework_dir]
184
+ else
185
+ config.build_settings['FRAMEWORK_SEARCH_PATHS'] << vs_framework_dir
186
+ end
187
+ end
188
+ end
189
+
190
+ puts'修改静态库库的引用'
191
+ project.files.each do |file_ref|
192
+ if file_ref.last_known_file_type == "wrapper.framework" && file_ref.name =~ /^VS/ && !k_framework_names.include?(file_ref.name)
193
+ file_ref.set_source_tree("SOURCE_ROOT")
194
+ file_ref.set_path(vs_framework_dir + "/" + file_ref.name)
195
+ elsif file_ref.explicit_file_type == "wrapper.framework" && file_ref.path =~ /^VS/ && !k_framework_names.include?(file_ref.path)
196
+ file_ref.set_source_tree("SOURCE_ROOT")
197
+ file_ref.name = file_ref.path
198
+ file_ref.set_path(vs_framework_dir + "/" + file_ref.path)
199
+ end
200
+ end
201
+
202
+ puts '修改Copy Modular Resources 脚本:"${SRCROOT}/Resources/Support/modular-resources-copy.sh" => "${SRCROOT}/../Spec/Resources/Support/modular-resources-copy.sh"'
203
+ project.targets.each do |target|
204
+ target.shell_script_build_phases.each do |phase|
205
+ if phase.name == 'Copy Modular Resources'
206
+ phase.shell_script = '"${SRCROOT}/../Spec/Resources/Support/modular-resources-copy.sh"'
207
+ end
208
+ end
209
+ end
210
+ project.save
211
+
212
+ puts'生成新的workspace'
213
+ workspace_xml = <<XML
214
+ <?xml version="1.0" encoding="UTF-8"?>
215
+ <Workspace
216
+ version = "1.0">
217
+ </Workspace>
218
+ XML
219
+
220
+
221
+ workspace = Xcodeproj::Workspace.from_s(workspace_xml)
222
+ spec_file_ref = Xcodeproj::Workspace::FileReference.new("Spec.xcodeproj")
223
+ workspace << spec_file_ref
224
+
225
+ if $source_names.include?("VSBaseModule")
226
+ base_module_file_ref = Xcodeproj::Workspace::FileReference.new("../VSBaseModule/VSBaseModule.xcodeproj")
227
+ workspace << base_module_file_ref
228
+ end
229
+
230
+ biz_names.each do |each|
231
+ fileRef = Xcodeproj::Workspace::FileReference.new("../#{each}/#{each}.xcodeproj")
232
+ workspace << fileRef
233
+ end
234
+ if $source_names.include?("VSPublic")
235
+ public_file_ref = Xcodeproj::Workspace::FileReference.new("../VSPublic/VSPublic.xcodeproj")
236
+ workspace << public_file_ref
237
+ end
238
+
239
+ pods_file_ref = Xcodeproj::Workspace::FileReference.new("../Pods/Pods.xcodeproj")
240
+ workspace << pods_file_ref
241
+
242
+ workspace_path = "Spec.xcworkspace"
243
+ workspace.save_as(workspace_path)
244
+
245
+ puts'FastDev完成。关闭旧的Spec.xcworkspace,打开FastDev/Spec.xcworkspace文件开始开发。'
data/lib/vfastdev.rb ADDED
@@ -0,0 +1,216 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'xcodeproj'
4
+ require 'rexml/document'
5
+ require 'fileutils'
6
+ require 'open-uri'
7
+ require 'open3'
8
+
9
+ usage = <<EOF
10
+ \033[1mNAME\033[0m
11
+ \033[1mvfastdev\033[0m -- Spec快速开发模式。
12
+
13
+ \033[1mDESCRIPTION\033[0m
14
+ \033[1mvfastdev\033[0m 会在工程根目录生成FastDev目录,按照保留指定的业务模块作为工程引入,剩余业务模块将会通过下载develop最新的静态库快照引入Spec工程。
15
+ 通过这样可以在一定程度上提高编译速度。目前只支持x86_64的静态库,意味着只在64位模拟器上面生效。
16
+
17
+ \033[1mEXAMPLE\033[0m
18
+ vfastdev -h
19
+ 显示帮助文档
20
+ vfastdev -k "VSBizUserCenter VSBizCollection"
21
+ 保留VSBizUserCenter和VSBizCollection作为工程引入,其它业务模块通过静态库引入
22
+ EOF
23
+
24
+ $source_biz_names = []
25
+ if ARGV.count > 1
26
+ if ARGV[0] == '-k'
27
+ param = ARGV[1]
28
+ $source_biz_names = param.split(" ")
29
+ elsif ARGV[0] == '-h'
30
+ puts(usage)
31
+ exit(1)
32
+ end
33
+ else
34
+ puts(usage)
35
+ exit(1)
36
+ end
37
+
38
+ # 判断目录是否存在
39
+
40
+ unless File.exist?('FastDev')
41
+ puts '创建FastDev目录'
42
+ Dir.mkdir('FastDev')
43
+ end
44
+
45
+ Dir.chdir('FastDev')
46
+
47
+ if File.exist?('Spec.xcodeproj')
48
+ puts '删除FastDev/Spec.xcodeproj'
49
+ FileUtils.rm_rf('Spec.xcodeproj')
50
+ end
51
+
52
+ if File.exist?('Spec.xcworkspace')
53
+ puts '删除FastDev/Spec.xcworkspace'
54
+ FileUtils.rm_rf('Spec.xcworkspace')
55
+ end
56
+
57
+ if File.exist?('VSBizFrameworks')
58
+ puts '删除FastDev/VSBizFrameworks'
59
+ FileUtils.rm_rf('VSBizFrameworks')
60
+ end
61
+
62
+ puts '拷贝Spec.xcodeproj到FastDev'
63
+ FileUtils.cp_r('../Spec/Spec.xcodeproj', 'Spec.xcodeproj')
64
+ puts '拷贝Spec.xcworkspace到FastDev'
65
+ FileUtils.cp_r('../Spec.xcworkspace', 'Spec.xcworkspace')
66
+
67
+ puts '创建目录FastDev/VSBizFrameworks'
68
+ Dir.mkdir('VSBizFrameworks')
69
+
70
+ biz_framework_name = []
71
+ tmp_workspace = Xcodeproj::Workspace.new_from_xcworkspace("Spec.xcworkspace")
72
+ tmp_workspace.file_references.each do |file_ref|
73
+ match = /VSBiz[a-zA-Z0-9]*?(?=.xcodeproj)/.match(file_ref.path)
74
+ if match != nil
75
+ name = match[0]
76
+ biz_framework_name << name
77
+ end
78
+ end
79
+
80
+ puts "工作空间包含的VSBiz业务模块:#{biz_framework_name}"
81
+ puts '下载业务模块静态库'
82
+ Dir.chdir('VSBizFrameworks')
83
+
84
+ biz_framework_name.each do |name|
85
+ puts name
86
+ File.open("#{name}.framework.zip", 'wb') do |f|
87
+ framework_name = "#{name}.framework"
88
+ url = "http://192.168.33.79:8000/lib/dowload_framework_file?app_id=Spec&name=#{framework_name}"
89
+ puts url
90
+ begin
91
+ f.write(open(url) do |f1| f1.read end)
92
+ rescue StandardError,Timeout::Error, SystemCallError, Errno::ECONNREFUSED
93
+ puts $!
94
+ end
95
+
96
+ end
97
+ end
98
+
99
+ puts '解压静态库'
100
+ # 调用shell解压更简单,ruby不好写解压
101
+ system `
102
+ zip_names=$(ls)
103
+ for name in $zip_names
104
+ do
105
+ unzip -qq $name
106
+ rm $name
107
+ done
108
+ `
109
+ Dir.chdir('..')
110
+
111
+ biz_names = $source_biz_names
112
+ biz_framework_names = []
113
+ biz_names.each do |name|
114
+ biz_framework_names << name + ".framework"
115
+ end
116
+
117
+ project_path = 'Spec.xcodeproj'
118
+ project = Xcodeproj::Project.open(project_path)
119
+
120
+ puts '更改Spec.xcodeproj的pecmain group的引用路径'
121
+ project.main_group.set_source_tree('SOURCE_ROOT')
122
+ project.main_group.set_path('../Spec')
123
+
124
+
125
+ puts '更改Spec.xcodeproj中info.plist,pch,entitlements的引用路径'
126
+ # 修改info.plist,pch,entitlements的引用路径
127
+ project.targets.each do |target|
128
+ target.build_configurations.each do |config|
129
+ if config.build_settings.has_key?('INFOPLIST_FILE')
130
+ info_plist_config = config.build_settings['INFOPLIST_FILE']
131
+
132
+ info_plist_config = "../Spec/" + info_plist_config
133
+ config.build_settings['INFOPLIST_FILE'] = info_plist_config
134
+ end
135
+ if config.build_settings.has_key?('GCC_PREFIX_HEADER')
136
+ pch_config = config.build_settings['GCC_PREFIX_HEADER']
137
+ pch_config = "../Spec/" + pch_config
138
+ config.build_settings['GCC_PREFIX_HEADER'] = pch_config
139
+ end
140
+ if config.build_settings.has_key?('CODE_SIGN_ENTITLEMENTS')
141
+ entitlements_config = config.build_settings['CODE_SIGN_ENTITLEMENTS']
142
+ entitlements_config = "../Spec/" + entitlements_config
143
+ config.build_settings['CODE_SIGN_ENTITLEMENTS'] = entitlements_config
144
+ end
145
+ if config.build_settings.has_key?('FRAMEWORK_SEARCH_PATHS')
146
+ paths = config.build_settings['FRAMEWORK_SEARCH_PATHS']
147
+ puts(">>>>>>>>>>>>>>>>>#{paths}")
148
+ # entitlements_?config = "../Spec/" + entitlements_config
149
+ # config.build_settings['CODE_SIGN_ENTITLEMENTS'] = entitlements_config
150
+ end
151
+ end
152
+ end
153
+
154
+ puts 'FRAMEWORK_SEARCH_PATHS新增路径'
155
+ project.build_configuration_list.build_configurations.each do |config|
156
+ if config.build_settings.has_key?('FRAMEWORK_SEARCH_PATHS')
157
+ paths = config.build_settings['FRAMEWORK_SEARCH_PATHS']
158
+ if paths.is_a?(String)
159
+ config.build_settings['FRAMEWORK_SEARCH_PATHS'] = [paths,"VSBizFrameworks"]
160
+ else
161
+ config.build_settings['FRAMEWORK_SEARCH_PATHS'] << "VSBizFrameworks"
162
+ end
163
+ end
164
+ end
165
+
166
+ puts'修改静态库库的引用'
167
+ project.files.each do |file_ref|
168
+ if file_ref.last_known_file_type == "wrapper.framework" && file_ref.name =~ /^VSBiz/ && !biz_framework_names.include?(file_ref.name)
169
+ file_ref.set_source_tree("SOURCE_ROOT")
170
+ file_ref.set_path("VSBizFrameworks/" + file_ref.name)
171
+ elsif file_ref.explicit_file_type == "wrapper.framework" && file_ref.path =~ /^VSBiz/ && !biz_framework_names.include?(file_ref.path)
172
+ file_ref.set_source_tree("SOURCE_ROOT")
173
+ file_ref.name = file_ref.path
174
+ file_ref.set_path("VSBizFrameworks/" + file_ref.path)
175
+ end
176
+ end
177
+
178
+ puts '修改Copy Modular Resources 脚本:"${SRCROOT}/Resources/Support/modular-resources-copy.sh" => "${SRCROOT}/../Spec/Resources/Support/modular-resources-copy.sh"'
179
+ project.targets.each do |target|
180
+ target.shell_script_build_phases.each do |phase|
181
+ if phase.name == 'Copy Modular Resources'
182
+ phase.shell_script = '"${SRCROOT}/../Spec/Resources/Support/modular-resources-copy.sh"'
183
+ end
184
+ end
185
+ end
186
+ project.save
187
+
188
+ puts'生成新的workspace'
189
+ workspace_xml = <<XML
190
+ <?xml version="1.0" encoding="UTF-8"?>
191
+ <Workspace
192
+ version = "1.0">
193
+ </Workspace>
194
+ XML
195
+
196
+
197
+ workspace = Xcodeproj::Workspace.from_s(workspace_xml)
198
+
199
+ spec_file_ref = Xcodeproj::Workspace::FileReference.new("Spec.xcodeproj")
200
+ base_module_file_ref = Xcodeproj::Workspace::FileReference.new("../VSBaseModule/VSBaseModule.xcodeproj")
201
+ public_file_ref = Xcodeproj::Workspace::FileReference.new("../VSPublic/VSPublic.xcodeproj")
202
+ pods_file_ref = Xcodeproj::Workspace::FileReference.new("../Pods/Pods.xcodeproj")
203
+
204
+ workspace << spec_file_ref
205
+ workspace << base_module_file_ref
206
+ biz_names.each do |each|
207
+ fileRef = Xcodeproj::Workspace::FileReference.new("../#{each}/#{each}.xcodeproj")
208
+ workspace << fileRef
209
+ end
210
+ workspace << public_file_ref
211
+ workspace << pods_file_ref
212
+
213
+ workspace_path = "Spec.xcworkspace"
214
+ workspace.save_as(workspace_path)
215
+
216
+ puts'FastDev完成。打开FastDev/Spec.xcworkspace文件开始开发。'
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vfastdev
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - Sen.Mao
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-09-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: xcodeproj
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ description: iOS FastDev工具
28
+ email: sen.mao
29
+ executables:
30
+ - vfastdev
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - bin/vfastdev
35
+ - lib/vfastdev.rb
36
+ homepage: http://gitlab.tools.vipshop.com/sen.mao/FastDev
37
+ licenses:
38
+ - MIT
39
+ metadata: {}
40
+ post_install_message:
41
+ rdoc_options: []
42
+ require_paths:
43
+ - lib
44
+ required_ruby_version: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: 2.3.0
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ requirements: []
55
+ rubyforge_project:
56
+ rubygems_version: 2.5.2.3
57
+ signing_key:
58
+ specification_version: 4
59
+ summary: FastDev!
60
+ test_files: []