cocoapods-pods-grouper 1.0.0
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-pods-grouper/dsl.rb +26 -0
- data/lib/cocoapods-pods-grouper/grouper.rb +44 -0
- data/lib/cocoapods_plugin.rb +15 -0
- metadata +65 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 925136f20ca9d5aaf88a972820a958f01909b0c13112320cc7c01e2a66ad98fc
|
|
4
|
+
data.tar.gz: acbaa48d807809d2f175ee7dbe1eaddb4b644792609af75867b8a75fe4e70765
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 4676b6614825c24039fa2221a9ea9dcf5225bea4d7e3c66c3f7b78cbe51486e0ea590b643e050d4e5c7de32270d2ce34c8e164d3c760b4550d3b435353ef00c6
|
|
7
|
+
data.tar.gz: a9251d8bbba8c9044bc69453059f8c24814a7d54de1b92c567d2c636df37daae2d405614f4b3eb97b6f22a795b9760ddb797dbf91ccf8e96b5b18a0373d31f31
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Pod
|
|
2
|
+
class Podfile
|
|
3
|
+
# 拦截所有 pod() 调用,把 pod 名自动记录到当前活跃层
|
|
4
|
+
# 使用 prepend 而非 monkey-patch,不影响原始逻辑
|
|
5
|
+
module PodLayerInterceptor
|
|
6
|
+
def pod(name, *args, &block)
|
|
7
|
+
PodsGroupOrganizer.record(name)
|
|
8
|
+
super
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
prepend PodLayerInterceptor
|
|
12
|
+
|
|
13
|
+
# 向 Podfile DSL 注入 layer 方法
|
|
14
|
+
# 用法:
|
|
15
|
+
# layer 'Base' do
|
|
16
|
+
# pod 'MyKit', :path => '...'
|
|
17
|
+
# end
|
|
18
|
+
module DSL
|
|
19
|
+
def layer(name, &block)
|
|
20
|
+
PodsGroupOrganizer.begin_layer(name)
|
|
21
|
+
block.call
|
|
22
|
+
PodsGroupOrganizer.end_layer
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
module PodsGroupOrganizer
|
|
2
|
+
@registry = Hash.new { |h, k| h[k] = [] }
|
|
3
|
+
@current_layer = nil
|
|
4
|
+
|
|
5
|
+
class << self
|
|
6
|
+
def begin_layer(name)
|
|
7
|
+
@current_layer = name
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def end_layer
|
|
11
|
+
@current_layer = nil
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# pod() 调用时由 DSL 拦截器回调,把 pod 名注册到当前活跃层
|
|
15
|
+
def record(pod_name)
|
|
16
|
+
@registry[@current_layer] << pod_name if @current_layer
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# post_install hook 里调用,把已注册的层整理成 Xcode group
|
|
20
|
+
# 兼容默认模式(PBXGroup)和 generate_multiple_pod_projects(PBXFileReference)
|
|
21
|
+
def organize(pods_project)
|
|
22
|
+
['Pods', 'Development Pods'].each do |root_name|
|
|
23
|
+
root_group = pods_project.groups.find { |g| g.name == root_name }
|
|
24
|
+
next unless root_group
|
|
25
|
+
|
|
26
|
+
@registry.each do |layer_name, pod_names|
|
|
27
|
+
layer_group = root_group.groups.find { |g| g.name == layer_name } ||
|
|
28
|
+
root_group.new_group(layer_name)
|
|
29
|
+
|
|
30
|
+
pod_names.each do |pod_name|
|
|
31
|
+
child = root_group.groups.find { |g| g.name == pod_name }
|
|
32
|
+
child ||= root_group.children.find do |c|
|
|
33
|
+
c.respond_to?(:path) && c.path.to_s.end_with?("#{pod_name}.xcodeproj")
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
child&.move(layer_group)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
pods_project.save
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'cocoapods-pods-grouper/grouper'
|
|
2
|
+
require 'cocoapods-pods-grouper/dsl'
|
|
3
|
+
|
|
4
|
+
# 插件加载后自动注册 post_install hook
|
|
5
|
+
# Podfile 无需手动调用 PodsGroupOrganizer.organize
|
|
6
|
+
#
|
|
7
|
+
# Podfile 用法:
|
|
8
|
+
# layer 'Base' do
|
|
9
|
+
# pod 'MyKit', :path => '...'
|
|
10
|
+
# end
|
|
11
|
+
Pod::HooksManager.register('cocoapods-pods-grouper', :post_install) do |context|
|
|
12
|
+
puts '[cocoapods-pods-grouper] organizing Pods groups...'
|
|
13
|
+
puts context.pods_project
|
|
14
|
+
PodsGroupOrganizer.organize(context.pods_project)
|
|
15
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: cocoapods-pods-grouper
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Your Name
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2026-04-13 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: cocoapods
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ">="
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '1.10'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ">="
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '1.10'
|
|
27
|
+
description: |
|
|
28
|
+
Provides a `layer` DSL for Podfile that lets you declare pods and their
|
|
29
|
+
Xcode navigator layer in one place. After `pod install`, the Pods panel is
|
|
30
|
+
automatically reorganized into the declared groups.
|
|
31
|
+
Compatible with both default mode and generate_multiple_pod_projects: true.
|
|
32
|
+
email:
|
|
33
|
+
- you@example.com
|
|
34
|
+
executables: []
|
|
35
|
+
extensions: []
|
|
36
|
+
extra_rdoc_files: []
|
|
37
|
+
files:
|
|
38
|
+
- lib/cocoapods-pods-grouper/dsl.rb
|
|
39
|
+
- lib/cocoapods-pods-grouper/grouper.rb
|
|
40
|
+
- lib/cocoapods_plugin.rb
|
|
41
|
+
homepage:
|
|
42
|
+
licenses:
|
|
43
|
+
- MIT
|
|
44
|
+
metadata: {}
|
|
45
|
+
post_install_message:
|
|
46
|
+
rdoc_options: []
|
|
47
|
+
require_paths:
|
|
48
|
+
- lib
|
|
49
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - ">="
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '0'
|
|
54
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
55
|
+
requirements:
|
|
56
|
+
- - ">="
|
|
57
|
+
- !ruby/object:Gem::Version
|
|
58
|
+
version: '0'
|
|
59
|
+
requirements: []
|
|
60
|
+
rubygems_version: 3.4.1
|
|
61
|
+
signing_key:
|
|
62
|
+
specification_version: 4
|
|
63
|
+
summary: CocoaPods plugin – organize Pods navigator into named layers via `layer`
|
|
64
|
+
DSL
|
|
65
|
+
test_files: []
|