cocoapods-dev-env 0.9.9 → 2.1.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c819e17e2e938cabcc1855c0990b2d0eaaba2af6f53af8a16677c341bc055429
4
- data.tar.gz: 73f66541b3cf873f2b88e99766b103dc388551ac06b315bad6862b3658f98e67
3
+ metadata.gz: 1b812296f28342f1708bda8556027923934872fc111920e70317d551e6dca5db
4
+ data.tar.gz: 532daa402827318f2110aaed1da2fa3896c1c97897e23bced39bbb723e2d867d
5
5
  SHA512:
6
- metadata.gz: 1b3838c06c15f347f2464c6b641e6781f9c3d1166c8f32897db7c728c3595ab1736b95beb8f3624bc8174b45d9c099d53949a271d235a46f4d36035a5f00c585
7
- data.tar.gz: 5f91efccbc4ed658d2c5383ed0555649bd42491631c26aef42b5235028ec18e2d1decbc833fb27d5bd9991a07d39b39a16f7ad2ad655627d56278e8e71044166
6
+ metadata.gz: b5ded21c4b040ae5b50f72dba1627233af519d4de30d69f26c8249285d056a23a20220a589001e728f50103857ebf3537bdfbe9ae9e3060457a04c30170c8987
7
+ data.tar.gz: 8fbcaa555da7caed0cd31bb78855bdd0fe93c20a7717d537be71d914f364aab8b53aa61ba7e828a8486a40138f2136d203e453c5e0ac585161957f65f8c02337
data/.gitignore CHANGED
@@ -6,3 +6,4 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ vendor/
data/Gemfile.lock ADDED
@@ -0,0 +1,121 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ cocoapods-dev-env (2.1.8)
5
+ luna-binary-uploader
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ CFPropertyList (3.0.5)
11
+ rexml
12
+ activesupport (6.1.4.6)
13
+ concurrent-ruby (~> 1.0, >= 1.0.2)
14
+ i18n (>= 1.6, < 2)
15
+ minitest (>= 5.1)
16
+ tzinfo (~> 2.0)
17
+ zeitwerk (~> 2.3)
18
+ addressable (2.8.0)
19
+ public_suffix (>= 2.0.2, < 5.0)
20
+ algoliasearch (1.27.5)
21
+ httpclient (~> 2.8, >= 2.8.3)
22
+ json (>= 1.5.1)
23
+ atomos (0.1.3)
24
+ claide (1.1.0)
25
+ cocoapods (1.11.2)
26
+ addressable (~> 2.8)
27
+ claide (>= 1.0.2, < 2.0)
28
+ cocoapods-core (= 1.11.2)
29
+ cocoapods-deintegrate (>= 1.0.3, < 2.0)
30
+ cocoapods-downloader (>= 1.4.0, < 2.0)
31
+ cocoapods-plugins (>= 1.0.0, < 2.0)
32
+ cocoapods-search (>= 1.0.0, < 2.0)
33
+ cocoapods-trunk (>= 1.4.0, < 2.0)
34
+ cocoapods-try (>= 1.1.0, < 2.0)
35
+ colored2 (~> 3.1)
36
+ escape (~> 0.0.4)
37
+ fourflusher (>= 2.3.0, < 3.0)
38
+ gh_inspector (~> 1.0)
39
+ molinillo (~> 0.8.0)
40
+ nap (~> 1.0)
41
+ ruby-macho (>= 1.0, < 3.0)
42
+ xcodeproj (>= 1.21.0, < 2.0)
43
+ cocoapods-core (1.11.2)
44
+ activesupport (>= 5.0, < 7)
45
+ addressable (~> 2.8)
46
+ algoliasearch (~> 1.0)
47
+ concurrent-ruby (~> 1.1)
48
+ fuzzy_match (~> 2.0.4)
49
+ nap (~> 1.0)
50
+ netrc (~> 0.11)
51
+ public_suffix (~> 4.0)
52
+ typhoeus (~> 1.0)
53
+ cocoapods-deintegrate (1.0.5)
54
+ cocoapods-disable-podfile-validations (0.1.1)
55
+ cocoapods-downloader (1.5.1)
56
+ cocoapods-generate (2.0.1)
57
+ cocoapods-disable-podfile-validations (~> 0.1.1)
58
+ cocoapods-imy-bin (0.3.1.3)
59
+ cocoapods
60
+ cocoapods-generate (~> 2.0.0)
61
+ parallel
62
+ cocoapods-plugins (1.0.0)
63
+ nap
64
+ cocoapods-search (1.0.1)
65
+ cocoapods-trunk (1.6.0)
66
+ nap (>= 0.8, < 2.0)
67
+ netrc (~> 0.11)
68
+ cocoapods-try (1.2.0)
69
+ colored2 (3.1.2)
70
+ concurrent-ruby (1.1.9)
71
+ escape (0.0.4)
72
+ ethon (0.14.0)
73
+ ffi (>= 1.15.0)
74
+ ffi (1.15.3)
75
+ fourflusher (2.3.1)
76
+ fuzzy_match (2.0.4)
77
+ gh_inspector (1.1.3)
78
+ gli (2.19.0)
79
+ httpclient (2.8.3)
80
+ i18n (1.9.1)
81
+ concurrent-ruby (~> 1.0)
82
+ json (2.5.1)
83
+ luna-binary-uploader (0.1.26)
84
+ cocoapods
85
+ cocoapods-generate (~> 2.0.1)
86
+ cocoapods-imy-bin (= 0.3.1.3)
87
+ gli (= 2.19.0)
88
+ parallel
89
+ minitest (5.15.0)
90
+ molinillo (0.8.0)
91
+ nanaimo (0.3.0)
92
+ nap (1.1.0)
93
+ netrc (0.11.0)
94
+ parallel (1.21.0)
95
+ public_suffix (4.0.6)
96
+ rake (10.5.0)
97
+ rexml (3.2.5)
98
+ ruby-macho (2.5.1)
99
+ typhoeus (1.4.0)
100
+ ethon (>= 0.9.0)
101
+ tzinfo (2.0.4)
102
+ concurrent-ruby (~> 1.0)
103
+ xcodeproj (1.21.0)
104
+ CFPropertyList (>= 2.3.3, < 4.0)
105
+ atomos (~> 0.1.3)
106
+ claide (>= 1.0.2, < 2.0)
107
+ colored2 (~> 3.1)
108
+ nanaimo (~> 0.3.0)
109
+ rexml (~> 3.2.4)
110
+ zeitwerk (2.5.4)
111
+
112
+ PLATFORMS
113
+ ruby
114
+
115
+ DEPENDENCIES
116
+ bundler (~> 2.0)
117
+ cocoapods-dev-env!
118
+ rake (~> 10.0)
119
+
120
+ BUNDLED WITH
121
+ 2.2.20
data/README.md CHANGED
@@ -42,6 +42,14 @@ Finally the state clean submodule will be removed automatically.
42
42
  3. When you define "dev_env" to "release", and run ```pod install``` .
43
43
  We want to use the release version in cocoapods repo. And do many check for state, and help you to release the not released pod.
44
44
 
45
+ 新增功能: 支持读取宿主工程的Podfile.lock文件,来获取宿主工程中的依赖,无需在单独的库的example工程中引用对应的pod
46
+ 此功能默认开启, 等同于在顶部写入如下配置: use_parent_lock_info!
47
+ 关闭方法 use_parent_lock_info! false
48
+ 宿主工程路径默认为"../../../"(因为默认放到developing_pods子文件夹下,对应的库文件夹下的Example文件夹下,故需要回溯三层)
49
+ 配置宿主工程相对路径的方法 use_parent_lock_info! :path => '../'
50
+ 暂不支持配置绝对路径,未来也不建议配置绝对路径指向固定的位置
51
+
52
+
45
53
 
46
54
  ## Development
47
55
 
@@ -0,0 +1,21 @@
1
+ {
2
+ "folders": [
3
+ {
4
+ "path": "."
5
+ }
6
+ ],
7
+ "settings": {
8
+ "ruby.useBundler": true, //run non-lint commands with bundle exec
9
+ "ruby.useLanguageServer": true, // use the internal language server (see below)
10
+ "ruby.lint": {
11
+ "rubocop": {
12
+ "useBundler": false // enable rubocop via bundler
13
+ }
14
+ },
15
+ "ruby.format": "rubocop",
16
+ "ruby.codeCompletion": "rcodetools",
17
+ "ruby.intellisense": "rubyLocate",
18
+ "editor.formatOnPaste": true,
19
+ "editor.formatOnSave": true, // use rubocop for formatting
20
+ }
21
+ }
@@ -28,6 +28,7 @@ Gem::Specification.new do |spec|
28
28
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
29
29
  spec.require_paths = ["lib"]
30
30
 
31
+ spec.add_dependency 'luna-binary-uploader'
31
32
  spec.add_development_dependency "bundler", "~> 2.0"
32
33
  spec.add_development_dependency "rake", "~> 10.0"
33
34
  end
@@ -1,7 +1,7 @@
1
1
  module Cocoapods
2
2
  module Dev
3
3
  module Env
4
- VERSION = "0.9.9"
4
+ VERSION = '2.1.8'
5
5
  end
6
6
  end
7
7
  end
@@ -1,8 +1,10 @@
1
- require "file_processer"
1
+ # frozen_string_literal: true
2
+
3
+ require 'file_processer'
4
+ require 'luna-binary-uploader'
2
5
 
3
6
  Pod::HooksManager.register('cocoapods-dev-env', :pre_install) do |installer|
4
- podfile = installer.podfile
5
- #puts installer.instance_variables
7
+ # puts installer.instance_variables
6
8
  # forbidden submodule not cloned
7
9
  # 会引起submodule HEAD回滚,不靠谱,先注释掉
8
10
  # `
@@ -11,190 +13,299 @@ Pod::HooksManager.register('cocoapods-dev-env', :pre_install) do |installer|
11
13
  end
12
14
 
13
15
  Pod::HooksManager.register('cocoapods-dev-env', :post_install) do |installer|
14
- #puts installer.instance_variables
16
+ # puts installer.instance_variables
15
17
  end
16
18
 
17
19
 
18
20
  $processedPodsState = Hash.new
19
21
  $processedPodsOptions = Hash.new
20
22
 
23
+ $podFileContentPodNameHash = Hash.new
24
+
25
+ $parentPodlockDependencyHash = Hash.new
26
+
27
+ $processedParentPods = Hash.new # 从父项目里读出来的pod当次已经下载或者加载过了就不需要再做一遍
28
+
29
+ $parrentPath = '../../../'
30
+
31
+ module Pod
32
+ class Dependency
33
+ def setRequirement(requirement)
34
+ @requirement = requirement
35
+ end
36
+ end
37
+ end
38
+
39
+
21
40
  module Pod
41
+
42
+ class Resolver
43
+
44
+ def search_for(dependency)
45
+ UI.message "fake search_for" + dependency.inspect
46
+ if $podFileContentPodNameHash.has_key?(dependency.root_name)
47
+ # 双重保证已经存在在pofile里的不再重复下载覆盖成父项目的配置
48
+ UI.message "parrent extenal source has downloaded"
49
+ else
50
+ parentPodInfo = $parentPodlockDependencyHash[dependency.root_name]
51
+ if parentPodInfo != nil
52
+ dependency.external_source = parentPodInfo.external_source
53
+ dependency.setRequirement(parentPodInfo.requirement)
54
+ #dependency.external_source = Hash[:path => '../../ZYSDK']
55
+ # dependency.external_source = Hash.new
56
+ UI.message "fake create_set_from_sources, changeexternal:" + dependency.inspect
57
+ dep = dependency
58
+ if !$processedParentPods.has_key?(dependency.root_name) && dependency.external_source != nil
59
+ $processedParentPods[dependency.root_name] = true
60
+ # 这里有缺陷: 已经下载过的不需要再下载了,但是不下载又进不到系统里,导致最后没有使用指定的依赖
61
+ # 这个没用 podfile.pod(dependency.root_name, dependency.external_source)
62
+ # if sandbox.specification_path(dep.root_name).nil? ||
63
+ # !dep.external_source[:path].nil? ||
64
+ # !sandbox.pod_dir(dep.root_name).directory? ||
65
+ # checkout_requires_update?(dep)
66
+ # # 已经存在就不再下载
67
+ source = ExternalSources.from_dependency(dependency, podfile.defined_in_file, true)
68
+ source.fetch(sandbox)
69
+ # end
70
+ end
71
+ end
72
+ end
73
+
74
+ aggregate_for_dependency(dependency).search(dependency)
75
+
76
+ @search[dependency] ||= begin
77
+ additional_requirements = if locked_requirement = requirement_for_locked_pod_named(dependency.name)
78
+ [locked_requirement]
79
+ else
80
+ Array(@podfile_requirements_by_root_name[dependency.root_name])
81
+ end
82
+
83
+ specifications_for_dependency(dependency, additional_requirements).freeze
84
+ end
85
+ end
86
+ end
87
+
22
88
  class DevEnv
23
89
  def self.keyword
24
90
  :dev_env # 'dev'/'beta'/'release'
25
91
  end
92
+ def self.binary_key
93
+ :dev_env_use_binary # true / false
94
+ end
26
95
  UI.message "🎉 plugin cocoapods-dev-env loaded 🎉".green
27
96
  end
28
- class Podfile
29
- class TargetDefinition
30
-
31
- def searchAndOpenLocalExample(path)
32
- _currentDir = Dir.pwd
33
- Dir.chdir(path)
34
- Dir.chdir("Example")
35
- `pod install`
36
- projPaths = Dir::glob("*.xcworkspace")
37
- if projPaths.count > 0
38
- `open -a Terminal ./`
39
- `open #{projPaths[0]}`
97
+ class Podfile
98
+ module DSL
99
+ def use_parent_lock_info!(option = true)
100
+ case option
101
+ when true, false
102
+ if !option
103
+ $parrentPath = ''
104
+ TargetDefinition.cleanParrentLockFile()
105
+ end
106
+ when Hash
107
+ $parrentPath = option.fetch(:path)
108
+ TargetDefinition.readParrentLockFile()
109
+ else
110
+ raise ArgumentError, "Got `#{option.inspect}`, should be a boolean or hash."
111
+ end
40
112
  end
41
- Dir.chdir(_currentDir)
42
113
  end
43
114
 
44
- def checkAndRemoveSubmodule(path)
45
- _currentDir = Dir.pwd
46
- Dir.chdir(path)
47
- output = `git status -s`
48
- puts output
49
- if output.length == 0
50
- output = `git status`
51
- if output.include?("push")
52
- raise "submodule #{path} 移除失败,有推送的修改"
115
+ class TargetDefinition
116
+ attr_reader :binary_repo_url
117
+ attr_reader :binary_source
118
+
119
+ def searchAndOpenLocalExample(path)
120
+ _currentDir = Dir.pwd
121
+ Dir.chdir(path)
122
+ Dir.chdir("Example")
123
+ `pod install`
124
+ projPaths = Dir::glob("*.xcworkspace")
125
+ if projPaths.count > 0
126
+ `open -a Terminal ./`
127
+ `open #{projPaths[0]}`
53
128
  end
54
- else
55
- raise "submodule #{path} 移除失败,有未提交的修改"
129
+ Dir.chdir(_currentDir)
56
130
  end
57
- Dir.chdir(_currentDir)
58
- `
59
- git submodule deinit #{path}
60
- rm -rf #{path}
61
- git rm #{path}
62
- `
63
- end
64
131
 
65
- def checkTagIsEqualToHead(tag, path)
66
- _currentDir = Dir.pwd
67
- Dir.chdir(path)
68
- result = `git describe --abbrev=4 HEAD`
69
- Dir.chdir(_currentDir)
70
- if result.include?(tag)
71
- return true
72
- else
73
- return checkTagOrBranchIsEqalToHead(tag, path)
132
+ def checkAndRemoveSubmodule(path)
133
+ _currentDir = Dir.pwd
134
+ Dir.chdir(path)
135
+ output = `git status -s`
136
+ puts output
137
+ if output.length == 0
138
+ output = `git status`
139
+ if output.include?("push")
140
+ raise "submodule #{path} 移除失败,有推送的修改"
141
+ end
142
+ else
143
+ raise "submodule #{path} 移除失败,有未提交的修改"
144
+ end
145
+ Dir.chdir(_currentDir)
146
+ `
147
+ git submodule deinit #{path}
148
+ rm -rf #{path}
149
+ git rm #{path}
150
+ `
74
151
  end
75
- end
76
-
77
- # 这个函数有问题有时候拿不到相同的commit id
78
- def checkTagOrBranchIsEqalToHead(branchOrTag, path)
79
- _currentDir = Dir.pwd
80
- Dir.chdir(path)
81
- headCommitID = `git rev-parse HEAD`
82
- tagCommitID = `git rev-parse #{branchOrTag}`
83
- UI.puts "#{`pwd`} headCommitID:#{headCommitID} \n #{branchOrTag}ComitID:#{tagCommitID}"
84
- Dir.chdir(_currentDir)
85
- return (headCommitID.length > 0 && headCommitID == tagCommitID)
86
- end
87
152
 
88
- def checkGitStatusAndPush(pod_name)
89
- output = `git status -s`
90
- puts output
91
- if output.length == 0
92
- output = `git status`
93
- if output.include?("push")
94
- ret = system("git push")
95
- if ret != true
96
- raise "💔 #{pod_name.yellow} push 失败"
97
- end
153
+ def checkTagIsEqualToHead(tag, path)
154
+ _currentDir = Dir.pwd
155
+ Dir.chdir(path)
156
+ result = `git describe --abbrev=4 HEAD`
157
+ Dir.chdir(_currentDir)
158
+ if result.include?(tag)
159
+ return true
160
+ else
161
+ return checkTagOrBranchIsEqalToHead(tag, path)
98
162
  end
99
- else
100
- raise "💔 #{pod_name.yellow} 有未提交的数据"
101
163
  end
102
- end
103
164
 
104
- def checkRemoteTagExist(tag)
105
- `git push --tags`
106
- ret = system("git ls-remote --exit-code origin refs/tags/#{tag}")
107
- return ret
108
- end
165
+ # 这个函数有问题有时候拿不到相同的commit id
166
+ def checkTagOrBranchIsEqalToHead(branchOrTag, path)
167
+ _currentDir = Dir.pwd
168
+ Dir.chdir(path)
169
+ headCommitID = `git rev-parse HEAD`
170
+ tagCommitID = `git rev-parse #{branchOrTag}`
171
+ UI.puts "#{`pwd`} headCommitID:#{headCommitID} \n #{branchOrTag}ComitID:#{tagCommitID}"
172
+ Dir.chdir(_currentDir)
173
+ return (headCommitID.length > 0 && headCommitID == tagCommitID)
174
+ end
109
175
 
110
- def addGitTagAndPush(tag, pod_name)
111
- ret = system("git tag #{tag}")
112
- if ret == true
113
- ret = system("git push origin #{tag}")
114
- if ret != true
115
- raise "💔 #{pod_name.yellow} push tag 失败"
176
+ def checkGitStatusAndPush(pod_name)
177
+ output = `git status -s`
178
+ puts output
179
+ if output.length == 0
180
+ output = `git status`
181
+ if output.include?("push")
182
+ ret = system("git push")
183
+ if ret != true
184
+ raise "💔 #{pod_name.yellow} push 失败"
185
+ end
186
+ end
187
+ else
188
+ raise "💔 #{pod_name.yellow} 有未提交的数据"
116
189
  end
117
190
  end
118
- return ret
119
- end
120
191
 
121
- def inputNeedJumpForReson(str)
122
- if ARGV.include? '--silent'
123
- return false
192
+ def checkRemoteTagExist(tag)
193
+ `git push --tags`
194
+ ret = system("git ls-remote --exit-code origin refs/tags/#{tag}")
195
+ return ret
124
196
  end
125
197
 
126
- puts str.green
127
- puts '是(Y), 任意其他输入或直接回车跳过'.green
128
- input = STDIN.gets
129
- if input[0,1] == "Y"
130
- return true
131
- else
132
- return false
198
+ def addGitTagAndPush(tag, pod_name)
199
+ ret = system("git tag #{tag}")
200
+ if ret == true
201
+ ret = system("git push origin #{tag}")
202
+ if ret != true
203
+ raise "💔 #{pod_name.yellow} push tag 失败"
204
+ end
205
+ end
206
+ return ret
133
207
  end
134
- end
135
208
 
136
- def getReposStrForLint()
137
- if podfile.sources.size == 0
138
- return ""
209
+ def inputNeedJumpForReson(str)
210
+ if ARGV.include? '--silent'
211
+ return false
212
+ end
213
+
214
+ puts str.green
215
+ puts '是(Y), 任意其他输入或直接回车跳过'.green
216
+ input = STDIN.gets
217
+ if input[0,1] == "Y"
218
+ return true
219
+ else
220
+ return false
221
+ end
139
222
  end
140
- str = " --sources="
141
- podfile.sources.each do |source|
142
- str += source
143
- str += ","
223
+
224
+ def getReposStrForLint()
225
+ if podfile.sources.size == 0
226
+ return ""
227
+ end
228
+ str = " --sources="
229
+ podfile.sources.each do |source|
230
+ str += source
231
+ str += ","
232
+ end
233
+ UI.puts str
234
+ return str
144
235
  end
145
- UI.puts str
146
- return str
147
- end
148
236
 
149
- def getUserRepoAddress()
150
- if podfile.sources.size == 0
151
- raise "💔 发布release必须配置仓库的地址, e.g.: source 'https://github.com/CocoaPods/Specs.git'"
237
+ def getUserRepoAddress()
238
+ if podfile.sources.size == 0
239
+ raise "💔 发布release必须配置仓库的地址, e.g.: source 'https://github.com/CocoaPods/Specs.git'"
240
+ end
241
+ index = nil
242
+ begin
243
+ UI.puts "\n\n⌨️ 请输入要发布到的cocoapods仓库序号, 按回车确认: ".yellow
244
+ num = 1
245
+ podfile.sources.each do |source|
246
+ UI.puts "#{num.to_s.yellow}. #{source.green}"
247
+ num += 1
248
+ end
249
+ index = STDIN.gets.to_i - 1
250
+ end until (index >= 0 && index < podfile.sources.size)
251
+ source = podfile.sources[index]
252
+ UI.puts "#{"选择了发布到: ".yellow}. #{source.green}(#{index + 1})"
253
+ return source
152
254
  end
153
- index = nil
154
- begin
155
- UI.puts "\n\n⌨️ 请输入要发布到的cocoapods仓库序号, 按回车确认: ".yellow
156
- num = 1
157
- podfile.sources.each do |source|
158
- UI.puts "#{num.to_s.yellow}. #{source.green}"
159
- num += 1
255
+
256
+ def changeVersionInCocoapods(name, newVersion)
257
+ if (newVersion == nil)
258
+ UI.puts "💔 切换版本号的版本现在为空,无法设置版本号".yellow
259
+ return
160
260
  end
161
- index = STDIN.gets.to_i - 1
162
- end until (index >= 0 && index < podfile.sources.size)
163
- source = podfile.sources[index]
164
- UI.puts "#{"选择了发布到: ".yellow}. #{source.green}(#{index + 1})"
165
- return source
166
- end
261
+ newVersion = get_pure_version(newVersion)
262
+ specName = name + ".podspec"
263
+ FileProcesserManager.new(specName,
264
+ [
265
+ FileProcesser.new(-> (fileContent) {
266
+ return fileContent.gsub(/(\.version *= *')(.*')/, "\\1" + newVersion + "'")
267
+ })
268
+ ]).process()
269
+ `git add #{specName}
270
+ git commit -m "Mod: 修改版本号为:#{newVersion} by cocoapods_dev_env plugin"`
271
+ end
167
272
 
168
- def changeVersionInCocoapods(name, newVersion)
169
- specName = name + ".podspec"
170
- FileProcesserManager.new(specName,
171
- [
172
- FileProcesser.new(-> (fileContent) {
173
- return fileContent.gsub(/(\.version *= *')(.*')/, "\\1" + newVersion + "'")
174
- })
175
- ]).process()
176
- `git add #{specName}
177
- git commit -m "Mod: 修改版本号为:#{newVersion} by cocoapods_dev_env plugin"`
178
- end
273
+ ## --- hook的入口函数 ---
274
+ def parse_pod_dev_env(name, requirements)
275
+ options = requirements.last
276
+ pod_name = Specification.root_name(name)
277
+ last_options = $processedPodsOptions[pod_name]
278
+ $podFileContentPodNameHash[pod_name] = true
279
+
280
+ if (last_options != nil)
281
+ UI.message "#{name.green} use last_options: #{last_options.to_s.green}"
282
+ if options != nil && options.is_a?(Hash)
283
+ requirements[requirements.length - 1] = last_options
284
+ else
285
+ requirements.push(last_options)
286
+ end
287
+ elsif options.is_a?(Hash)
288
+ use_binary = options.delete(Pod::DevEnv::binary_key)
289
+ dev_env = options.delete(Pod::DevEnv::keyword)
179
290
 
180
- ## --- option for setting using prebuild framework ---
181
- def parse_pod_dev_env(name, requirements)
182
- options = requirements.last
183
- pod_name = Specification.root_name(name)
184
- last_options = $processedPodsOptions[pod_name]
291
+ # 主功能,根据dev_env标记来管理使用代码的方式
292
+ deal_dev_env_with_options(dev_env, options, pod_name, name, requirements)
185
293
 
186
- if (last_options != nil)
187
- UI.message "#{name.green} use last_options: #{last_options.to_s.green}"
188
- if options != nil && options.is_a?(Hash)
189
- requirements[requirements.length - 1] = last_options
190
- else
191
- requirements.push(last_options)
192
- end
193
-
194
- return
294
+ # 处理二进制
295
+ if dev_env != 'dev'
296
+ binary_processer(dev_env, pod_name, use_binary, options, requirements)
297
+ end
298
+
299
+
300
+ if dev_env || use_binary
301
+ $processedPodsOptions[pod_name] = options.clone
302
+ requirements.pop if options.empty?
303
+ end
304
+ end
195
305
  end
196
- if options.is_a?(Hash)
197
- dev_env = options.delete(Pod::DevEnv::keyword)
306
+
307
+ ## --- 主功能函数 ---
308
+ def deal_dev_env_with_options(dev_env, options, pod_name, name, requirements)
198
309
  if dev_env == nil
199
310
  return
200
311
  end
@@ -257,9 +368,12 @@ class Podfile
257
368
  _cmd = "git reset --hard"
258
369
  UI.puts _cmd
259
370
  system(_cmd)
371
+ _cmd = "git pull"
372
+ UI.puts _cmd
373
+ system(_cmd)
260
374
  end
261
375
  Dir.chdir(_currentDir)
262
-
376
+
263
377
  # if inputNeedJumpForReson("本地库#{pod_name} 开发模式加载完成,是否自动打开Example工程")
264
378
  # searchAndOpenLocalExample(path)
265
379
  # end
@@ -282,7 +396,7 @@ class Podfile
282
396
  tag = "#{tag}_beta"
283
397
  if File.directory?(path)
284
398
  # 从Dev模式刚刚切换过来,需要打tag并且push
285
- UI.puts "release beta-version for #{pod_name.green}".yellow
399
+ UI.puts "try to release beta-version for #{pod_name.green}".yellow
286
400
  _currentDir = Dir.pwd
287
401
  Dir.chdir(path)
288
402
  # 已经进入到podspec的文件夹中了
@@ -291,9 +405,9 @@ class Podfile
291
405
  if ret == true
292
406
  # tag已经存在,要么没改动,要么已经手动打过tag,要么是需要引用老版本tag的代码
293
407
  if checkTagOrBranchIsEqalToHead(tag, "./")
294
- UI.puts "#{pod_name.green} 检测到未做任何调整,或已手动打过Tag"
408
+ UI.puts "#{pod_name.green} 检测到未做任何调整,或已手动打过Tag,直接引用远端库"
295
409
  else
296
- if !inputNeedJumpForReson("是否跳过beta发布并删除本地submodule(直接引用远端库)")
410
+ if !inputNeedJumpForReson("#{pod_name.green} 检测到已经存在#{tag.yellow}的tag,且与当前本地节点不同,是否跳过beta发布并删除本地submodule(直接引用远端库)")
297
411
  raise "💔 #{pod_name.yellow} tag:#{tag.yellow} 已存在, 且与当前Commit不对应. 请确认拉到本地之后已经在podfile中手动修改tag版本号"
298
412
  end
299
413
  end
@@ -327,7 +441,7 @@ class Podfile
327
441
  raise "💔 #{pod_name.yellow} lint 失败"
328
442
  end
329
443
  checkGitStatusAndPush(pod_name)
330
- changeVersionInCocoapods(pod_name, originTag)
444
+ changeVersionInCocoapods(pod_name, tag)
331
445
  checkGitStatusAndPush(pod_name)
332
446
  ret = addGitTagAndPush(tag, pod_name)
333
447
  if ret == false
@@ -339,7 +453,7 @@ class Podfile
339
453
  end
340
454
  ## TODO:: 发布到的目标库名称需要用变量设置
341
455
  repoAddrs = getUserRepoAddress()
342
- cmd = "pod repo push #{repoAddrs} #{pod_name}.podspec --skip-import-validation --allow-warnings#{getReposStrForLint()}"
456
+ cmd = "pod repo push #{repoAddrs} #{pod_name}.podspec --skip-import-validation --allow-warnings --use-modular-headers#{getReposStrForLint()}#{verboseParamStr}"
343
457
  UI.puts cmd.green
344
458
  ret = system(cmd)
345
459
  if ret != true
@@ -351,25 +465,153 @@ class Podfile
351
465
  checkAndRemoveSubmodule(path)
352
466
  end
353
467
  if requirements.length < 2
354
- requirements.insert(0, "#{tag}")
468
+ requirements.insert(0, "#{get_pure_version(tag)}")
355
469
  end
356
470
  UI.message "enabled #{"release".green}-mode for #{pod_name.green}"
357
471
  else
358
472
  raise "💔 :dev_env 必须要设置成 dev/beta/release之一,不接受其他值"
359
473
  end
360
- $processedPodsOptions[pod_name] = options
361
- requirements.pop if options.empty?
362
474
  end
363
- end
364
- # ---- patch method ----
365
- # We want modify `store_pod` method, but it's hard to insert a line in the
366
- # implementation. So we patch a method called in `store_pod`.
367
- old_method = instance_method(:parse_inhibit_warnings)
368
-
369
- define_method(:parse_inhibit_warnings) do |name, requirements|
370
- parse_pod_dev_env(name, requirements)
371
- old_method.bind(self).(name, requirements)
475
+
476
+ def binary_processer(dev_env, pod_name, use_binary, options, requirements)
477
+ if use_binary && use_binary == true
478
+ if options[:tag] != nil
479
+ begin
480
+ version = get_pure_version(options[:tag])
481
+ spec = binary_source.specification_path(pod_name, Version.new(version))
482
+ if spec
483
+ if requirements.length < 2
484
+ options.delete(:git)
485
+ options.delete(:path)
486
+ options.delete(:tag)
487
+ options[:source] = binary_repo_url
488
+ requirements.insert(0, "#{version}")
489
+ else
490
+ UI.puts "pod '#{pod_name}' :tag => #{options[:tag]} version: #{version} 对应的版本,但是已经标记版本号#{requirements}, 不知道用哪个".red
491
+ end
492
+ else
493
+ UI.puts "pod '#{pod_name}' :tag => #{options[:tag]} version: #{version} 没有找到: tag 对应的版本".red
494
+ end
495
+ rescue => exception
496
+ UI.puts "pod '#{pod_name}' :tag => #{options[:tag]} version: #{version} 没有找到: tag 对应的版本".red
497
+ else
498
+
499
+ end
500
+ else
501
+ options.delete(:git)
502
+ options.delete(:path)
503
+ options.delete(:tag)
504
+ options[:source] = binary_repo_url
505
+ end
506
+
507
+ else
508
+ if options[:source] == nil
509
+ begin
510
+ sources = find_pod_repos(pod_name).sources.select{|item| item.url.downcase != binary_repo_url.downcase } if options.empty?
511
+ if sources != nil
512
+ if sources.length >= 2
513
+ UI.puts "#{pod_name.green} 有多个source #{sources}".yellow
514
+ source_url = sources.detect{|item| item.url.downcase != Pod::TrunkSource::TRUNK_REPO_URL.downcase && item.url.downcase != "https://github.com/CocoaPods/Specs.git".downcase}.url
515
+ else
516
+ source_url = sources.first.url
517
+ end
518
+ end
519
+ options[:source] = source_url if source_url != nil
520
+ rescue => exception
521
+ UI.puts "#{pod_name} exception:#{exception}".red
522
+ else
523
+
524
+ end
525
+ end
526
+ end
527
+ UI.puts "#{pod_name.green} :source=> #{options[:source].green} by cocoapods-dev-env" if options[:source] != nil
528
+ UI.message "#{pod_name.yellow} options #{options} by cocoapods-dev-env" if options[:source] != nil
529
+ UI.message "#{pod_name.yellow} requirements #{requirements} by cocoapods-dev-env" if options[:source] != nil
530
+ end
531
+
532
+ def binary_repo_url
533
+ if @binary_repo_url == nil
534
+ @binary_repo_url = Luna::Binary::Common.instance.binary_repo_url #从luna-binary-uploader里获取binary_repo_url
535
+ end
536
+ return @binary_repo_url
537
+ end
538
+
539
+ def binary_source
540
+ if @binary_source == nil
541
+ @binary_source = Pod::Config.instance.sources_manager.all.detect{|item| item.url.downcase == binary_repo_url.downcase}
542
+ end
543
+ return @binary_source
544
+ end
545
+
546
+ def get_pure_version(version)
547
+ return version.split.last.scan(/\d+/).join('.')
548
+ end
549
+
550
+ def find_pod_repos(pod_name) #等同pod search
551
+ sets = Pod::Config.instance.sources_manager.search_by_name(pod_name)
552
+ if sets.count == 1
553
+ set = sets.first
554
+ elsif sets.map(&:name).include?(pod_name)
555
+ set = sets.find { |s| s.name == pod_name }
556
+ else
557
+ names = sets.map(&:name) * ', '
558
+ raise Informative, "More than one spec found for '#{pod_name}':\n#{names}"
559
+ end
560
+ return set
561
+ end
562
+
563
+ # ---- patch method ----
564
+ # We want modify `store_pod` method, but it's hard to insert a line in the
565
+ # implementation. So we patch a method called in `store_pod`.
566
+ old_method = instance_method(:parse_inhibit_warnings)
567
+
568
+ define_method(:parse_inhibit_warnings) do |name, requirements|
569
+ parse_pod_dev_env(name, requirements)
570
+ old_method.bind(self).(name, requirements)
571
+ end
572
+
573
+ def self.cleanParrentLockFile()
574
+ $parentPodlockDependencyHash = Hash.new
575
+ end
576
+
577
+ # 类方法
578
+ def self.readParrentLockFile()
579
+ # 获取路径(之后外边直接配置)
580
+ localPath = Pathname.new(Dir.pwd + "/" + $parrentPath)
581
+ lockPath ||= localPath + "Podfile.lock"
582
+ # 读取lockfile
583
+ _lockfile = Pod::Lockfile.from_file(lockPath)
584
+ if _lockfile == nil
585
+ UI.message "dev_env, 读取父库的lockfile找不到对应路径的lock文件:" + lockPath.inspect
586
+ return
587
+ end
588
+ # 读取lockfile中的依赖信息,用于之后提取使用,其中数据为 Pod::Dependency类型
589
+ localPodsMaps = Hash.new()
590
+ localpods = _lockfile.dependencies
591
+ localpods.each do |dep|
592
+ # 数据为 Pod::Dependency类型
593
+ if (dep.external_source == nil && dep.requirement == nil) || localPodsMaps.has_key?(dep.root_name)
594
+ next
595
+ end
596
+ if dep.external_source == nil && dep.requirement.to_s == '>= 0'
597
+ # dependence里可能没有版本信息(很奇怪,从version里单独取一下,写死版本限制)
598
+ version = _lockfile.version(dep.root_name)
599
+ dep.setRequirement(Requirement.new(version))
600
+ end
601
+ if dep.local?
602
+ dep.external_source[:path] = $parrentPath + dep.external_source[:path]
603
+ end
604
+ # 测试代码 UI.puts "测试获取父项目podlock里的pod依赖列表: " + dep.inspect
605
+ localPodsMaps[dep.root_name] = dep
606
+ end
607
+ $parentPodlockDependencyHash = localPodsMaps
608
+ # 读取 示例: ydASRInfo = localPodsMaps['YDASR']
609
+ # UI.puts ydASRInfo.inspect
610
+ # UI.puts "YDASR path:\n" + ydASRInfo.external_source[:path]
611
+ end
612
+
613
+ readParrentLockFile()
372
614
  end
373
615
  end
374
616
  end
375
- end
617
+
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoapods-dev-env
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.9
4
+ version: 2.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - 吴锡苗
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-08 00:00:00.000000000 Z
11
+ date: 2022-02-18 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: luna-binary-uploader
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'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -48,11 +62,13 @@ files:
48
62
  - ".gitignore"
49
63
  - CODE_OF_CONDUCT.md
50
64
  - Gemfile
65
+ - Gemfile.lock
51
66
  - LICENSE.txt
52
67
  - README.md
53
68
  - Rakefile
54
69
  - bin/console
55
70
  - bin/setup
71
+ - cocoapods-dev-env.code-workspace
56
72
  - cocoapods-dev-env.gemspec
57
73
  - lib/cocoapods/dev/env.rb
58
74
  - lib/cocoapods/dev/env/version.rb
@@ -80,7 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
80
96
  - !ruby/object:Gem::Version
81
97
  version: '0'
82
98
  requirements: []
83
- rubygems_version: 3.0.3
99
+ rubygems_version: 3.2.5
84
100
  signing_key:
85
101
  specification_version: 4
86
102
  summary: a cocoapod plugin for dev in mutipods