cocoapods-BDTransform 3.1.0 → 4.0.1

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
  SHA1:
3
- metadata.gz: 1c8c68017ae250b835fc969aa125a1781e9e1313
4
- data.tar.gz: 450e1fe70898305969ead2e8dcf3374230e75b3e
3
+ metadata.gz: 1bee594ef3841463524203c69928f27219d2ebae
4
+ data.tar.gz: 46b883814b175207e98908069fa8be0574816fcb
5
5
  SHA512:
6
- metadata.gz: 5e5f4afb3a41519edfa3ffca5744a218c6dd521da80d46438d389a1111a4457c900b6c60a4c63b37170f2150fc52a44aecca2bd28907cb7e2c6771cbfc98e938
7
- data.tar.gz: 8082f3170281275aaaa8b90e5efa8478ec70989ad8681d7e50162c854f318ba39feb26fabf3c2dd9a135e002ccf9d453f730bfd3d0d723817988a8ee8b38a03b
6
+ metadata.gz: be20ef56d3312b2d6f6a2a356cde7aeb58e7ca2ec928853da1c65df9c68a89a9d6adab7b845bec7082290dbab34f32d5f65588b8ecc144c2347b7e887c2f8894
7
+ data.tar.gz: 83e46cbad27d7ba83f37ef37e8b60fbd2cd996b54887e4bbb1f088a4af3d3e3a866248bd8569d7fc1ebc40282128819d68f0693d8ac833d32cf71e83f72b138c
data/README.md CHANGED
@@ -1,11 +1,111 @@
1
+ ![](https://keep-international.oss-cn-beijing.aliyuncs.com/IMG_0202.PNG)
1
2
  # cocoapods-BDTransform
2
3
 
3
- A description of cocoapods-BDTransform.
4
+ cocoapods-BDTransform 是一款由组件化平台的提供的Pods辅助开发工具,可以方便地将二进制、源码、开发模式状态下的Pods进行转化。
5
+
6
+ ##Feature
7
+ - [x] 一键切换
8
+ - [x] 无需重复pod install
9
+ - [x] 增量编译
10
+
4
11
 
5
12
  ## Installation
6
13
 
7
- $ gem install cocoapods-BDTransform
14
+ $ sudo gem install cocoapods-BDTransform
8
15
 
9
16
  ## Usage
10
17
 
11
- $ pod spec BDTransform POD_NAME
18
+ cocoapods-BDTransform是一款CocoaPods的插件,可以直接嵌入到pod指令中,同时也提供了详细的使用说明
19
+
20
+ ```
21
+
22
+ ➜ pod bdtransform
23
+ Usage:
24
+
25
+ $ pod bdtransform COMMAND
26
+
27
+ An awesome tool for transforming Pods from source to binary or binary to
28
+ source without pod install && re-complier.Note: only support for .a
29
+ currently .Warning: You should use 👉 bd_pod_extentions (~>5.1.0) 👈 to
30
+ install your Project
31
+
32
+ Commands:
33
+
34
+ + to-binary Transform Pods from source to Binary Note: only support for
35
+ `.a` currently
36
+ + to-dev Transform Pods from normal to Developer Pods Note: maybe not
37
+ stable,connect with wusizhen by any problems
38
+ + to-source Transform Pods from binary to source Note: only support for
39
+ `.a` currently
40
+
41
+ Options:
42
+
43
+ --silent Show nothing
44
+ --verbose Show more debugging information
45
+ --no-ansi Show output without ANSI codes
46
+ --help Show help banner of specified command
47
+
48
+ ```
49
+
50
+ ##Example
51
+ 由于头条的组件化进度比较快,因此以头条业务为例。目前头条业务中几乎所有的Pods都是以二进制状态存在,在日常开发迭代中经常会碰到下面的几种场景
52
+ ####To-source
53
+ 当RD开完后一个Feature进行打包测试时,发现CI产出的包有异常的边界Case。通常的做法是切换到CI打包的时候的commitID,将认为有问题的Pods改成源码进行Debug。但是在Debug过程中,发现需要调试其他Pods的源码,这时又需要把另外一个Pods切换到 **pod_source**状态,重新进行 **pod install、rebuild**等,如果又遇到新的Pods可能还要重复上述操作「**当然还有同学为了避免这种问题,直接从开始就用源码编译。。。**」
54
+
55
+ cocoapods-BDTransform插件可以避免上述的低效操作,比如Debug过程中发现**BDWebImage**需要进行调试,只需要在**Podfile同级目录下**运行下面指令,就可以进行Debug,而且是增量编译.
56
+
57
+ ```
58
+ pod bdtransform to-source BDWebImage
59
+ ```
60
+ ####To-bianry
61
+ 切换源码到二进制过程的场景相对比较少。比如有业务同学想要调试二进制包问题,可以随意的进行二进制和源码切换。
62
+ ####To-dev
63
+ 任意模式切换到Development Pods模式。在日常的组件化开发中,待开发的组件经常会以
64
+
65
+ ```
66
+ pod 'xxx',:path => 'xxx'
67
+ ```
68
+ 的方式集成到主工程进行开发,但是如果遇到需要调试并且开发的的Pods时,常常需要再次修改Podfile,重新**pod install、rebuild**等。
69
+
70
+ 基于此,cocoapods-BDTransform提供了一件切换**Dev**模式的功能。
71
+
72
+ ```
73
+ ➜ pod bdtransform to-dev
74
+ [!] A Podspec path is required.
75
+
76
+ Usage:
77
+
78
+ $ pod bdtransform to-dev
79
+
80
+ Transform Pods from normal to Developer Pods Note: maybe not
81
+ stable,connect with bupterambition@gmail.com by any problems. Warning: You
82
+ should use `bd_pod_extentions (~>5.0.0)` to install your Project
83
+
84
+ Options:
85
+
86
+ --podspec= the absolute path of your podspec to dev. i.e
87
+ --podspec=xxx/xxx.podspec
88
+ --subspecs= build with given subspecs. i.e --subspecs=Core,Monitor
89
+ --targets= the effected target of this operation. Default action effects
90
+ all your target of Project
91
+ ```
92
+
93
+ 以头条项目中的**TTUIWidget**为例,在全部使用二进制编译完成后,如果RD想要进行**TTUIWidget**功能的修改,可以使用下面命令
94
+
95
+ ```
96
+ pod bdtransform to-dev --podspec=/Users/bob/Git/ios/tt_pods_ui/TTUIWidget.podspec --targets=NewsInHouse
97
+ ```
98
+ **--podspec**指令表示待开发的**podspec绝对路径**,与**:path**用法相同;
99
+ **--targets**的作用与哪个Target生效,比如头条中有 **NewsInHouse、NewsSocialTodayExtenstion** 等Target
100
+
101
+ 修改完成后使用Xcode自带的**Source Control**功能可以自动关联到tt_pods_ui这个仓库,解决了以往的需要两处提交的问题
102
+
103
+ ![](https://keep-international.oss-cn-beijing.aliyuncs.com/1536056060686.jpg
104
+ )
105
+
106
+ #####Warn:
107
+ **目前对于xib以及bundle语法支持有限,因此在待开发的Pods的版本差别很大时,会出现小概率的编译缓存问题**
108
+ ##Note
109
+
110
+ BDTransform中的**to-binary**、**to-source** 是与组件化平台的策略强相关的,由于影响面巨大,前期在头条业务线经过了一个月的灰度阶段,目前已经比较稳定。如果其他业务线接入的话,请联系wusizhen.arch
111
+
@@ -5,6 +5,7 @@ module Pod
5
5
  self.summary = 'Transform Pods from source to binary or binary to source without pod install && re-complier .Note: only support for .a currently'
6
6
  require 'cocoapods-BDTransform/command/BDTransform/ToBinary'
7
7
  require 'cocoapods-BDTransform/command/BDTransform/ToSource'
8
+ require 'cocoapods-BDTransform/command/BDTransform/ToDev'
8
9
  self.description = <<-DESC
9
10
  An awesome tool for transforming Pods from source to binary or binary to source without pod install && re-complier.Note: only support for .a currently .Warning: You should use 👉 bd_pod_extentions (2.0.0) 👈 to install your Project
10
11
  DESC
@@ -0,0 +1,57 @@
1
+ require 'cocoapods-BDTransform/command/BDTransform/develop/dev.rb'
2
+ module Pod
3
+ class Command
4
+ class Bdtransform
5
+ class ToDev < Bdtransform
6
+ self.summary = 'Transform Pods from normal to Developer Pods Note: maybe not stable,connect with bupterambition@gmail.com by any problems'
7
+
8
+ self.description = <<-DESC
9
+ Transform Pods from normal to Developer Pods Note: maybe not stable,connect with bupterambition@gmail.com by any problems. Warning: You should use `bd_pod_extentions (~>5.0.0)` to install your Project
10
+ DESC
11
+
12
+ def self.options
13
+ [
14
+ ['--podspec=', 'the absolute path of your podspec to dev. i.e --podspec=xxx/xxx.podspec'],
15
+ ['--subspecs=', 'build with given subspecs. i.e --subspecs=Core,Monitor'],
16
+ ['--targets=', 'the effected target of this operation. Default action effects all your target of Project']
17
+ ]
18
+ end
19
+
20
+ def initialize(argv)
21
+ super
22
+ @podspec = argv.option('podspec')
23
+ subspecs = argv.option('subspecs')
24
+ targets = argv.option('targets')
25
+ @subspecs = subspecs.split(',') unless subspecs.nil?
26
+ @targets = targets.split(',') unless targets.nil?
27
+ if @podspec
28
+ @podspecName = File.basename(@podspec, ".*")
29
+ else
30
+ @podspec = 'no support'
31
+ end
32
+ @podProjectPath = Dir::pwd + "/" + "Pods/Pods.xcodeproj"
33
+
34
+ end
35
+
36
+ def validate!
37
+ help! 'A Podspec path is required.' unless File::exist?(@podspec)
38
+ help! 'Did not find your Pods Dir in current Dir' unless File::directory?(@podProjectPath)
39
+ end
40
+
41
+ def run
42
+ accessor
43
+ BDAwesomeTransmit::BDPodsTrans.transmit(@podspec,@subspecs,@sandboxPath,@podProjectPath,@podspecName,@workspacePath,@workspaceName,@targets)
44
+ end
45
+
46
+ private
47
+
48
+
49
+ def accessor
50
+ @sandboxPath = Dir::pwd + "/Pods"
51
+ @workspaceName = File.basename(Dir["*.xcworkspace"][0], ".*")
52
+ @workspacePath = Dir::pwd + "/" + File.basename(Dir["*.xcworkspace"][0])
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,448 @@
1
+ require 'cocoapods-core'
2
+ require 'cocoapods-core/specification/json'
3
+ require 'cocoapods'
4
+ require 'cocoapods/sandbox/path_list'
5
+ require 'cocoapods/project'
6
+
7
+ module BDAwesomeTransmit
8
+ class BDPodsTrans
9
+ def self.transmit(podspec,subspecs,sandboxPath,podProjectPath,podspecName,workspacePath,workspaceName,effectedTargets)
10
+ self.accessor(podspec,subspecs,sandboxPath,podProjectPath,podspecName,workspacePath,workspaceName,effectedTargets)
11
+ self.add_pod_to_Dev(podspecName)
12
+ @@project.save
13
+ end
14
+
15
+ def self.accessor(podspec,subspecs,sandboxPath,podProjectPath,podspecName,workspacePath,workspaceName,effectedTargets)
16
+ @@library_to_build = Array.new()
17
+ @@framework_to_build = Array.new()
18
+ @@effectedTargets = effectedTargets
19
+ @@podDirPath = sandboxPath
20
+ @@subspecs_build = subspecs
21
+ @@handlePodName = podspecName
22
+ @@workspacePath = workspacePath
23
+ @@workspaceName = workspaceName
24
+ @@devPodPath = File.dirname(podspec)
25
+ @@sandbox = Pod::Sandbox.new(sandboxPath)
26
+ @@sandbox.store_podspec(podspecName,File.open(podspec, 'r:utf-8', &:read))
27
+ @@path = Pod::Sandbox::PathList.new(@@devPodPath)
28
+ @@spec = Pod::Specification.from_file(podspec)
29
+ @@project = Xcodeproj::Project.open(podProjectPath)
30
+ @@file_to_added = Array.new()
31
+ @@file_to_resource = Array.new()
32
+ @@bunlde_resource = Hash.new()
33
+ @@resourceTarget = Array.new()
34
+ end
35
+
36
+ def self.add_pod_to_Dev(pod_name)
37
+
38
+ @@project.main_group.new_group('Development Pods') unless self.isContainDevPod
39
+
40
+ self.generatorTargetIfNeeded
41
+
42
+ self.generatorNewGroup(pod_name)
43
+
44
+ targetGroup = self.development_pod.new_group(pod_name)
45
+
46
+ raise "Group of #{@@handlePodName} create fail,please retry" unless targetGroup
47
+
48
+ buildFiles,headerFiles = self.sourceToAdded(targetGroup)
49
+
50
+ self.addToTarget(buildFiles,pod_name)
51
+
52
+ self.addResource
53
+
54
+ self.addSupportFiles(pod_name)
55
+
56
+ self.generatorSearchHeader(headerFiles,pod_name)
57
+
58
+ self.rectifyconfig
59
+
60
+ self.removeDepressedProductAndOfiles
61
+
62
+ @@project.save
63
+
64
+ end
65
+
66
+ private
67
+
68
+
69
+ def self.generatorNewGroup(pod_name)
70
+ if self.isInDevPod(pod_name) || self.isInNormalPods(pod_name)
71
+ self.saveSupport(self.pod_group(pod_name))
72
+ self.pod_group(pod_name).clear
73
+ self.pod_group(pod_name).remove_from_project
74
+ else
75
+ self.saveSupport(@@project.main_group)
76
+ end
77
+ end
78
+
79
+ def self.generatorTargetIfNeeded
80
+ purePods = self.isPurePods
81
+ if purePods
82
+ @@current_target = Xcodeproj::Project::ProjectHelper::new_target(@@project,:static_library,@@handlePodName,:ios,"8.0",self.isInGroup(@@project.main_group,'Products'),:objc)
83
+ self.mainPodTarget.each do |target|
84
+ target.add_dependency(@@current_target)
85
+ end
86
+ @@project.save
87
+ else
88
+ @@project.targets.find { |target| target.name == @@handlePodName}.build_configurations.each do |c|
89
+ c.base_configuration_reference = nil
90
+ end
91
+ end
92
+ end
93
+
94
+ def self.isPurePods
95
+ targets = @@project.targets.find { |target| target.name == @@handlePodName}
96
+ if targets
97
+ return false
98
+ end
99
+ return true
100
+ end
101
+
102
+ def self.addResource
103
+ @@resourceTarget.each do |target|
104
+ target.resources_build_phase.clear
105
+ targetName = target.name.split("-").last
106
+ if @@bunlde_resource[targetName]
107
+ @@bunlde_resource[targetName].each do |file|
108
+ target.resources_build_phase.add_file_reference(file,true)
109
+ end
110
+ end
111
+ end
112
+ end
113
+
114
+ def self.removeDepressedProductAndOfiles
115
+ cdir = File.dirname(__FILE__)
116
+ system("uuid=`#{cdir}/GetDerivedDataUUID #{@@workspacePath}`;domin=`pwd|awk -F '/' '{printf $3}'`;cd /Users/$domin/Library/Developer/Xcode/DerivedData/#{@@workspaceName}-$uuid/Build;target=BDWebImage;IFS=$'\n';find ./ -type d -name \"$target\" -depth 3 |xargs rm -rf >> /dev/null ;find ./ -type d -name \"$target.build\" -depth 4 |xargs rm -rf>> /dev/null")
117
+ system("cd #{@@podDirPath}/#{@@handlePodName};find ./ -type f -exec chmod 777 {} \\;")
118
+ system("cd #{@@podDirPath}/#{@@handlePodName};find ./ -type f -name \"*.m\" -exec rm {} \\;")
119
+ system("cd #{@@podDirPath}/#{@@handlePodName};find ./ -type f -name \"*.a\" -exec rm {} \\;")
120
+ system("cd #{@@podDirPath}/#{@@handlePodName};find ./ -type d -name \"*.framework\" -exec rm {} \\;")
121
+ system("cd #{@@podDirPath}/#{@@handlePodName};find ./ -type f -name \"*.h\" -exec rm {} \\;")
122
+ system("cd #{@@podDirPath}/#{@@handlePodName};find ./ -type f -name \"*.mm\" -exec rm {} \\;")
123
+ system("cd #{@@podDirPath}/#{@@handlePodName};find ./ -type f -name \"*.hpp\" -exec rm {} \\;")
124
+ system("cd #{@@podDirPath}/#{@@handlePodName};find ./ -type f -name \"*.cpp\" -exec rm {} \\;")
125
+ end
126
+
127
+ def self.correctionGroup
128
+ recovered = @@project.groups.find { |group| group.name == 'Recovered References' }
129
+ if recovered
130
+ recovered.remove_from_project
131
+ end
132
+ @@project.save
133
+ end
134
+
135
+ def self.rectifyconfig
136
+ @@current_target_config_path = @@podDirPath + "/Target Support Files/#{@@handlePodName}/#{@@handlePodName}.xcconfig"
137
+ raise 'did not find useable xcconfig' unless @@current_target_config_path
138
+ (self.findxcconfig << @@current_target_config_path).each do |configPath|
139
+ if !configPath.include?(".origin")
140
+ config = nil;
141
+ if File::exist?(configPath)
142
+ config = Xcodeproj::Config.new(configPath)
143
+ else
144
+ if !File::exist?(@@podDirPath + "/Target Support Files/#{@@handlePodName}")
145
+ Dir::mkdir(@@podDirPath + "/Target Support Files/#{@@handlePodName}")
146
+ end
147
+ File.new(configPath, "a+")
148
+ config = Xcodeproj::Config.new()
149
+ end
150
+ if configPath.include?("#{@@handlePodName}.xcconfig")
151
+ config.merge!('CONFIGURATION_BUILD_DIR' => "${PODS_CONFIGURATION_BUILD_DIR}/#{@@handlePodName}",'PODS_BUILD_DIR' =>'${BUILD_DIR}','SKIP_INSTALL' => 'YES','PODS_CONFIGURATION_BUILD_DIR'=>'${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)')
152
+ else
153
+ config.merge!('LIBRARY_SEARCH_PATHS' => "\"${PODS_CONFIGURATION_BUILD_DIR}/#{@@handlePodName}\"")
154
+ end
155
+ config.merge!('LIBRARY_SEARCH_PATHS' => "#{@@devPodPath}/**")
156
+ awesomePods = Array.new()
157
+ config.other_linker_flags[:libraries].each do |lib|
158
+ if lib.include?("#{@@handlePodName}") && (lib.include?("_Awesome_") || lib.include?("_awesome"))
159
+ awesomePods << lib
160
+ end
161
+ end
162
+ target = configPath.split("/Pods-").last.split(".")[0]
163
+ if !@@effectedTargets
164
+ config.other_linker_flags[:libraries] = config.other_linker_flags[:libraries] | @@library_to_build
165
+ elsif @@effectedTargets.include?(target)
166
+ config.other_linker_flags[:libraries] = config.other_linker_flags[:libraries] | @@library_to_build
167
+ end
168
+
169
+ config.other_linker_flags[:libraries] = config.other_linker_flags[:libraries] - awesomePods
170
+ config.other_linker_flags[:frameworks] = config.other_linker_flags[:frameworks] | @@framework_to_build
171
+ pn = Pathname.new(configPath)
172
+ config.save_as(pn)
173
+ end
174
+
175
+ end
176
+
177
+ end
178
+
179
+ def self.findxcconfig
180
+ @@project_path = Dir::pwd + "/Pods/Target Support Files"
181
+ allConfigFiles = Array.new
182
+ Dir::foreach(@@project_path) { |file|
183
+ if file.include?("Pods-")
184
+ Dir::foreach("#{@@project_path}/#{file}") { |config|
185
+ if config.include?(".xcconfig")
186
+ allConfigFiles << "#{@@project_path}/#{file}/#{config}"
187
+ end
188
+ }
189
+ end
190
+ }
191
+ return allConfigFiles
192
+ end
193
+
194
+ def self.saveSupport(group)
195
+
196
+ dummyPath = @@podDirPath + "/Target Support Files/#{@@handlePodName}/#{@@handlePodName}-dummy.m"
197
+ if !File::exist?(dummyPath)
198
+ if !File::exist?(@@podDirPath + "/Target Support Files/#{@@handlePodName}")
199
+ Dir::mkdir(@@podDirPath + "/Target Support Files/#{@@handlePodName}")
200
+ end
201
+ File.new(dummyPath, "a+")
202
+ pn = Pathname.new(dummyPath)
203
+ Pod::Generator::DummySource.new(@@handlePodName).save_as(pn)
204
+ end
205
+
206
+ prefixPath = @@podDirPath + "/Target Support Files/#{@@handlePodName}/#{@@handlePodName}-prefix.pch"
207
+ if !File::exist?(prefixPath)
208
+ if !File::exist?(@@podDirPath + "/Target Support Files/#{@@handlePodName}")
209
+ Dir::mkdir(@@podDirPath + "/Target Support Files/#{@@handlePodName}")
210
+ end
211
+ File.new(prefixPath, "a+")
212
+ pn = Pathname.new(prefixPath)
213
+ platform = Pod::Platform.new(:ios)
214
+ Pod::Generator::Header.new(platform).save_as(pn)
215
+ end
216
+
217
+ config = nil
218
+ configPath = @@podDirPath + "/Target Support Files/#{@@handlePodName}/#{@@handlePodName}.xcconfig"
219
+ if !File::exist?(configPath)
220
+ if !File::exist?(@@podDirPath + "/Target Support Files/#{@@handlePodName}")
221
+ Dir::mkdir(@@podDirPath + "/Target Support Files/#{@@handlePodName}")
222
+ end
223
+ File.new(configPath, "a+")
224
+ config = Xcodeproj::Config.new()
225
+ else
226
+ config = Xcodeproj::Config.new(configPath)
227
+ end
228
+ raise "config did not find" unless config
229
+
230
+ config.merge!('HEADER_SEARCH_PATHS' => "\"#{@@podDirPath}/Headers/Public/**\"",'GCC_PREFIX_HEADER' => "Target Support Files/#{@@handlePodName}/#{@@handlePodName}-prefix.pch")
231
+ pn = Pathname.new(configPath)
232
+ config.save_as(pn)
233
+ @@project.save
234
+ end
235
+
236
+ def self.generatorSearchHeader(header_files,pod_name)
237
+ headerStore = Pod::Sandbox::HeadersStore.new(@@sandbox,'Public')
238
+ headerStore.add_files(pod_name,header_files.map { |file| Pathname.new(file.path) })
239
+ @@current_target.headers_build_phase.clear
240
+ header_files.each do |headerFile|
241
+ @@current_target.headers_build_phase.add_file_reference(headerFile,true)
242
+ end
243
+ end
244
+
245
+ def self.addSupportFiles(pod_name)
246
+ tempGroup = self.pod_group(pod_name).new_group('Support Files')
247
+ current_suport_dir = "#{@@podDirPath}/Target Support Files/#{@@handlePodName}"
248
+ Dir.foreach(current_suport_dir) do |file|
249
+ if File::file?("#{current_suport_dir}/#{file}")
250
+ fileref = Xcodeproj::Project::Object::FileReferencesFactory.new_reference(tempGroup,"#{current_suport_dir}/#{file}",:group)
251
+ if file.to_s.include?(".xcconfig")
252
+ @@current_target.build_configurations.each do |c|
253
+ c.base_configuration_reference = fileref
254
+ end
255
+ end
256
+ end
257
+ end
258
+
259
+ @@project.save
260
+ end
261
+
262
+
263
+ def self.sourceToAdded(group)
264
+ buildFiles = Array.new()
265
+ headerFiles = Array.new()
266
+ self.parseDependency
267
+ self.recursiveHandleSpec(group,@@spec,buildFiles,headerFiles,false)
268
+ @@project.save
269
+ [buildFiles,headerFiles]
270
+ end
271
+
272
+ def self.parseDependency
273
+ return unless @@subspecs_build
274
+ @@spec.subspecs.each do |spec|
275
+ if @@subspecs_build.include?(spec.module_name)
276
+ spec.dependencies.each do |dependency|
277
+ if dependency.name.include?("#{@@handlePodName}/")
278
+ @@subspecs_build << dependency.name.split("/").last
279
+ end
280
+ end
281
+ end
282
+ end
283
+ @@subspecs_build = @@subspecs_build.uniq
284
+ end
285
+
286
+ def self.recursiveHandleSpec(group,spec,buildFiles,headerFiles,needCreateNewGroup = true,superSubspecName = nil)
287
+ if self.isInGroup(group,spec.module_name)
288
+ self.isInGroup(group,spec.module_name).remove_from_project
289
+ end
290
+ subgroup = group
291
+ if needCreateNewGroup
292
+ subgroup = group.new_group(spec.module_name)
293
+ end
294
+
295
+ platform = Pod::Platform.new(:ios)
296
+ consumer = spec.consumer(platform)
297
+ fileaccessor = Pod::Sandbox::FileAccessor.new(@@path,consumer)
298
+
299
+ fileaccessor.source_files.each do |filePath|
300
+ if !@@file_to_added.include?(filePath)
301
+ @@file_to_added << filePath
302
+ fileRefense,xcversion = Xcodeproj::Project::Object::FileReferencesFactory.new_reference(subgroup,filePath,:group)
303
+ if fileRefense
304
+ if fileRefense.path.end_with?(".m", ".mm", ".swift",".c",".cpp") && !buildFiles.include?(fileRefense)
305
+ buildFiles << fileRefense
306
+ elsif fileRefense.path.end_with?(".h",".hpp") && !buildFiles.include?(fileRefense)
307
+ headerFiles << fileRefense
308
+ end
309
+ end
310
+ end
311
+
312
+ end
313
+ fileaccessor.vendored_static_frameworks.each do |filePath|
314
+ if !self.isInGroup(subgroup,'frameworks')
315
+ subgroup.new_group('frameworks')
316
+ end
317
+ libBasename = File.basename(filePath.to_s)
318
+ if !@@framework_to_build.include?(libBasename)
319
+ @@framework_to_build << libBasename
320
+ Xcodeproj::Project::Object::FileReferencesFactory.new_reference(self.isInGroup(subgroup,'frameworks'),filePath,:group)
321
+ end
322
+
323
+ end
324
+ fileaccessor.vendored_libraries.each do |filePath|
325
+ if !self.isInGroup(subgroup,'frameworks')
326
+ subgroup.new_group('frameworks')
327
+ end
328
+ libBasename = File.basename(filePath.to_s,".*").gsub("lib","")
329
+ if !@@library_to_build.include?(libBasename)
330
+ @@library_to_build << libBasename
331
+ Xcodeproj::Project::Object::FileReferencesFactory.new_reference(self.isInGroup(subgroup,'frameworks'),filePath,:group)
332
+ end
333
+ end
334
+
335
+ fileaccessor.resource_bundles.each do |bundleName,filePaths|
336
+ if !self.isInGroup(subgroup,'Resources')
337
+ subgroup.new_group('Resources')
338
+ end
339
+ resources = Array.new
340
+ filePaths.each do |filePath|
341
+ libBasename = File.basename(filePath.to_s)
342
+ if !@@file_to_resource.include?(libBasename)
343
+ @@file_to_resource << libBasename
344
+ fileRefense,xcversion = Xcodeproj::Project::Object::FileReferencesFactory.new_reference(self.isInGroup(subgroup,'Resources'),filePath,:group)
345
+ if fileRefense
346
+ resources << fileRefense
347
+ end
348
+ end
349
+ end
350
+ @@bunlde_resource = @@bunlde_resource.merge({bundleName => resources})
351
+ end
352
+
353
+
354
+
355
+ if !@@library_to_build.include?(@@handlePodName)
356
+ @@library_to_build << @@handlePodName
357
+ end
358
+
359
+ if spec.subspecs.count
360
+ spec.subspecs.each do |sub|
361
+ if !@@subspecs_build || @@subspecs_build.include?(sub.module_name) || @@subspecs_build.include?(superSubspecName)
362
+ self.recursiveHandleSpec(subgroup,sub,buildFiles,headerFiles,true,spec.module_name)
363
+ end
364
+ end
365
+ end
366
+
367
+ end
368
+
369
+ def self.mainPodTarget
370
+ @@project.targets.select { |target|
371
+ target.name.include?("Pods-")
372
+ }
373
+ end
374
+
375
+ def self.addToTarget(files,pod_name)
376
+ @@current_target = nil
377
+ @@project.targets.each do |target|
378
+ targetName = target.name
379
+ if target.name.include?"-"
380
+ targetName = target.name.split("-")[0]
381
+ end
382
+ if targetName == pod_name
383
+ if !@@current_target
384
+ if target.symbol_type.to_s == 'static_library'
385
+ @@current_target = target
386
+ target.source_build_phase.clear
387
+ end
388
+ end
389
+ if target.symbol_type.to_s == 'bundle'
390
+ @@resourceTarget << target
391
+ end
392
+ end
393
+ end
394
+ raise "Don't find Any Target named #{pod_name}" unless @@current_target
395
+ files.each do |file|
396
+ @@current_target.source_build_phase.add_file_reference(file,true)
397
+ end
398
+ @@resourceTarget
399
+ end
400
+
401
+ def self.isInGroup(targetGroup,subName)
402
+ targetGroup.children.find { |group| group.name == subName || group.path == subName }
403
+ end
404
+
405
+ def self.isContainDevPod
406
+ find = @@project.groups.find { |group| group.name == 'Development Pods' }
407
+ find.class != NilClass
408
+ end
409
+
410
+ def self.isInDevPod(pod_name)
411
+ self.development_pods.find { |group| group.name == pod_name || group.path == pod_name }.class != NilClass
412
+ end
413
+
414
+ def self.isInNormalPods(pod_name)
415
+ self.pods.find { |group| group.name == pod_name || group.path == pod_name }
416
+ end
417
+
418
+ def self.pod_group(pod_name)
419
+ self.pod_groups.find { |group| group.name == pod_name || group.path == pod_name }
420
+ end
421
+
422
+ def self.pod_groups
423
+ if self.development_pods
424
+ return self.pods + self.development_pods
425
+ end
426
+ return self.pods
427
+ end
428
+
429
+ def self.development_pod
430
+ if self.isContainDevPod
431
+ return @@project.groups.find { |group| group.name == 'Development Pods' }
432
+ end
433
+ end
434
+
435
+
436
+ def self.pods
437
+ find = @@project.groups.find { |group| group.name == 'Pods' }
438
+ find.children.objects
439
+ end
440
+
441
+ def self.development_pods
442
+ if self.isContainDevPod
443
+ return @@project.groups.find { |group| group.name == 'Development Pods' }.children.objects
444
+ end
445
+ end
446
+
447
+ end
448
+ end
@@ -1,3 +1,3 @@
1
1
  module CocoapodsBdtransform
2
- VERSION = "3.1.0"
2
+ VERSION = "4.0.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoapods-BDTransform
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.0
4
+ version: 4.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - bupterambition
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-08-24 00:00:00.000000000 Z
11
+ date: 2018-09-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bd_pod_extentions
@@ -81,7 +81,10 @@ files:
81
81
  - lib/cocoapods-BDTransform/command/BDTransform/AweToBinary
82
82
  - lib/cocoapods-BDTransform/command/BDTransform/AweToSource
83
83
  - lib/cocoapods-BDTransform/command/BDTransform/ToBinary.rb
84
+ - lib/cocoapods-BDTransform/command/BDTransform/ToDev.rb
84
85
  - lib/cocoapods-BDTransform/command/BDTransform/ToSource.rb
86
+ - lib/cocoapods-BDTransform/command/BDTransform/develop/GetDerivedDataUUID
87
+ - lib/cocoapods-BDTransform/command/BDTransform/develop/dev.rb
85
88
  - lib/cocoapods-BDTransform/gem_version.rb
86
89
  - lib/cocoapods_plugin.rb
87
90
  homepage: https://github.com/Bupterambition/BDAwesomeTransmit
@@ -104,7 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
107
  version: '0'
105
108
  requirements: []
106
109
  rubyforge_project:
107
- rubygems_version: 2.5.2.3
110
+ rubygems_version: 2.5.2
108
111
  signing_key:
109
112
  specification_version: 4
110
113
  summary: A longer description of cocoapods-BDTransform.