cocoapods-byte-csjm 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.
- checksums.yaml +7 -0
- data/lib/cocoapods-byte-csjm/config.rb +126 -0
- data/lib/cocoapods-byte-csjm/csj.rb +1 -0
- data/lib/cocoapods-byte-csjm/gem_version.rb +8 -0
- data/lib/cocoapods-byte-csjm/gm.rb +753 -0
- data/lib/cocoapods-byte-csjm/net.rb +35 -0
- data/lib/cocoapods-byte-csjm.rb +1 -0
- data/lib/cocoapods_plugin.rb +1 -0
- metadata +78 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 557aba2b4be3b65803702667f275d8e26d58a9b649731570920cb10a2a3283d0
|
4
|
+
data.tar.gz: 38fb1f7a1fb6e6ba068c9b6ebac4238f6261ac39829f6a67bfda43f6014067aa
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: da1aeb813ffa790f061b05f34804bf12b3d5c292e6b31bd9bdfbbd023d523f66cb1c3805cdc28f51fc5343c2d4383c02582c022ed5cc651c5c72aba56f397b93
|
7
|
+
data.tar.gz: 855c37ba8174dc683bc872cbff1d75ec5105f3e5e7c209904ba5c60a19a7109a63bb9eb8fff27c1d1281bc466fca716694a8d595f9a0bbd8f2ffe5eb45337f2d
|
@@ -0,0 +1,126 @@
|
|
1
|
+
module GM
|
2
|
+
|
3
|
+
class BuildConfig
|
4
|
+
|
5
|
+
def self.get_load_key
|
6
|
+
:gm_auto_load
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.get_update_key
|
10
|
+
:gm_auto_update
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.get_load_detect_key
|
14
|
+
:gm_load_detect
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.get_load_whitelist_key
|
18
|
+
:auto_load_whitelist
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.update_value_last_version
|
22
|
+
return "last" ## 最新版本
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.update_value_last_stable_version
|
26
|
+
return "last_stable" ## 最新稳定版本
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.update_value_non
|
30
|
+
return "not_update" ## 不自动更新
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.mediation_name
|
34
|
+
return "Ads-Fusion-CN-Beta/CSJMediation"
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.get_all_config
|
38
|
+
[BuildConfig.get_update_key,BuildConfig.get_load_key,BuildConfig.get_load_detect_key]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
class Adn_Adapter
|
43
|
+
ADNADAPTER = Hash[
|
44
|
+
# 'Ads-CN' => 'ABUAdCsjAdapter',
|
45
|
+
'UnityAds' => 'CSJMUnityAdapter',
|
46
|
+
'Google-Mobile-Ads-SDK'=> 'CSJMAdmobAdapter',
|
47
|
+
'BaiduMobAdSDK'=> 'CSJMBaiduAdapter',
|
48
|
+
'GDTMobSDK'=> 'CSJMGdtAdapter',
|
49
|
+
'SigmobAd-iOS'=> 'CSJMSigmobAdapter',
|
50
|
+
'KSAdSDK'=> 'CSJMKsAdapter',
|
51
|
+
'KlevinAdSDK'=> 'CSJMKlevinAdapter',
|
52
|
+
'MintegralAdSDK'=> 'CSJMMintegralAdapter',
|
53
|
+
].freeze
|
54
|
+
|
55
|
+
SERVERMAPADAPTER = Hash[
|
56
|
+
'unity' => 'CSJMUnityAdapter',
|
57
|
+
'admob'=> 'CSJMAdmobAdapter',
|
58
|
+
'baidu'=> 'CSJMBaiduAdapter',
|
59
|
+
'gdt'=> 'CSJMGdtAdapter',
|
60
|
+
'sigmob'=> 'CSJMSigmobAdapter',
|
61
|
+
'ks'=> 'CSJMKsAdapter',
|
62
|
+
'klevin'=> 'CSJMKlevinAdapter',
|
63
|
+
'mtg'=> 'CSJMMintegralAdapter',
|
64
|
+
].freeze
|
65
|
+
|
66
|
+
SERVERMAPADN = Hash[
|
67
|
+
'UnityAds' => 'unity',
|
68
|
+
'Google-Mobile-Ads-SDK'=> 'admob',
|
69
|
+
'BaiduMobAdSDK'=> 'baidu',
|
70
|
+
'GDTMobSDK'=> 'gdt',
|
71
|
+
'SigmobAd-iOS'=> 'sigmob',
|
72
|
+
'KSAdSDK'=> 'ks',
|
73
|
+
'KlevinAdSDK'=> 'klevin',
|
74
|
+
'MintegralAdSDK'=> 'mtg',
|
75
|
+
].freeze
|
76
|
+
|
77
|
+
def self.get_adn_abbreviation(name)
|
78
|
+
SERVERMAPADN[name]
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.get_adapter_from_adn_abbreviation(name)
|
82
|
+
SERVERMAPADAPTER[name]
|
83
|
+
end
|
84
|
+
|
85
|
+
def self.is_adn?(name)
|
86
|
+
ADNADAPTER.has_key?(name)
|
87
|
+
end
|
88
|
+
|
89
|
+
def self.is_adapter?(name)
|
90
|
+
ADNADAPTER.has_value?(name)
|
91
|
+
end
|
92
|
+
|
93
|
+
def self.get_adapter(name)
|
94
|
+
adapter = ''
|
95
|
+
if is_adn?(name)
|
96
|
+
adapter = ADNADAPTER[name]
|
97
|
+
end
|
98
|
+
adapter
|
99
|
+
end
|
100
|
+
|
101
|
+
def self.get_adn(name)
|
102
|
+
adn_name = ''
|
103
|
+
if is_adapter?(name)
|
104
|
+
## .index 在调试时候会报错
|
105
|
+
ADNADAPTER.select{ |key, value|
|
106
|
+
if value == name
|
107
|
+
adn_name = key
|
108
|
+
break
|
109
|
+
end
|
110
|
+
true
|
111
|
+
}
|
112
|
+
end
|
113
|
+
adn_name
|
114
|
+
end
|
115
|
+
|
116
|
+
def self.get_all_adapter
|
117
|
+
ADNADAPTER.values
|
118
|
+
end
|
119
|
+
|
120
|
+
def self.get_all_adn
|
121
|
+
ADNADAPTER.keys
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
|
126
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
## CSJ相关的功能将在这里收敛
|
@@ -0,0 +1,753 @@
|
|
1
|
+
require 'cocoapods'
|
2
|
+
require_relative 'config'
|
3
|
+
require 'singleton'
|
4
|
+
require 'cocoapods-byte-csjm/gem_version'
|
5
|
+
require 'yaml'
|
6
|
+
require 'digest'
|
7
|
+
require "thread"
|
8
|
+
require_relative 'net'
|
9
|
+
require 'xcodeproj'
|
10
|
+
require 'json'
|
11
|
+
|
12
|
+
|
13
|
+
module CSJMPlugin
|
14
|
+
def CSJMPlugin.action()
|
15
|
+
recoder= GM::Recorder.instance
|
16
|
+
if recoder.is_load_plugin
|
17
|
+
yield(recoder) if block_given?
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
module GM
|
23
|
+
# lock文件读写
|
24
|
+
#
|
25
|
+
class LockfileCSJM
|
26
|
+
def initialize(hash)
|
27
|
+
@internal_data = hash
|
28
|
+
end
|
29
|
+
# 读取lock文件
|
30
|
+
# @requrn lock的json内容
|
31
|
+
# @param 文件路径
|
32
|
+
def self.read_from_path(path)
|
33
|
+
if File.exist?(path)
|
34
|
+
return true, YAML.load_file(path)
|
35
|
+
end
|
36
|
+
return false, nil
|
37
|
+
end
|
38
|
+
# 写入lock文件
|
39
|
+
def write_to_disk(path)
|
40
|
+
begin
|
41
|
+
is_exist, existing = LockfileCSJM.read_from_path(path)
|
42
|
+
return if existing == @internal_data
|
43
|
+
rescue Exception
|
44
|
+
end
|
45
|
+
File.open(path, 'w+') do |f|
|
46
|
+
YAML.dump(@internal_data,f)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# 记录CSJM 版本信息
|
52
|
+
#
|
53
|
+
class GmInfo
|
54
|
+
attr_accessor :name
|
55
|
+
attr_accessor :version
|
56
|
+
def initialize(name, version)
|
57
|
+
@name = name
|
58
|
+
@version = version
|
59
|
+
end
|
60
|
+
def to_hash
|
61
|
+
hash = {}
|
62
|
+
hash["NAME"] = @name
|
63
|
+
hash["VERSION"] = @version
|
64
|
+
hash
|
65
|
+
end
|
66
|
+
def self.from_hash(hash)
|
67
|
+
GmInfo.new(hash["NAME"],hash["VERSION"])
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# 媒体配置记录
|
72
|
+
#
|
73
|
+
class Note
|
74
|
+
attr_accessor :auto_load
|
75
|
+
attr_accessor :auto_update
|
76
|
+
attr_accessor :load_detect
|
77
|
+
def get_update(update_value)
|
78
|
+
value = ''
|
79
|
+
case update_value
|
80
|
+
when true
|
81
|
+
value = GM::BuildConfig.update_value_last_version
|
82
|
+
when false
|
83
|
+
value = GM::BuildConfig.update_value_non
|
84
|
+
when String
|
85
|
+
value = update_value
|
86
|
+
else
|
87
|
+
raise ArgumentError, "CSJM error: `#{update_value.inspect}`, should be a boolean or string."
|
88
|
+
end
|
89
|
+
value
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
class GlobalNote < Note
|
94
|
+
attr_accessor :auto_load_whitelist
|
95
|
+
def initialize(auto_load = true , auto_update = GM::BuildConfig.update_value_last_version, load_detect = true, auto_load_whitelist = [])
|
96
|
+
@auto_load = auto_load
|
97
|
+
@auto_update = get_update auto_update
|
98
|
+
@load_detect = load_detect
|
99
|
+
@auto_load_whitelist = auto_load_whitelist
|
100
|
+
end
|
101
|
+
|
102
|
+
def has_set_load?(adn_name)
|
103
|
+
adn_name = Pod::Specification.root_name(adn_name)
|
104
|
+
if @auto_load_whitelist.size == 0 || @auto_load_whitelist.include?(adn_name)
|
105
|
+
return true
|
106
|
+
end
|
107
|
+
false
|
108
|
+
end
|
109
|
+
|
110
|
+
def to_hash
|
111
|
+
hash = {}
|
112
|
+
hash["AUTO_LOAD"] = @auto_load
|
113
|
+
hash["AUTO_UPDATE"] = @auto_update
|
114
|
+
hash["LOAD_DETECT"] = @load_detect
|
115
|
+
hash["AUTO_LOAD_WHITELIST"] = @auto_load_whitelist
|
116
|
+
hash
|
117
|
+
end
|
118
|
+
|
119
|
+
def self.from_hash(hash)
|
120
|
+
global_note = GlobalNote.new()
|
121
|
+
global_note.auto_load = hash["AUTO_LOAD"] if hash.has_key?("AUTO_LOAD")
|
122
|
+
global_note.auto_update = hash["AUTO_UPDATE"] if hash.has_key?("AUTO_UPDATE")
|
123
|
+
global_note.load_detect = hash["LOAD_DETECT"] if hash.has_key?("LOAD_DETECT")
|
124
|
+
global_note.auto_load_whitelist = hash["AUTO_LOAD_WHITELIST"] if hash.has_key?("AUTO_LOAD_WHITELIST")
|
125
|
+
global_note
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
class AdnNote < Note
|
130
|
+
|
131
|
+
attr_accessor :adn_name
|
132
|
+
attr_accessor :adn_version
|
133
|
+
attr_accessor :adapter_name
|
134
|
+
attr_accessor :adapter_original_version ##加载的版本号
|
135
|
+
attr_accessor :adapter_expected_version ##期望加载的版本号
|
136
|
+
|
137
|
+
def initialize(adn_name, auto_load = false , auto_update = GM::BuildConfig.update_value_non, load_detect = false)
|
138
|
+
@adn_name = adn_name
|
139
|
+
@adapter_name = GM::Adn_Adapter.get_adapter adn_name
|
140
|
+
@auto_load = auto_load
|
141
|
+
@auto_update = get_update auto_update
|
142
|
+
@load_detect = load_detect
|
143
|
+
@adapter_original_version = ""
|
144
|
+
@adapter_expected_version = ""
|
145
|
+
end
|
146
|
+
|
147
|
+
def to_hash
|
148
|
+
hash = {}
|
149
|
+
hash["ADN_NAME"] = @adn_name
|
150
|
+
hash["ADN_VERSION"] = @adn_version
|
151
|
+
hash["ADAPTER_NAME"] = @adapter_name
|
152
|
+
hash["ADAPTER_ORIGINAL_VERSION"] = @adapter_original_version
|
153
|
+
hash["ADAPTER_EXPECTED_VERSION"] = @adapter_expected_version
|
154
|
+
hash["AUTO_LOAD"] = @auto_load
|
155
|
+
hash["AUTO_UPDATE"] = @auto_update
|
156
|
+
hash["LOAD_DETECT"] = @load_detect
|
157
|
+
hash
|
158
|
+
end
|
159
|
+
|
160
|
+
def self.from_hash(hash)
|
161
|
+
note = AdnNote.new(hash["ADN_NAME"],hash["AUTO_LOAD"],hash["AUTO_UPDATE"],hash["LOAD_DETECT"])
|
162
|
+
note.adn_name = hash["ADN_NAME"]
|
163
|
+
note.adn_version = hash["ADN_VERSION"]
|
164
|
+
note.adapter_name = hash["ADAPTER_NAME"]
|
165
|
+
note.adapter_original_version = hash["ADAPTER_ORIGINAL_VERSION"]
|
166
|
+
note.adapter_expected_version = hash["ADAPTER_EXPECTED_VERSION"]
|
167
|
+
note
|
168
|
+
end
|
169
|
+
|
170
|
+
end
|
171
|
+
|
172
|
+
# 对应cocoapods target
|
173
|
+
#
|
174
|
+
class Target
|
175
|
+
|
176
|
+
attr_accessor :is_release_target
|
177
|
+
attr_accessor :referenced_target
|
178
|
+
attr_reader :label
|
179
|
+
attr_accessor :gm_info
|
180
|
+
attr_accessor :nots_info
|
181
|
+
|
182
|
+
def initialize(label)
|
183
|
+
@label = label.clone
|
184
|
+
@is_release_target = false
|
185
|
+
end
|
186
|
+
|
187
|
+
def find_note(adn_name)
|
188
|
+
@nots_info ||= {}
|
189
|
+
global_note = GM::Recorder.instance.global_note
|
190
|
+
note = (@nots_info.has_key?(adn_name) && @nots_info[adn_name]) || AdnNote.new(adn_name, global_note.auto_load, global_note.auto_update, global_note.load_detect)
|
191
|
+
@nots_info[adn_name] = note unless @nots_info.has_key?(adn_name)
|
192
|
+
note
|
193
|
+
end
|
194
|
+
|
195
|
+
def has_adn?(adn_name)
|
196
|
+
GM::Adn_Adapter.is_adn?(adn_name) && @nots_info.has_key?(adn_name)
|
197
|
+
end
|
198
|
+
|
199
|
+
def is_adn_update_or_detect?(adn_name)
|
200
|
+
result = is_adn_update?(adn_name) || is_adn_detect?(adn_name)
|
201
|
+
result
|
202
|
+
end
|
203
|
+
|
204
|
+
def is_adn_update?(adn_name)
|
205
|
+
result = has_adn?(adn_name) && @nots_info[adn_name].auto_update != GM::BuildConfig.update_value_non && GM::Recorder.instance.global_note.has_set_load?(adn_name)
|
206
|
+
result
|
207
|
+
end
|
208
|
+
|
209
|
+
def is_adn_detect?(adn_name)
|
210
|
+
has_adn?(adn_name) && @nots_info[adn_name].load_detect
|
211
|
+
end
|
212
|
+
|
213
|
+
def to_hash
|
214
|
+
hash = {}
|
215
|
+
hash["LABEL"] = @label
|
216
|
+
hash["IS_RELEASE_TARGET"] = @is_release_target
|
217
|
+
hash["GM_INFO"] = @gm_info.to_hash
|
218
|
+
hash["NOTS_INFO"] = {}
|
219
|
+
@nots_info.each {|key, value|
|
220
|
+
hash["NOTS_INFO"][key] = value.to_hash
|
221
|
+
}
|
222
|
+
hash
|
223
|
+
end
|
224
|
+
|
225
|
+
def self.from_hash(hash)
|
226
|
+
target = Target.new(hash["LABEL"])
|
227
|
+
target.is_release_target = true
|
228
|
+
target.gm_info = GmInfo.from_hash hash["GM_INFO"] if hash.has_key?("GM_INFO")
|
229
|
+
target.nots_info ||= {}
|
230
|
+
hash["NOTS_INFO"].each do |name, note_info|
|
231
|
+
target.nots_info[name] = AdnNote.from_hash note_info
|
232
|
+
end
|
233
|
+
target
|
234
|
+
end
|
235
|
+
|
236
|
+
end
|
237
|
+
|
238
|
+
# 记录方
|
239
|
+
#
|
240
|
+
class Recorder
|
241
|
+
|
242
|
+
include Singleton
|
243
|
+
attr_accessor :global_note
|
244
|
+
attr_accessor :target_info
|
245
|
+
attr_reader :is_load_plugin
|
246
|
+
attr_reader :plugin_version
|
247
|
+
attr_reader :lockfile_data
|
248
|
+
def set_plugin_load(is_load)
|
249
|
+
@is_load_plugin = is_load
|
250
|
+
@plugin_version = CocoapodsByteCsjm::Version.version
|
251
|
+
end
|
252
|
+
|
253
|
+
def add_global_note(note)
|
254
|
+
@global_note = note
|
255
|
+
end
|
256
|
+
|
257
|
+
def find_global_note(option, is_force_update = false)
|
258
|
+
|
259
|
+
return @global_note if !is_force_update && @global_note != nil
|
260
|
+
@global_note = GlobalNote.new(false, GM::BuildConfig.update_value_non, false)
|
261
|
+
load_key = GM::BuildConfig.get_load_key
|
262
|
+
update_key = GM::BuildConfig.get_update_key
|
263
|
+
load_detect_key = GM::BuildConfig.get_load_detect_key
|
264
|
+
auto_load_whitelist_key = GM::BuildConfig.get_load_whitelist_key
|
265
|
+
case option
|
266
|
+
when true, false
|
267
|
+
@global_note = GM::GlobalNote.new(option,option,option,{})
|
268
|
+
when Hash
|
269
|
+
load_value = option.has_key?(load_key) ? option[load_key] : true
|
270
|
+
update_value = option.has_key?(update_key) ? option[update_key] : true
|
271
|
+
detect_value = option.has_key?(load_detect_key) ? option[load_detect_key] : true
|
272
|
+
auto_load_whitelist = option.has_key?(auto_load_whitelist_key)?option[auto_load_whitelist_key] : {}
|
273
|
+
@global_note = GM::GlobalNote.new(load_value, update_value,detect_value,auto_load_whitelist)
|
274
|
+
else
|
275
|
+
raise ArgumentError, "CSJM error: `#{option.inspect}`, should be a boolean or hash."
|
276
|
+
end
|
277
|
+
@global_note
|
278
|
+
end
|
279
|
+
|
280
|
+
def get_global_note
|
281
|
+
@global_note
|
282
|
+
end
|
283
|
+
|
284
|
+
def get_target(label)
|
285
|
+
@target_info ||= {}
|
286
|
+
@target_info[label] ||= Target.new(label)
|
287
|
+
end
|
288
|
+
|
289
|
+
def to_hash
|
290
|
+
hash = {}
|
291
|
+
hash["IS_LOAD_PLUGIN"] = @is_load_plugin
|
292
|
+
hash["PLUGIN_VERSION"] = @plugin_version
|
293
|
+
hash["GLOBAL_NOTE"] = @global_note.to_hash
|
294
|
+
hash["TARGET_INFO"] = {}
|
295
|
+
@target_info.each {|item, value|
|
296
|
+
hash["TARGET_INFO"][item] = value.to_hash
|
297
|
+
}
|
298
|
+
checksum = Digest::SHA1.hexdigest(hash.inspect)
|
299
|
+
checksum = checksum.encode('UTF-8') if checksum.respond_to?(:encode)
|
300
|
+
hash["RECODER_CHECKSUM"] = checksum
|
301
|
+
hash
|
302
|
+
end
|
303
|
+
end
|
304
|
+
|
305
|
+
# 对应cocoapods 的Specification
|
306
|
+
#
|
307
|
+
class SpecificationInfo
|
308
|
+
@@possibilities = {}
|
309
|
+
def self.update(name = '', possibilities)
|
310
|
+
if name.length > 0
|
311
|
+
@@possibilities[name] ||= []
|
312
|
+
@@possibilities[name] = @@possibilities[name] | possibilities
|
313
|
+
end
|
314
|
+
end
|
315
|
+
|
316
|
+
def self.get_info()
|
317
|
+
@@possibilities
|
318
|
+
end
|
319
|
+
|
320
|
+
def self.get_a_specfication(name, version)
|
321
|
+
result = @@possibilities[name].find { |specification|
|
322
|
+
specification.version.version == version
|
323
|
+
}
|
324
|
+
result
|
325
|
+
end
|
326
|
+
|
327
|
+
def self.get_specfication(info_list = [])
|
328
|
+
|
329
|
+
##请注意, 这里可能获取不到对应的Specfication 实例, 此时需要报错并提示媒体使用pod update
|
330
|
+
result = info_list.map{|info|
|
331
|
+
info['is_find'] = false
|
332
|
+
adapter_name = GM::Adn_Adapter.get_adapter_from_adn_abbreviation info["adn_name"]
|
333
|
+
@@possibilities[adapter_name].find { |specification|
|
334
|
+
info['is_find'] = true if specification.version.version == info["adn_adapter_version"]
|
335
|
+
specification.version.version == info["adn_adapter_version"]
|
336
|
+
}
|
337
|
+
}.flatten
|
338
|
+
unfind_list = info_list.select{ |info|
|
339
|
+
info['is_find'] == false
|
340
|
+
}
|
341
|
+
if unfind_list.size > 0
|
342
|
+
ins = get_info
|
343
|
+
str = "adapters("
|
344
|
+
unfind_list.each {|item|
|
345
|
+
str << GM::Adn_Adapter.get_adapter_from_adn_abbreviation(info["item"]) + "->" + item["adn_adapter_version"]+ " "
|
346
|
+
}
|
347
|
+
str << ")"
|
348
|
+
raise "CSJM error: #{str} 版本未找到,请执行 `pod update --verbose`"
|
349
|
+
end
|
350
|
+
result
|
351
|
+
end
|
352
|
+
end
|
353
|
+
|
354
|
+
# 版本处理
|
355
|
+
#
|
356
|
+
class VersionAnalyzer
|
357
|
+
|
358
|
+
def self.resolve_release_target(target, specs)
|
359
|
+
|
360
|
+
is_exist, hash = GM::LockfileCSJM.read_from_path(File.expand_path("#{Pod::Config.instance.installation_root}/Podfile.csjm.lock"))
|
361
|
+
if is_exist
|
362
|
+
## 校验lock文件有无改动
|
363
|
+
checksum = hash.delete("RECODER_CHECKSUM")
|
364
|
+
verified_checksum = Digest::SHA1.hexdigest(hash.inspect).encode('UTF-8') if checksum.respond_to?(:encode)
|
365
|
+
if verified_checksum != checksum
|
366
|
+
raise "CSJM error: Podfile.csjm.lock 文件校验失败, 请检查该文件是否被改动, 尝试删掉该文件并执行 'pod install', 若你确认没有被修改,请联系技术支持"
|
367
|
+
end
|
368
|
+
## 校验对应的target是否存在
|
369
|
+
if !hash["TARGET_INFO"].has_key?(target.gm_build_config.referenced_target)
|
370
|
+
raise "CSJM error:#{target.gm_build_config.label} 设置了'is_release_target=true' 但是在 Podfile.csjm.lock文件中没有找到target的信息"
|
371
|
+
end
|
372
|
+
|
373
|
+
## 校验gm版本是否符合
|
374
|
+
gm_spec = specs.find do |spec|
|
375
|
+
GM::BuildConfig.mediation_name==spec.spec.name
|
376
|
+
end
|
377
|
+
if gm_spec.nil?
|
378
|
+
raise "CSJM error:#{GM::BuildConfig.mediation_name} not found in #{target.label}"
|
379
|
+
end
|
380
|
+
referenced_target = GM::Target.from_hash hash["TARGET_INFO"][target.gm_build_config.referenced_target]
|
381
|
+
if gm_spec.spec.version.version != referenced_target.gm_info.version
|
382
|
+
raise "CSJM error:#{GM::BuildConfig.mediation_name} version has change(#{referenced_target.gm_info.version}->#{gm_spec.spec.version.version}),please check"
|
383
|
+
end
|
384
|
+
## 替换各adapter的版本
|
385
|
+
referenced_target.nots_info.each do |adn_name, note|
|
386
|
+
|
387
|
+
original_adapter_sp = specs.find{|spec|
|
388
|
+
spec.spec.name == note.adapter_name
|
389
|
+
}
|
390
|
+
if original_adapter_sp.nil?
|
391
|
+
raise "CSJM error:#{note.adapter_name} not found"
|
392
|
+
end
|
393
|
+
##校验adn是否更换了版本
|
394
|
+
original_adn_sp = specs.find do |spec|
|
395
|
+
spec.spec.name == note.adn_name
|
396
|
+
end
|
397
|
+
if original_adn_sp.spec.version.version != note.adn_version
|
398
|
+
raise "CSJM error:#{note.adn_name} version has change(#{note.adn_version}->#{original_adapter_sp.spec.version.version}),please check"
|
399
|
+
end
|
400
|
+
if note.adapter_expected_version.length > 0 && original_adapter_sp.spec.version.version != note.adapter_expected_version
|
401
|
+
title_options = { :verbose_prefix => '-> '.green }
|
402
|
+
Pod::UserInterface.titled_section("#{note.adn_name} will change adapter version , the current adapter(#{note.adapter_name}) version will change from #{original_adapter_sp.spec.version.version} to #{note.adapter_expected_version}", title_options)
|
403
|
+
replace_sp = GM::SpecificationInfo.get_a_specfication note.adapter_name, note.adapter_expected_version
|
404
|
+
if replace_sp
|
405
|
+
specs << Pod::Resolver::ResolverSpecification.new(replace_sp, original_adapter_sp.used_by_non_library_targets_only, replace_sp.spec_source)
|
406
|
+
specs.delete original_adapter_sp
|
407
|
+
end
|
408
|
+
end
|
409
|
+
end
|
410
|
+
specs.sort_by!{|spec| spec.spec.name}
|
411
|
+
else
|
412
|
+
raise "CSJM error: #{File.expand_path("#{Pod::Config.instance.installation_root}/Podfile.csjm.lock")} not found, please check"
|
413
|
+
end
|
414
|
+
end
|
415
|
+
|
416
|
+
def self.resolve_last(target, specs)
|
417
|
+
|
418
|
+
gm_spec = nil
|
419
|
+
adn_specs = specs.select do |spec|
|
420
|
+
name = spec.spec.name
|
421
|
+
if name == GM::BuildConfig.mediation_name
|
422
|
+
gm_spec = spec
|
423
|
+
|
424
|
+
target.gm_build_config.gm_info = GM::GmInfo.new(spec.spec.name, spec.spec.version.version)
|
425
|
+
end
|
426
|
+
if GM::Adn_Adapter.is_adapter?(name)
|
427
|
+
adn_note = target.gm_build_config.find_note GM::Adn_Adapter.get_adn name
|
428
|
+
adn_note.adapter_name = name
|
429
|
+
adn_note.adapter_original_version = spec.spec.version.version
|
430
|
+
elsif GM::Adn_Adapter.is_adn?(name)
|
431
|
+
adn_note = target.gm_build_config.find_note name
|
432
|
+
adn_note.adn_version = spec.spec.version.version
|
433
|
+
end
|
434
|
+
target.gm_build_config.is_adn_update?(name) ## 这里去掉不更新但版本校验功能
|
435
|
+
end
|
436
|
+
raise "CSJM error: #{GM::BuildConfig.mediation_name} not found,please check" if gm_spec == nil
|
437
|
+
adn_info_list = adn_specs.map{|adn_spec|
|
438
|
+
adn_note = target.gm_build_config.find_note adn_spec.spec.name
|
439
|
+
adn_note.adn_version = adn_spec.spec.version.version
|
440
|
+
{"adn_name" => GM::Adn_Adapter.get_adn_abbreviation(adn_spec.spec.name),"adn_version" => adn_spec.spec.version.version}
|
441
|
+
# {"adn_name" => "ks","adn_version" => adn_spec.spec.version.version}
|
442
|
+
# {"adn_name" => adn_spec.spec.name,"adn_version" => adn_spec.spec.version.version, "auto_update" => adn_note.auto_update, "load_detect" => adn_note.load_detect, "adapter_name" => adn_note.adapter_name, "adapter_version" => adn_note.adapter_original_version}
|
443
|
+
} if gm_spec
|
444
|
+
## 网络请求
|
445
|
+
response_data = request_adapter gm_spec.spec.version.version, adn_info_list
|
446
|
+
|
447
|
+
result = GM::SpecificationInfo.get_specfication response_data
|
448
|
+
result.each{|item|
|
449
|
+
|
450
|
+
original_sp = specs.find{|spec|
|
451
|
+
spec.spec.name == item.name
|
452
|
+
}
|
453
|
+
adn_name = GM::Adn_Adapter.get_adn item.name
|
454
|
+
adn_note = target.gm_build_config.find_note adn_name
|
455
|
+
adn_note.adapter_expected_version = item.version.version
|
456
|
+
if original_sp && original_sp.spec.version.version == item.version.version
|
457
|
+
title_options = { :verbose_prefix => '-> '.green }
|
458
|
+
Pod::UserInterface.titled_section("#{adn_name} has set version update or check, the current adapter(#{item.name}) version(#{item.version.version}) is as expected", title_options)
|
459
|
+
else
|
460
|
+
|
461
|
+
if original_sp && original_sp.spec.version.version != item.version.version ## 更新到最新版本 或 最新稳定版本
|
462
|
+
if target.gm_build_config.is_adn_update?(adn_name)
|
463
|
+
# puts '开始更新版本'
|
464
|
+
title_options = { :verbose_prefix => '-> '.green }
|
465
|
+
Pod::UserInterface.titled_section("#{adn_name} will change adapter version , the current adapter(#{item.name}) version will change from #{original_sp.spec.version.version} to #{item.version.version}", title_options)
|
466
|
+
specs << Pod::Resolver::ResolverSpecification.new(item, original_sp.used_by_non_library_targets_only, item.spec_source)
|
467
|
+
specs.delete original_sp
|
468
|
+
elsif target.gm_build_config.is_adn_detect?(adn_name) ##媒体关闭了自动更新,只选择检查版本是否适配
|
469
|
+
## 版本校验功能暂时去掉 , 一期不上,后续具体看情况
|
470
|
+
# puts '开始校验版本'
|
471
|
+
# if item.version.version != original_sp.spec.version.version
|
472
|
+
# raise "CSJM error:#{adn_name} has set the version check of the adapter(#{item.name}), current version does not match. please change your version. The current version is #{original_sp.spec.version.version} but the expected version is #{item.version.version}"
|
473
|
+
# end
|
474
|
+
else
|
475
|
+
# puts '什么也不做'
|
476
|
+
end
|
477
|
+
end
|
478
|
+
end
|
479
|
+
}
|
480
|
+
specs.sort_by!{|spec| spec.spec.name}
|
481
|
+
end
|
482
|
+
|
483
|
+
def self.delete_invalid_adapters(target, specs)
|
484
|
+
un_den_adn_list= GM::Adn_Adapter.get_all_adn - specs.map(&:spec).map(&:name).map do |item|
|
485
|
+
GM::Adn_Adapter.is_adn?(item) ? Pod::Specification.root_name(item) : nil
|
486
|
+
end.compact.uniq
|
487
|
+
un_den_adapter_list = []
|
488
|
+
un_den_adapter_list = un_den_adn_list.map {|item|
|
489
|
+
GM::Adn_Adapter.get_adapter item
|
490
|
+
}
|
491
|
+
specs.delete_if { |spec|
|
492
|
+
hh = !GM::Recorder.instance.global_note.auto_load_whitelist.include?(Pod::Specification.root_name(spec.spec.name))
|
493
|
+
result = un_den_adapter_list.include?(Pod::Specification.root_name(spec.spec.name)) && !GM::Recorder.instance.global_note.auto_load_whitelist.include?(Pod::Specification.root_name(spec.spec.name))
|
494
|
+
if result
|
495
|
+
title_options = { :verbose_prefix => '-> '.red}
|
496
|
+
Pod::UserInterface.titled_section("remove #{spec.spec.name}", title_options)
|
497
|
+
end
|
498
|
+
result
|
499
|
+
}
|
500
|
+
end
|
501
|
+
|
502
|
+
def self.get_package_name
|
503
|
+
project_path = Pod::Config.instance.project_root
|
504
|
+
# pattern = File.join(project_path, '*.xcodeproj') # 匹配所有子目录下的 .xcodeproj 文件
|
505
|
+
# xcodeproj_path = Dir.glob(pattern).first
|
506
|
+
xcodeprojs = project_path.children.select { |e| e.fnmatch('*.xcodeproj') }
|
507
|
+
if xcodeprojs.size == 1
|
508
|
+
package_name_list = Array.new
|
509
|
+
xcodeproj_path = xcodeprojs.first
|
510
|
+
project = Xcodeproj::Project.open(xcodeproj_path)
|
511
|
+
project.targets.map(&:build_configuration_list).map(&:build_configurations).each do |item|
|
512
|
+
package_name_list << item[1].simple_attributes_hash['buildSettings']['PRODUCT_BUNDLE_IDENTIFIER']
|
513
|
+
end
|
514
|
+
package_name_list.uniq
|
515
|
+
else
|
516
|
+
raise Informative, 'Could not automatically select an Xcode project. ' \
|
517
|
+
"Specify one in your Podfile like so:\n\n" \
|
518
|
+
" project 'path/to/Project.xcodeproj'\n"
|
519
|
+
end
|
520
|
+
end
|
521
|
+
|
522
|
+
def self.request_adapter(m_version, adn_list)
|
523
|
+
|
524
|
+
package_name = get_package_name
|
525
|
+
body = Hash["package_name"=>package_name, "mediation_version"=>m_version, "os_type"=>"ios", "list"=>adn_list]
|
526
|
+
Pod::UserInterface.section '[DEBUG]CSJM plugin Network request data' do
|
527
|
+
puts "请求信息:#{body}"
|
528
|
+
end
|
529
|
+
data = GM::Network.request_adapter(body)
|
530
|
+
if data["code"] == "PG0000"
|
531
|
+
## 请求adn数目和返回adapter 个数不一致时进行报错处理
|
532
|
+
result = data["data"]
|
533
|
+
if result.size != adn_list.size
|
534
|
+
unfind_adn_list = adn_list.map do |hash|
|
535
|
+
if hash["adn_name"] != result.find { |h| h["adn_version"] == hash["adn_version"] }&.dig("adn_name")
|
536
|
+
{ "adn_name" => hash["adn_name"], "adn_version" => hash["adn_version"] }
|
537
|
+
end
|
538
|
+
end.compact
|
539
|
+
raise "CSJM error:未查找到与#{JSON.generate(unfind_adn_list)}匹配的Adadpter,请更新SDK至合适版本,如有疑问请联系技术支持。"
|
540
|
+
end
|
541
|
+
return data["data"]
|
542
|
+
else
|
543
|
+
##业务逻辑异常的提示
|
544
|
+
case data["code"]
|
545
|
+
when "PG0201"
|
546
|
+
raise "CSJM error: #{data["message"]}(应用ID:#{package_name}),请使用在平台注册的应用ID,如有疑问请联系技术支持。"
|
547
|
+
when "21018" ,"PG21018"
|
548
|
+
raise "CSJM error: #{data["message"]}(应用ID:#{package_name}),如有疑问请联系技术支持。"
|
549
|
+
else
|
550
|
+
raise "CSJM error: #{data["message"]}(应用ID:#{package_name}),如有疑问请联系技术支持。"
|
551
|
+
end
|
552
|
+
end
|
553
|
+
end
|
554
|
+
|
555
|
+
def self.is_update?(value)
|
556
|
+
is_auto_update?(value) || is_stable_update?(value)
|
557
|
+
end
|
558
|
+
|
559
|
+
def self.is_auto_update?(value)
|
560
|
+
value == GM::BuildConfig.update_value_last_version
|
561
|
+
end
|
562
|
+
|
563
|
+
def self.is_stable_update?(value)
|
564
|
+
value == GM::BuildConfig.update_value_last_stable_version
|
565
|
+
end
|
566
|
+
end
|
567
|
+
end
|
568
|
+
|
569
|
+
class Xcodeproj::Project::Object::XCBuildConfiguration
|
570
|
+
attr_accessor :simple_attributes_hash
|
571
|
+
end
|
572
|
+
|
573
|
+
class Pod::Resolver
|
574
|
+
|
575
|
+
alias_method :original_search_for, :search_for
|
576
|
+
def search_for(dependency)
|
577
|
+
possibilities = original_search_for(dependency) ##返回不可变数组
|
578
|
+
CSJMPlugin.action do |recoder|
|
579
|
+
GM::SpecificationInfo.update dependency.name , possibilities
|
580
|
+
end
|
581
|
+
possibilities
|
582
|
+
end
|
583
|
+
|
584
|
+
alias_method :original_specifications_for_dependency, :specifications_for_dependency
|
585
|
+
def specifications_for_dependency(dependency, additional_requirements = [])
|
586
|
+
CSJMPlugin.action do |recoder|
|
587
|
+
if additional_requirements.length > 0 && GM::Adn_Adapter.is_adapter?(dependency.name)
|
588
|
+
additional_requirements = []
|
589
|
+
dependency = Pod::Dependency.new(dependency.name)
|
590
|
+
end
|
591
|
+
end
|
592
|
+
original_specifications_for_dependency(dependency, additional_requirements)
|
593
|
+
end
|
594
|
+
end
|
595
|
+
|
596
|
+
class Pod::Installer::Analyzer
|
597
|
+
|
598
|
+
alias_method :original_resolve_dependencies, :resolve_dependencies
|
599
|
+
def resolve_dependencies(locked_dependencies)
|
600
|
+
resolver_specs_by_target = original_resolve_dependencies(locked_dependencies)
|
601
|
+
CSJMPlugin.action do |recoder|
|
602
|
+
resolver_specs_by_target.each do |target, specs|
|
603
|
+
if specs.length > 0
|
604
|
+
Pod::UserInterface.section 'CSJM plugin remove invalid adapter dependencie from loaded dependencies ' do
|
605
|
+
GM::VersionAnalyzer.delete_invalid_adapters target, specs
|
606
|
+
end if GM::Recorder.instance.get_global_note.auto_load
|
607
|
+
|
608
|
+
if target.gm_build_config.is_release_target
|
609
|
+
Pod::UserInterface.section "CSJM plugin is detected that #{target.label} target is set to `gm_release_target!`, start configuration" do
|
610
|
+
GM::VersionAnalyzer.resolve_release_target target, specs
|
611
|
+
end
|
612
|
+
else
|
613
|
+
Pod::UserInterface.section 'CSJM plugin start update or detect dependencies ' do
|
614
|
+
GM::VersionAnalyzer.resolve_last target, specs
|
615
|
+
end
|
616
|
+
Pod::UserInterface.section 'CSJM plugin write Podfile.csjm.lock' do
|
617
|
+
write_lock_file recoder
|
618
|
+
end
|
619
|
+
end
|
620
|
+
end
|
621
|
+
end
|
622
|
+
end
|
623
|
+
resolver_specs_by_target
|
624
|
+
end
|
625
|
+
|
626
|
+
## 写入lock文件
|
627
|
+
def write_lock_file(recoder)
|
628
|
+
GM::LockfileCSJM.new(recoder.to_hash).write_to_disk(File.expand_path("#{Pod::Config.instance.installation_root}/Podfile.csjm.lock"))
|
629
|
+
end
|
630
|
+
end
|
631
|
+
|
632
|
+
module Pod
|
633
|
+
class Podfile
|
634
|
+
|
635
|
+
module DSL
|
636
|
+
def use_gm_adapter_update!(option = true)
|
637
|
+
current_target_definition.use_gm_adapter_update!(option)
|
638
|
+
end
|
639
|
+
|
640
|
+
def gm_release_target!(option = true)
|
641
|
+
current_target_definition.gm_release_target!(option)
|
642
|
+
end
|
643
|
+
|
644
|
+
alias_method :original_pod, :pod
|
645
|
+
def pod(name = nil, *requirements)
|
646
|
+
CSJMPlugin.action do |recoder|
|
647
|
+
if recoder.get_global_note.auto_load
|
648
|
+
unless current_target_definition.is_add_adapter_dependencys
|
649
|
+
current_target_definition.is_add_adapter_dependencys = true
|
650
|
+
Pod::UserInterface.section 'CSJM plugin start auto load dependencies ' do
|
651
|
+
GM::Adn_Adapter.get_all_adapter.each {|item|
|
652
|
+
if GM::Recorder.instance.global_note.auto_load_whitelist.include?(GM::Adn_Adapter.get_adn item) || GM::Recorder.instance.global_note.auto_load_whitelist.size==0
|
653
|
+
title_options = { :verbose_prefix => '-> '.green }
|
654
|
+
Pod::UserInterface.titled_section("add #{item}", title_options)
|
655
|
+
current_target_definition.store_pod(item,[String.new(">=0")] )
|
656
|
+
end
|
657
|
+
}
|
658
|
+
end
|
659
|
+
end
|
660
|
+
end
|
661
|
+
|
662
|
+
end
|
663
|
+
original_pod(name, *requirements)
|
664
|
+
end
|
665
|
+
|
666
|
+
alias_method :original_plugin, :plugin
|
667
|
+
def plugin(name, options = {})
|
668
|
+
GM::Recorder.instance.set_plugin_load true if name == 'cocoapods-byte-csjm'
|
669
|
+
original_plugin(name, options)
|
670
|
+
end
|
671
|
+
end
|
672
|
+
|
673
|
+
class TargetDefinition
|
674
|
+
|
675
|
+
attr_reader :gm_release_target
|
676
|
+
attr_accessor :is_add_adapter_dependencys
|
677
|
+
attr_reader :global_gm_build_config
|
678
|
+
attr_reader :gm_build_config
|
679
|
+
|
680
|
+
|
681
|
+
def gm_release_target!(option = true)
|
682
|
+
|
683
|
+
raise ArgumentError, "CSJM error: The `gm_release_target!` configuration item needs to be set in a specific target, do not set it globally" if @label == "Pods"
|
684
|
+
case option
|
685
|
+
when true
|
686
|
+
name = String.new("T-") << label
|
687
|
+
@gm_build_config = GM::Recorder.instance.get_target name
|
688
|
+
@gm_build_config.is_release_target = option
|
689
|
+
@gm_build_config.referenced_target = name
|
690
|
+
when Hash
|
691
|
+
@gm_build_config = GM::Recorder.instance.get_target String.new("T-") << label
|
692
|
+
@gm_build_config.is_release_target = true
|
693
|
+
@gm_build_config.referenced_target = String.new("T-") << option[:referenced]
|
694
|
+
else
|
695
|
+
raise ArgumentError, "CSJM error: `#{option.inspect}`, should be a true or a target name"
|
696
|
+
end
|
697
|
+
end
|
698
|
+
|
699
|
+
def use_gm_adapter_update!(option)
|
700
|
+
@global_gm_build_config = GM::Recorder.instance.find_global_note option
|
701
|
+
|
702
|
+
|
703
|
+
end
|
704
|
+
|
705
|
+
|
706
|
+
alias_method :original_parse_inhibit_warnings, :parse_inhibit_warnings
|
707
|
+
def parse_inhibit_warnings(name, requirements)
|
708
|
+
|
709
|
+
CSJMPlugin.action do |recoder|
|
710
|
+
options = requirements.last || {}
|
711
|
+
name = Specification.root_name(name)
|
712
|
+
@gm_build_config = recoder.get_target String.new("T-") << label
|
713
|
+
if GM::Adn_Adapter.is_adn?(name)
|
714
|
+
load_key = GM::BuildConfig.get_load_key
|
715
|
+
update_key = GM::BuildConfig.get_update_key
|
716
|
+
load_detect_key = GM::BuildConfig.get_load_detect_key
|
717
|
+
|
718
|
+
gm_note = @gm_build_config.find_note name
|
719
|
+
GM::BuildConfig.get_all_config.each{|item|
|
720
|
+
if options.is_a?(Hash) && options[item] != nil
|
721
|
+
# gm_note.auto_load = options[item] if item == load_key ## adn维度 auto_load 失效
|
722
|
+
gm_note.load_detect = options[item] if item == load_detect_key
|
723
|
+
gm_note.auto_update = adapter_update_config options[item] if item == update_key
|
724
|
+
options.delete(item)
|
725
|
+
requirements.pop if options.empty?
|
726
|
+
end
|
727
|
+
}
|
728
|
+
end
|
729
|
+
end
|
730
|
+
original_parse_inhibit_warnings(name, requirements)
|
731
|
+
end
|
732
|
+
|
733
|
+
private
|
734
|
+
def adapter_update_config(update_value)
|
735
|
+
value = ''
|
736
|
+
is_update = false
|
737
|
+
case update_value
|
738
|
+
when true
|
739
|
+
value = GM::BuildConfig.update_value_last_version
|
740
|
+
is_update = true
|
741
|
+
when false
|
742
|
+
value = GM::BuildConfig.update_value_non
|
743
|
+
when String
|
744
|
+
value = update_value
|
745
|
+
is_update = true if update_value == GM::BuildConfig.update_value_last_version || update_value == GM::BuildConfig.update_value_non
|
746
|
+
else
|
747
|
+
raise ArgumentError, "CSJM error: `#{update_value.inspect}`, 应该设置为布尔值"
|
748
|
+
end
|
749
|
+
value
|
750
|
+
end
|
751
|
+
end
|
752
|
+
end
|
753
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'uri'
|
2
|
+
require 'net/http'
|
3
|
+
require 'net/https'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
module GM
|
7
|
+
# 网络请求
|
8
|
+
class Network
|
9
|
+
## post请求
|
10
|
+
def Network.post (url,body)
|
11
|
+
# puts "start net request:#{body}"
|
12
|
+
uri = URI.parse(url)
|
13
|
+
https = Net::HTTP.new(uri.host,uri.port)
|
14
|
+
https.use_ssl = true
|
15
|
+
request = Net::HTTP::Post.new(uri.path, initheader = {'Content-Type' =>'application/json'})
|
16
|
+
request["x-tt-env"] = "boe_csj_sdk"
|
17
|
+
request["Cookie"]="__union_admin_sess_cookie=232301_noduimkpdwrbyrkr1qih; _ssa_userphone=; _ssa_username=zhangtianhao.1230"
|
18
|
+
request.body = body.to_json
|
19
|
+
res = https.request(request)
|
20
|
+
if res.code == "200"
|
21
|
+
data = JSON.parse(res.body)
|
22
|
+
# puts "finish net request:#{data}"
|
23
|
+
return data
|
24
|
+
else
|
25
|
+
## 网络请求异常的提示
|
26
|
+
puts "请求失败 : Response code = #{res.code}, message = #{res.message}"
|
27
|
+
end
|
28
|
+
nil
|
29
|
+
end
|
30
|
+
|
31
|
+
def Network.request_adapter(body)
|
32
|
+
data = post("https://www.csjplatform.com/union_pangle/api/sdk_adapter/query",body)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'cocoapods-byte-csjm/gem_version'
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'cocoapods-byte-csjm/gm'
|
metadata
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cocoapods-byte-csjm
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- zhangtianhao.1230@bytedance.com
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-08-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
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
|
+
description: A short description of cocoapods-byte-csjm.
|
42
|
+
email:
|
43
|
+
- zhangtianhao.1230@bytedance.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- lib/cocoapods-byte-csjm.rb
|
49
|
+
- lib/cocoapods-byte-csjm/config.rb
|
50
|
+
- lib/cocoapods-byte-csjm/csj.rb
|
51
|
+
- lib/cocoapods-byte-csjm/gem_version.rb
|
52
|
+
- lib/cocoapods-byte-csjm/gm.rb
|
53
|
+
- lib/cocoapods-byte-csjm/net.rb
|
54
|
+
- lib/cocoapods_plugin.rb
|
55
|
+
homepage: https://github.com/EXAMPLE/cocoapods-byte-csjm
|
56
|
+
licenses:
|
57
|
+
- MIT
|
58
|
+
metadata: {}
|
59
|
+
post_install_message:
|
60
|
+
rdoc_options: []
|
61
|
+
require_paths:
|
62
|
+
- lib
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '0'
|
73
|
+
requirements: []
|
74
|
+
rubygems_version: 3.2.3
|
75
|
+
signing_key:
|
76
|
+
specification_version: 4
|
77
|
+
summary: A longer description of cocoapods-byte-csjm.
|
78
|
+
test_files: []
|