cocoapods-tag 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 0fc5297e51950ca49c7e6862bcd9ccaa7707c88b1568df30ed32cc165cb05d48
4
+ data.tar.gz: adf8df13f96690d4d98eeb08d801d7570f255eabc8d16ad395ccfb71d7815fd5
5
+ SHA512:
6
+ metadata.gz: 9cd6328f564dcfe676bd940258a0a1d8701ecc1eff4451fa856c6808cb64d475d2659db869424ee316ecdcb589533ee37b045dfb1ea1b3a2b779c5cadb715713
7
+ data.tar.gz: 1e83a70c3ea110853d6fa97ef376cd121848567ec681b08949de3c0f2bde6e6b14fd660abbd4313de613523d72f6848baeb08b8a884d746841aba3b9584c59b2
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2022 Jensen <zys2@meitu.com>
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,36 @@
1
+ ## 简介
2
+
3
+ `cocoapods-tag`是一个可以方便地帮助Pod库打tag的`CocoaPods`插件,插件采用问答的方式提示用户输入相应内容,简单、方便、快捷。
4
+
5
+ ## 安装
6
+
7
+ ```shell
8
+ $ gem install cocoapods-tag
9
+ ```
10
+
11
+ ## 使用
12
+
13
+ * 查看帮助
14
+
15
+ ```shell
16
+ $ pod tag --help
17
+ ```
18
+
19
+ * 创建tag并push到远端,并询问是否上传podspec到spec repo
20
+
21
+ ```shell
22
+ $ pod tag
23
+ # 或
24
+ $ pod tag create
25
+ ```
26
+
27
+ * 上传podspec到spec repo
28
+
29
+ ```shell
30
+ $ pod tag spec-push REPO NAME.podspec
31
+ ```
32
+
33
+ ## 演示gif
34
+
35
+ <img src='./cocoapods-tag.gif' width='100%' />
36
+
@@ -0,0 +1,320 @@
1
+ require 'cocoapods-tag/helper/asker'
2
+
3
+ module Pod
4
+ class Command
5
+ class Tag < Command
6
+ class Create < Tag
7
+ include Pod
8
+
9
+ GITHUB_DOMAIN = "github.com".freeze
10
+ GIT_REPO = ".git".freeze
11
+ PODSPEC_EXT = %w[podspec podspec.json].freeze
12
+
13
+ self.summary = '创建 tag 并 push 到远端仓库,同时可以上传 podspec 到 spec repo'
14
+
15
+ self.description = <<-DESC
16
+ #{self.summary}
17
+ DESC
18
+
19
+ def initialize(argv)
20
+ super
21
+ end
22
+
23
+ def run
24
+ require 'cocoapods-tag/native/validator'
25
+
26
+ # 欢迎提示
27
+ asker.welcome_message
28
+ # 检查本地 git 仓库
29
+ check_git_repo?
30
+ # 加载 podspec
31
+ load_podspec
32
+ # 提示用户输入 version
33
+ ask_version
34
+ # 提示用户输入前缀
35
+ ask_prefix
36
+ # 提示用户输入后缀
37
+ ask_suffix
38
+ # 提示用户输入 commit msg 和 tag msg
39
+ ask_commit_tag_msg
40
+ # 询问用户推送到哪个远端仓库
41
+ ask_remote
42
+ # 提示用户确认
43
+ ask_sure
44
+ # 修改 podspec
45
+ modify_podspec
46
+ # 推送 tag 到远端
47
+ git_tag_push
48
+ # 询问用户是否推送 podspec 到 spec 仓库
49
+ ask_push_podspec_to_repo
50
+ # 结束提示
51
+ asker.done_message if @error.nil?
52
+ end
53
+
54
+ private
55
+
56
+ # 加载 podspec
57
+ def load_podspec
58
+ unless check_podspec_exist?
59
+ raise Informative, "`#{Dir.pwd}`不存在podspec"
60
+ end
61
+ @spec = Specification.from_file(@podspecs.first)
62
+ raise Informative, "加载`#{@podspecs.first}`失败!" if @spec.nil?
63
+ @spec_hash = @spec.to_hash
64
+ source = @spec_hash['source']
65
+ # 目前只处理 git 这种形式
66
+ unless source['git']
67
+ raise Informative, "目前只能处理`git`这种形式"
68
+ end
69
+ # git字段为空
70
+ if source['git'] && source['git'].strip == ''
71
+ raise Informative, "source中git字段不能为空"
72
+ end
73
+ # 判断 source 中是否包含 github.com
74
+ if source['git'] && source['git'].include?(GITHUB_DOMAIN)
75
+ message = "\n`#{@podspecs.first}`的source中包含`#{GITHUB_DOMAIN}`,请确认是否正确?"
76
+ answer = asker.ask(message, true, nil, { '1' => '正确✅', '2' => '错误❌' })
77
+ if answer == '2'
78
+ exit("\n程序终止\n")
79
+ end
80
+ end
81
+ # 修改前校验一次 podspec
82
+ lint_podspec("\n修改前校验`#{@podspecs.first}`:\n")
83
+ end
84
+
85
+ # 检查 git repo
86
+ def check_git_repo?
87
+ print "检查git仓库:\n".yellow
88
+
89
+ git_repo = File.join(Dir.pwd, GIT_REPO)
90
+ raise Informative, "`#{Dir.pwd}`不存在git仓库,请先使用`git init`初始化git仓库" unless File.exist?(git_repo)
91
+
92
+ remotes = `git remote`.split("\n")
93
+ raise Informative, "本地git仓库没有与远端仓库关联,请先使用`git remote add`关联远端仓库" if remotes.empty?
94
+
95
+ local_commit = `git rev-parse HEAD`.chomp
96
+ remote_commit = `git ls-remote --head`.split("\t")[0]
97
+ raise Informative, "本地git仓库没有与远端同步,请先执行`git pull`或`git fetch + git rebase`拉取最新代码" unless local_commit == remote_commit
98
+ end
99
+
100
+ # 提示用户输入版本号
101
+ def ask_version
102
+ question = "\n请输入版本号(用于修改`podspec`中的`version`):"
103
+ pre_answer = @spec_hash['version']
104
+ regx = {
105
+ "tip" => "版本号中间必须有'.'且每一位只支持数字,如:0.1、1.1.2等",
106
+ "pattern" => /^(\d+\.)+\d+$/
107
+ }
108
+ @version = asker.ask(question, true, pre_answer, nil, regx)
109
+ end
110
+
111
+ # 提示用户输入前缀
112
+ def ask_prefix
113
+ question = "\n请输入tag前缀:"
114
+ @prefix = asker.ask(question)
115
+ print "无前缀\n" if @prefix.size == 0
116
+ end
117
+
118
+ # 提示用户输入后缀
119
+ def ask_suffix
120
+ question = "\n请输入tag后缀:"
121
+ @suffix = asker.ask(question)
122
+ print "无后缀\n" if @suffix.size == 0
123
+ end
124
+
125
+ # 提示用户输入 commit msg 和 tag msg
126
+ def ask_commit_tag_msg
127
+ @commit_msg = asker.ask("\n请输入commit信息:", true)
128
+ @tag_msg = asker.ask("\n请输入tag信息:", true)
129
+ end
130
+
131
+ # 询问用户推送到哪个远端仓库
132
+ def ask_remote
133
+ remotes = `git remote`.split("\n")
134
+ @remote = remotes[0] unless remotes.empty?
135
+ if remotes.size > 1
136
+ count = 0
137
+ selections = {}
138
+ remotes.map do |remote|
139
+ count += 1
140
+ selections["#{count}"] = remote
141
+ end
142
+ key = asker.ask("\n请选择推送到的远端仓库:", true, nil, selections)
143
+ @remote = remotes["#{key}".to_i]
144
+ end
145
+ end
146
+
147
+ # 提示用户确认信息
148
+ def ask_sure
149
+ @tag = "#{@prefix}#{@version}#{@suffix}"
150
+ question = <<-Q
151
+
152
+ 请确认以下信息:
153
+ ——————————————————————————————————————
154
+ |tag: #{@tag}
155
+ |version: #{@version}
156
+ |commit_msg: #{@commit_msg}
157
+ |tag_msg: #{@tag_msg}
158
+ |current_branch: #{current_branch}
159
+ |remote: #{@remote}
160
+ ——————————————————————————————————————
161
+ Q
162
+ selections = {'1'=> '确认', '2'=> '取消'}
163
+ answer = asker.ask(question, true, nil, selections)
164
+ if answer == 2
165
+ exit("\n程序终止\n")
166
+ end
167
+ end
168
+
169
+ # 修改podspec
170
+ def modify_podspec
171
+ if @podspecs.nil? || @podspecs.empty?
172
+ return
173
+ end
174
+ podspec = @podspecs.first
175
+ file = File.join(Dir.pwd, "#{podspec}")
176
+ # 匹配文件名后缀
177
+ if podspec =~ /.podspec$/
178
+ modify_podspec_ruby(file)
179
+ elsif podspec =~ /.podspec.json$/
180
+ modify_podspec_json(file)
181
+ end
182
+ # 修改完再次校验 podspec
183
+ lint_podspec("\n修改后校验`#{@podspecs.first}`:\n")
184
+ end
185
+
186
+ # 修改 *.podspec
187
+ def modify_podspec_ruby(file)
188
+ org_source = @spec_hash['source']
189
+ des_source = "{ :git => '#{org_source['git']}', :tag => '#{@tag}' }"
190
+ File.open(file, 'r') do |f|
191
+ lines = []
192
+ f.each_line do |line|
193
+ if line =~ /(^\s*.+\.version\s*=\s*).*/
194
+ line = line.sub(/(^\s*.+\.version\s*=\s*).*/, "#{$1}'#{@version}'")
195
+ end
196
+ if line =~ /(^\s*.+\.source\s*=\s*).*/
197
+ line = line.sub(/(^\s*.+\.source\s*=\s*).*/, "#{$1}#{des_source}")
198
+ end
199
+ lines << line
200
+ end
201
+ File.open(file, 'w') do |f|
202
+ f.write(lines.join(""))
203
+ end
204
+ end
205
+ end
206
+
207
+ # 修改 *.podspec.json
208
+ def modify_podspec_json(file)
209
+ @spec_hash['version'] = @version
210
+ @spec_hash['source'] = {
211
+ 'git'=> @spec_hash['source']['git'],
212
+ 'tag'=> "#{@tag}"
213
+ }
214
+ File.open(file, 'w') do |f|
215
+ f.write(@spec_hash)
216
+ end
217
+ end
218
+
219
+ # 校验 podspec
220
+ def lint_podspec(tip = "\n校验`#{@podspecs.first}`:\n")
221
+ print "#{tip}".yellow
222
+ argvs = [
223
+ @podspecs.first,
224
+ '--quick',
225
+ '--allow-warnings'
226
+ ]
227
+ lint = Pod::Command::Spec::Lint.new(CLAide::ARGV.new(argvs))
228
+ lint.validate!
229
+ lint.run
230
+ end
231
+
232
+ # 推送 tag 到远端
233
+ def git_tag_push
234
+ print "\n推送commit到远端git仓库`#{@remote}/#{current_branch}`:\n".yellow
235
+ begin
236
+ `git add #{@podspecs.first}`
237
+ `git commit -m #{@commit_msg}`
238
+ `git push #{@remote} #{current_branch}`
239
+ rescue Pod::StandardError => e
240
+ @error = e
241
+ print "推送commit到远端git仓库`#{@remote}/#{current_branch}`失败:#{e}".red
242
+ end
243
+
244
+ print "\n创建tag:#{@tag}并推送至远端:\n".yellow
245
+ begin
246
+ `git tag -a #{@tag} -m #{@tag_msg}`
247
+ `git push #{@remote} --tags`
248
+ rescue Pod::StandardError => e
249
+ @error = e
250
+ print "创建tag:#{@tag}并推送至远端失败:#{e}".red
251
+ end
252
+ end
253
+
254
+ # 询问用户是否推送 podspec 到 spec 仓库
255
+ def ask_push_podspec_to_repo
256
+ answer = asker.ask("\n是否推送podspec到spec仓库?", true, nil, {'1'=> 'YES', '2' => 'NO'})
257
+ if answer == '1'
258
+ @spec_repo = asker.ask("\n请输入本地spec仓库名称(可以通过`pod repo list`查看):", true)
259
+ repos = `pod repo list`.split("\n").reject { |repo| repo == '' || repo =~ /^-/ }
260
+ unless repos.include?(@spec_repo)
261
+ print "本地不存在`#{@spec_repo}`仓库,请先`pod repo add`添加该仓库\n"
262
+ return
263
+ end
264
+ unless @spec_repo == ''
265
+ push_podspec_to_repo
266
+ end
267
+ else
268
+ print "跳过推送podspec到spec仓库\n"
269
+ end
270
+ end
271
+
272
+ # 推送 podspec 到 spec repo
273
+ def push_podspec_to_repo
274
+ print "\n推送`#{@podspecs.first}`到`#{@spec_repo}`仓库".yellow
275
+ argvs = [
276
+ @spec_repo,
277
+ @podspecs.first,
278
+ '--allow-warnings'
279
+ ]
280
+ begin
281
+ push = Pod::Command::Repo::Push.new(CLAide::ARGV.new(argvs))
282
+ push.validate!
283
+ push.run
284
+ rescue Pod::StandardError => e
285
+ @error = e
286
+ print "推送`#{@podspecs.first}`到`#{@spec_repo}`仓库失败!#{e}".red
287
+ end
288
+ end
289
+
290
+ def exit(status = -1, msg)
291
+ print "#{msg}".red
292
+ Process.exit(status)
293
+ end
294
+
295
+ def asker
296
+ @asker ||= begin
297
+ Helper::Asker.new()
298
+ end
299
+ end
300
+
301
+ # 获取当前分支
302
+ def current_branch
303
+ @current_branch ||= begin
304
+ `git branch`.split(' ')[1]
305
+ end
306
+ end
307
+
308
+ # 检查当前目录是否有podspec
309
+ def check_podspec_exist?
310
+ @podspecs = Dir.glob("*.{#{PODSPEC_EXT.join(',')}}")
311
+ if @podspecs.empty?
312
+ return false
313
+ end
314
+ true
315
+ end
316
+
317
+ end
318
+ end
319
+ end
320
+ end
@@ -0,0 +1,53 @@
1
+
2
+ module Pod
3
+ class Command
4
+ class Tag < Command
5
+ class SpecPush < Tag
6
+
7
+ self.summary = '上传 podspec 到 spec 仓库,自动跳过 xcodebuild 编译校验'
8
+
9
+ self.description = <<-DESC
10
+ #{self.summary}
11
+ DESC
12
+
13
+ self.arguments = [
14
+ CLAide::Argument.new('REPO', true ),
15
+ CLAide::Argument.new('NAME.podspec', true )
16
+ ]
17
+
18
+ def initialize(argv)
19
+ @repo = argv.shift_argument
20
+ @podspec = argv.shift_argument
21
+ super
22
+ end
23
+
24
+ def run
25
+ require 'cocoapods-tag/native/validator'
26
+
27
+ unless @repo
28
+ raise Informative, "请输入spec repo"
29
+ end
30
+ unless @podspec
31
+ raise Informative, "请输入要上传的podspec"
32
+ end
33
+ UI.title "推送`#{@podspec}`到`#{@repo}`仓库".yellow do
34
+ argvs = [
35
+ @repo,
36
+ @podspec,
37
+ '--allow-warnings'
38
+ ]
39
+ begin
40
+ push = Pod::Command::Repo::Push.new(CLAide::ARGV.new(argvs))
41
+ push.validate!
42
+ push.run
43
+ rescue Pod::StandardError => e
44
+ @error = e
45
+ print "推送`#{@podspec}`到`#{@repo}`仓库失败!#{e}".red
46
+ end
47
+ end
48
+ end
49
+
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,22 @@
1
+ require 'cocoapods-tag/command/tag/create'
2
+ require 'cocoapods-tag/command/tag/spec_push'
3
+
4
+ module Pod
5
+ class Command
6
+ class Tag < Command
7
+
8
+ self.abstract_command = true
9
+ self.default_subcommand = 'create'
10
+
11
+ self.summary = '🚀 方便地帮助 pod 库打 tag'
12
+ self.description = <<-DESC
13
+ #{self.summary}
14
+ DESC
15
+
16
+ def initialize(argv)
17
+ super
18
+ end
19
+
20
+ end
21
+ end
22
+ end
@@ -0,0 +1 @@
1
+ require 'cocoapods-tag/command/tag'
@@ -0,0 +1,3 @@
1
+ module CocoapodsTag
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,65 @@
1
+ require 'cocoapods-tag/gem_version.rb'
2
+
3
+ class Helper
4
+ class Asker
5
+
6
+ def ask(question, required = false, pre_answer = nil, selections = nil, regx = nil )
7
+ question_msg = "#{question}\n"
8
+ question_msg += "旧值:#{pre_answer}\n" if pre_answer
9
+ keys = []
10
+ if selections && selections.is_a?(Hash)
11
+ keys = selections.keys
12
+ selections.each do |k, v|
13
+ question_msg += "#{k}:#{v}\n"
14
+ end
15
+ end
16
+ print question_msg.yellow
17
+ answer = ''
18
+ loop do
19
+ show_prompt
20
+ answer = STDIN.gets.chomp.strip
21
+ # 判断是否为空
22
+ if required && answer == ''
23
+ print "该项为必填项\n"
24
+ next
25
+ end
26
+ # 判断是否符合正则
27
+ if regx && regx.is_a?(Hash)
28
+ tip = regx['tip']
29
+ pattern = regx['pattern']
30
+ unless answer =~ pattern
31
+ print "#{tip}\n"
32
+ next
33
+ end
34
+ end
35
+ # 有固定选项 && 输入的值不在选项中
36
+ if selections && !keys.include?(answer)
37
+ print "请输入#{keys}中的一个值:\n"
38
+ next
39
+ end
40
+ break
41
+ end
42
+ answer
43
+ end
44
+
45
+ def welcome_message
46
+ message = <<-MSG
47
+ 👏🏻欢迎使用 `cocoapods-tag` 插件👏🏻
48
+ 👏🏻version: #{CocoapodsTag::VERSION}👏🏻
49
+
50
+ MSG
51
+ print message.green
52
+ end
53
+
54
+ def done_message
55
+ print "\n🌺 恭喜你完成任务 🌺\n".green
56
+ end
57
+
58
+ private
59
+
60
+ def show_prompt
61
+ print '> '.green
62
+ end
63
+
64
+ end
65
+ end
@@ -0,0 +1,9 @@
1
+
2
+ module Pod
3
+ class Validator
4
+ # 跳过 xcodebuild 校验
5
+ def perform_extensive_analysis(spec)
6
+ true
7
+ end
8
+ end
9
+ end
@@ -0,0 +1 @@
1
+ require 'cocoapods-tag/gem_version'
@@ -0,0 +1 @@
1
+ require 'cocoapods-tag/command'
@@ -0,0 +1,12 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ module Pod
4
+ describe Command::Tag do
5
+ describe 'CLAide' do
6
+ it 'registers it self' do
7
+ Command.parse(%w{ tag }).should.be.instance_of Command::Tag
8
+ end
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,50 @@
1
+ require 'pathname'
2
+ ROOT = Pathname.new(File.expand_path('../../', __FILE__))
3
+ $:.unshift((ROOT + 'lib').to_s)
4
+ $:.unshift((ROOT + 'spec').to_s)
5
+
6
+ require 'bundler/setup'
7
+ require 'bacon'
8
+ require 'mocha-on-bacon'
9
+ require 'pretty_bacon'
10
+ require 'pathname'
11
+ require 'cocoapods'
12
+
13
+ Mocha::Configuration.prevent(:stubbing_non_existent_method)
14
+
15
+ require 'cocoapods_plugin'
16
+
17
+ #-----------------------------------------------------------------------------#
18
+
19
+ module Pod
20
+
21
+ # Disable the wrapping so the output is deterministic in the tests.
22
+ #
23
+ UI.disable_wrap = true
24
+
25
+ # Redirects the messages to an internal store.
26
+ #
27
+ module UI
28
+ @output = ''
29
+ @warnings = ''
30
+
31
+ class << self
32
+ attr_accessor :output
33
+ attr_accessor :warnings
34
+
35
+ def puts(message = '')
36
+ @output << "#{message}\n"
37
+ end
38
+
39
+ def warn(message = '', actions = [])
40
+ @warnings << "#{message}\n"
41
+ end
42
+
43
+ def print(message)
44
+ @output << message
45
+ end
46
+ end
47
+ end
48
+ end
49
+
50
+ #-----------------------------------------------------------------------------#
metadata ADDED
@@ -0,0 +1,100 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cocoapods-tag
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Jensen
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-04-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: cocoapods
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
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
+ description: 方便地帮助pod库打tag的CocoaPods插件
56
+ email:
57
+ - zys2@meitu.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - LICENSE.txt
63
+ - README.md
64
+ - lib/cocoapods-tag.rb
65
+ - lib/cocoapods-tag/command.rb
66
+ - lib/cocoapods-tag/command/tag.rb
67
+ - lib/cocoapods-tag/command/tag/create.rb
68
+ - lib/cocoapods-tag/command/tag/spec_push.rb
69
+ - lib/cocoapods-tag/gem_version.rb
70
+ - lib/cocoapods-tag/helper/asker.rb
71
+ - lib/cocoapods-tag/native/validator.rb
72
+ - lib/cocoapods_plugin.rb
73
+ - spec/command/tag_spec.rb
74
+ - spec/spec_helper.rb
75
+ homepage: https://github.com/Zhangyanshen/cocoapods-tag.git
76
+ licenses:
77
+ - MIT
78
+ metadata: {}
79
+ post_install_message:
80
+ rdoc_options: []
81
+ require_paths:
82
+ - lib
83
+ required_ruby_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ requirements: []
94
+ rubygems_version: 3.1.2
95
+ signing_key:
96
+ specification_version: 4
97
+ summary: 方便地帮助pod库打tag的CocoaPods插件,可以校验podspec的合法性
98
+ test_files:
99
+ - spec/command/tag_spec.rb
100
+ - spec/spec_helper.rb