cocoapods-fix-module 0.0.7 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/DEMO/.bundle/config +2 -0
- data/DEMO/.gitignore +50 -0
- data/DEMO/DEMO.xcodeproj/project.pbxproj +520 -0
- data/DEMO/DEMO.xcworkspace/contents.xcworkspacedata +10 -0
- data/DEMO/DEMO.xcworkspace/pod.json +1 -0
- data/DEMO/DEMO/AppDelegate.swift +53 -0
- data/DEMO/DEMO/Assets.xcassets/AppIcon.appiconset/Contents.json +98 -0
- data/DEMO/DEMO/Assets.xcassets/Contents.json +6 -0
- data/DEMO/DEMO/Base.lproj/LaunchScreen.storyboard +25 -0
- data/DEMO/DEMO/Info.plist +43 -0
- data/DEMO/DEMO/ViewController.swift +21 -0
- data/DEMO/DEMO/demos/BDWebImage_demo.m +16 -0
- data/DEMO/DEMOTests/DEMOTests.swift +34 -0
- data/DEMO/DEMOTests/Info.plist +22 -0
- data/DEMO/Gemfile +7 -0
- data/DEMO/Gemfile.lock +92 -0
- data/DEMO/Podfile +30 -0
- data/DEMO/Podfile.lock +20 -0
- data/Gemfile.lock +105 -0
- data/cocoapods-fix-module.gemspec +1 -1
- data/lib/cocoapods-fix-module/gem_version.rb +1 -1
- data/lib/cocoapods-fix-module/hint_no_app_target_support.rb +20 -0
- data/lib/cocoapods-fix-module/{patch.rb → patch1.6.rb} +3 -61
- data/lib/cocoapods-fix-module/patch1.7.rb +95 -0
- data/lib/cocoapods-fix-module/patch1.8.rb +95 -0
- data/lib/cocoapods-fix-module/patch_common.rb +67 -0
- data/lib/cocoapods_plugin.rb +11 -6
- metadata +30 -7
data/DEMO/Podfile
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# 建议使用 bundle exec pod install 代替 pod install,可以统一相关 ruby gem 的版本
|
2
|
+
platform :ios, '9.0'
|
3
|
+
#use_frameworks!
|
4
|
+
# add additional config here
|
5
|
+
|
6
|
+
require 'bd_pod_extentions'
|
7
|
+
# 使用组件源(必要)
|
8
|
+
# bd_pod_extentions 更多介绍 https://mobile.bytedance.net/docs/manual/17033/
|
9
|
+
bd_use_app('public', 'thirdParty')
|
10
|
+
|
11
|
+
# 全部使用源代码
|
12
|
+
#bd_use_source!
|
13
|
+
|
14
|
+
|
15
|
+
# 静态库下使用 module (使可以在 swift 代码里直接 import PodName)
|
16
|
+
use_modular_headers!
|
17
|
+
plugin 'cocoapods-fix-module' # 修复 objc binary pod 在 use_modular_headers 时仍没有 module 的问题
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
target 'DEMO' do
|
23
|
+
|
24
|
+
# add pod here
|
25
|
+
pod_binary 'lottie-ios' , '2.1.5'
|
26
|
+
pod_binary 'Masonry', '1.1.0'
|
27
|
+
# pod 'Literal', path: '~/byte/test/Literal2'
|
28
|
+
|
29
|
+
|
30
|
+
end
|
data/DEMO/Podfile.lock
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
PODS:
|
2
|
+
- lottie-ios (2.1.5.1-binary)
|
3
|
+
- Masonry (1.1.0.1-binary)
|
4
|
+
|
5
|
+
DEPENDENCIES:
|
6
|
+
- lottie-ios (= 2.1.5.1-binary)
|
7
|
+
- Masonry (= 1.1.0.1-binary)
|
8
|
+
|
9
|
+
SPEC REPOS:
|
10
|
+
"git@code.byted.org:iOS_Library/publicthird_binary_repo.git":
|
11
|
+
- lottie-ios
|
12
|
+
- Masonry
|
13
|
+
|
14
|
+
SPEC CHECKSUMS:
|
15
|
+
lottie-ios: f2b8cad625e57b90974a282efac4fce375ba3860
|
16
|
+
Masonry: c9cef972c6546901fe6e8900688ffa5e55175005
|
17
|
+
|
18
|
+
PODFILE CHECKSUM: 2802dd81cd0910852de0997259f9bf8681f0ccef
|
19
|
+
|
20
|
+
COCOAPODS: 1.8.3
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
cocoapods-fix-module (0.1.1)
|
5
|
+
cocoapods (>= 1.6.0)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
CFPropertyList (3.0.1)
|
11
|
+
activesupport (4.2.11.1)
|
12
|
+
i18n (~> 0.7)
|
13
|
+
minitest (~> 5.1)
|
14
|
+
thread_safe (~> 0.3, >= 0.3.4)
|
15
|
+
tzinfo (~> 1.1)
|
16
|
+
algoliasearch (1.27.1)
|
17
|
+
httpclient (~> 2.8, >= 2.8.3)
|
18
|
+
json (>= 1.5.1)
|
19
|
+
atomos (0.1.3)
|
20
|
+
bacon (1.2.0)
|
21
|
+
claide (1.0.3)
|
22
|
+
cocoapods (1.8.1)
|
23
|
+
activesupport (>= 4.0.2, < 5)
|
24
|
+
claide (>= 1.0.2, < 2.0)
|
25
|
+
cocoapods-core (= 1.8.1)
|
26
|
+
cocoapods-deintegrate (>= 1.0.3, < 2.0)
|
27
|
+
cocoapods-downloader (>= 1.2.2, < 2.0)
|
28
|
+
cocoapods-plugins (>= 1.0.0, < 2.0)
|
29
|
+
cocoapods-search (>= 1.0.0, < 2.0)
|
30
|
+
cocoapods-stats (>= 1.0.0, < 2.0)
|
31
|
+
cocoapods-trunk (>= 1.4.0, < 2.0)
|
32
|
+
cocoapods-try (>= 1.1.0, < 2.0)
|
33
|
+
colored2 (~> 3.1)
|
34
|
+
escape (~> 0.0.4)
|
35
|
+
fourflusher (>= 2.3.0, < 3.0)
|
36
|
+
gh_inspector (~> 1.0)
|
37
|
+
molinillo (~> 0.6.6)
|
38
|
+
nap (~> 1.0)
|
39
|
+
ruby-macho (~> 1.4)
|
40
|
+
xcodeproj (>= 1.11.1, < 2.0)
|
41
|
+
cocoapods-core (1.8.1)
|
42
|
+
activesupport (>= 4.0.2, < 6)
|
43
|
+
algoliasearch (~> 1.0)
|
44
|
+
concurrent-ruby (~> 1.1)
|
45
|
+
fuzzy_match (~> 2.0.4)
|
46
|
+
nap (~> 1.0)
|
47
|
+
cocoapods-deintegrate (1.0.4)
|
48
|
+
cocoapods-downloader (1.2.2)
|
49
|
+
cocoapods-plugins (1.0.0)
|
50
|
+
nap
|
51
|
+
cocoapods-search (1.0.0)
|
52
|
+
cocoapods-stats (1.1.0)
|
53
|
+
cocoapods-trunk (1.4.1)
|
54
|
+
nap (>= 0.8, < 2.0)
|
55
|
+
netrc (~> 0.11)
|
56
|
+
cocoapods-try (1.1.0)
|
57
|
+
colored2 (3.1.2)
|
58
|
+
concurrent-ruby (1.1.5)
|
59
|
+
escape (0.0.4)
|
60
|
+
fourflusher (2.3.1)
|
61
|
+
fuzzy_match (2.0.4)
|
62
|
+
gh_inspector (1.1.3)
|
63
|
+
httpclient (2.8.3)
|
64
|
+
i18n (0.9.5)
|
65
|
+
concurrent-ruby (~> 1.0)
|
66
|
+
json (2.2.0)
|
67
|
+
metaclass (0.0.4)
|
68
|
+
minitest (5.12.2)
|
69
|
+
mocha (1.9.0)
|
70
|
+
metaclass (~> 0.0.1)
|
71
|
+
mocha-on-bacon (0.2.3)
|
72
|
+
mocha (>= 0.13.0)
|
73
|
+
molinillo (0.6.6)
|
74
|
+
nanaimo (0.2.6)
|
75
|
+
nap (1.1.0)
|
76
|
+
netrc (0.11.0)
|
77
|
+
prettybacon (0.0.2)
|
78
|
+
bacon (~> 1.2)
|
79
|
+
rake (13.0.0)
|
80
|
+
ruby-macho (1.4.0)
|
81
|
+
thread_safe (0.3.6)
|
82
|
+
tzinfo (1.2.5)
|
83
|
+
thread_safe (~> 0.1)
|
84
|
+
xcodeproj (1.12.0)
|
85
|
+
CFPropertyList (>= 2.3.3, < 4.0)
|
86
|
+
atomos (~> 0.1.3)
|
87
|
+
claide (>= 1.0.2, < 2.0)
|
88
|
+
colored2 (~> 3.1)
|
89
|
+
nanaimo (~> 0.2.6)
|
90
|
+
|
91
|
+
PLATFORMS
|
92
|
+
ruby
|
93
|
+
|
94
|
+
DEPENDENCIES
|
95
|
+
bacon
|
96
|
+
bundler
|
97
|
+
cocoapods
|
98
|
+
cocoapods-fix-module!
|
99
|
+
mocha
|
100
|
+
mocha-on-bacon
|
101
|
+
prettybacon
|
102
|
+
rake
|
103
|
+
|
104
|
+
BUNDLED WITH
|
105
|
+
2.0.2
|
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_development_dependency 'bundler'
|
21
|
+
spec.add_development_dependency 'bundler'
|
22
22
|
spec.add_development_dependency 'rake'
|
23
23
|
spec.add_runtime_dependency 'cocoapods', '>= 1.6.0'
|
24
24
|
|
@@ -0,0 +1,20 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
# 目前的改法对于 1.7 / 1.8,是没有考虑 app spec 的东西的,所以显示不支持
|
4
|
+
Pod::HooksManager.register('cocoapods-fix-module', :post_install) do |installer_context|
|
5
|
+
pod_name = nil
|
6
|
+
has_app_spec = installer_context.umbrella_targets.any? do |umbrella_target|
|
7
|
+
umbrella_target.specs.any? do |spec|
|
8
|
+
if spec.app_specs.length > 0
|
9
|
+
pod_name = spec.name
|
10
|
+
next true
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
if has_app_spec
|
15
|
+
puts "[!] ERROR: Plugin cocoapods-fix-module, doesn't supports pods whose spec contain app_spec. Invalid pods: #{pod_name}".red
|
16
|
+
puts "Reference: https://guides.cocoapods.org/syntax/podspec.html#app_spec".red
|
17
|
+
puts "Install failed !!".red
|
18
|
+
exit 1
|
19
|
+
end
|
20
|
+
end
|
@@ -9,31 +9,13 @@
|
|
9
9
|
#
|
10
10
|
# We fix it by changing the `install!` method:
|
11
11
|
#
|
12
|
-
# when a pod is (target.should_build? == true && target.
|
12
|
+
# when a pod is (target.should_build? == true && target.define_module?),
|
13
13
|
# we treat it differently: like normal pods,
|
14
14
|
# - create_umbrella_header
|
15
15
|
# - create_module_map
|
16
16
|
#
|
17
17
|
|
18
|
-
|
19
|
-
class PodTarget
|
20
|
-
|
21
|
-
def contain_vendored_libraries_and_no_vendored_frameworks?
|
22
|
-
return @uses_libraries_no_frameworks if defined? @uses_libraries_no_frameworks
|
23
|
-
@uses_libraries_no_frameworks = begin
|
24
|
-
accessors = file_accessors.reject { |a| a.spec.test_specification? }
|
25
|
-
!accessors.empty? && accessors.all?{ |a| a.vendored_frameworks.blank? } && accessors.any?{ |a| not a.vendored_libraries.blank? }
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def should_generate_module_map_for_a_pod_should_not_build?
|
30
|
-
@should_generate_module_map_for_a_pod_should_not_build ||= begin
|
31
|
-
self.uses_modular_headers? && contain_vendored_libraries_and_no_vendored_frameworks?
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
36
|
-
end
|
18
|
+
require_relative 'patch_common'
|
37
19
|
|
38
20
|
module Pod
|
39
21
|
class Installer
|
@@ -49,6 +31,7 @@ module Pod
|
|
49
31
|
# special handling for pod with no source code
|
50
32
|
|
51
33
|
# Most code below are copied from original install! method
|
34
|
+
# Manually checked the 1.6.0/ 1.6.1, they are all the same. So it's safe.
|
52
35
|
native_target = add_target
|
53
36
|
_, file_accessors = target.file_accessors.partition { |fa| fa.spec.test_specification? }
|
54
37
|
resource_bundle_targets = add_resources_bundle_targets(file_accessors).values.flatten
|
@@ -108,45 +91,4 @@ end
|
|
108
91
|
|
109
92
|
|
110
93
|
|
111
|
-
module Pod
|
112
|
-
class Target
|
113
|
-
# @since 1.5.0
|
114
|
-
class BuildSettings
|
115
|
-
|
116
|
-
class PodTargetSettings
|
117
|
-
|
118
|
-
# Patch (because there is a should_build? check)
|
119
|
-
#
|
120
|
-
FIX_MODULE_OLD_module_map_file_to_import = instance_method(:module_map_file_to_import)
|
121
|
-
define_method(:module_map_file_to_import) do
|
122
|
-
|
123
|
-
if (not target.should_build?) && target.should_generate_module_map_for_a_pod_should_not_build?
|
124
|
-
# ---- Code bellow is copied form the original method ----
|
125
|
-
#
|
126
|
-
# ---------------- this line is deleted ------------------
|
127
|
-
# return unless target.should_build?
|
128
|
-
# -------------------------------------------------------
|
129
|
-
#
|
130
|
-
return if target.requires_frameworks?
|
131
|
-
return unless target.defines_module?
|
132
|
-
|
133
|
-
if target.uses_swift?
|
134
|
-
# for swift, we have a custom build phase that copies in the module map, appending the .Swift module
|
135
|
-
"${PODS_CONFIGURATION_BUILD_DIR}/#{target.label}/#{target.product_module_name}.modulemap"
|
136
|
-
else
|
137
|
-
"${PODS_ROOT}/#{target.module_map_path.relative_path_from(target.sandbox.root)}"
|
138
|
-
end
|
139
|
-
# ---- Code above is copied form the original method ----
|
140
|
-
else
|
141
|
-
# call original
|
142
|
-
FIX_MODULE_OLD_module_map_file_to_import.bind(self).()
|
143
|
-
end
|
144
|
-
|
145
|
-
end # patch ended
|
146
|
-
|
147
|
-
end
|
148
|
-
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|
152
94
|
|
@@ -0,0 +1,95 @@
|
|
1
|
+
|
2
|
+
#
|
3
|
+
# REASON:
|
4
|
+
#
|
5
|
+
# When a pod only have vendored library, and the 'use_modular_header' is on, cocoapods won't
|
6
|
+
# generate a modulemap (so module is not working), because it consider it as "should_build? == false".
|
7
|
+
#
|
8
|
+
# It's a bug of cocoapods.
|
9
|
+
#
|
10
|
+
# We fix it by changing the `install!` method:
|
11
|
+
#
|
12
|
+
# when a pod is (target.should_build? == true && target.define_module?),
|
13
|
+
# we treat it differently: like normal pods,
|
14
|
+
# - create_umbrella_header
|
15
|
+
# - create_module_map
|
16
|
+
#
|
17
|
+
|
18
|
+
require_relative 'patch_common'
|
19
|
+
require_relative 'hint_no_app_target_support'
|
20
|
+
|
21
|
+
module Pod
|
22
|
+
class Installer
|
23
|
+
class Xcode
|
24
|
+
class PodsProjectGenerator
|
25
|
+
class PodTargetInstaller
|
26
|
+
|
27
|
+
|
28
|
+
FIX_MODULE_OLD_install = instance_method(:install!)
|
29
|
+
define_method(:install!) do
|
30
|
+
|
31
|
+
if (not target.should_build?) && target.should_generate_module_map_for_a_pod_should_not_build?
|
32
|
+
# special handling for pod with no source code
|
33
|
+
|
34
|
+
# Most code below are copied from original install! method
|
35
|
+
# Manually checked the 1.7.0 ~ 1.7.5, they are all the same. So it's safe.
|
36
|
+
native_target = add_target
|
37
|
+
library_file_accessors = target.file_accessors.select { |fa| fa.spec.library_specification? }
|
38
|
+
resource_bundle_targets = add_resources_bundle_targets(library_file_accessors).values.flatten
|
39
|
+
create_xcconfig_file(native_target, resource_bundle_targets)
|
40
|
+
|
41
|
+
if target.defines_module?
|
42
|
+
create_module_map(native_target) do |generator|
|
43
|
+
generator.headers.concat module_map_additional_headers
|
44
|
+
end
|
45
|
+
create_umbrella_header(native_target) do |generator|
|
46
|
+
generator.imports += library_file_accessors.flat_map do |file_accessor|
|
47
|
+
header_dir = if !target.build_as_framework? && dir = file_accessor.spec_consumer.header_dir
|
48
|
+
Pathname.new(dir)
|
49
|
+
end
|
50
|
+
|
51
|
+
file_accessor.public_headers.map do |public_header|
|
52
|
+
public_header = if header_mappings_dir
|
53
|
+
public_header.relative_path_from(header_mappings_dir)
|
54
|
+
else
|
55
|
+
public_header.basename
|
56
|
+
end
|
57
|
+
if header_dir
|
58
|
+
public_header = header_dir.join(public_header)
|
59
|
+
end
|
60
|
+
public_header
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
if target.build_as_framework?
|
68
|
+
unless skip_info_plist?(native_target)
|
69
|
+
create_info_plist_file(target.info_plist_path, native_target, target.version, target.platform)
|
70
|
+
end
|
71
|
+
create_build_phase_to_symlink_header_folders(native_target)
|
72
|
+
end
|
73
|
+
|
74
|
+
if target.build_as_library? && target.uses_swift?
|
75
|
+
add_swift_library_compatibility_header_phase(native_target)
|
76
|
+
end
|
77
|
+
|
78
|
+
clean_support_files_temp_dir
|
79
|
+
TargetInstallationResult.new(target, native_target, resource_bundle_targets)
|
80
|
+
|
81
|
+
|
82
|
+
else
|
83
|
+
# call original
|
84
|
+
FIX_MODULE_OLD_install.bind(self).()
|
85
|
+
end
|
86
|
+
|
87
|
+
end # patch ended
|
88
|
+
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
|
@@ -0,0 +1,95 @@
|
|
1
|
+
|
2
|
+
#
|
3
|
+
# REASON:
|
4
|
+
#
|
5
|
+
# When a pod only have vendored library, and the 'use_modular_header' is on, cocoapods won't
|
6
|
+
# generate a modulemap (so module is not working), because it consider it as "should_build? == false".
|
7
|
+
#
|
8
|
+
# It's a bug of cocoapods.
|
9
|
+
#
|
10
|
+
# We fix it by changing the `install!` method:
|
11
|
+
#
|
12
|
+
# when a pod is (target.should_build? == true && target.define_module?),
|
13
|
+
# we treat it differently: like normal pods,
|
14
|
+
# - create_umbrella_header
|
15
|
+
# - create_module_map
|
16
|
+
#
|
17
|
+
|
18
|
+
require_relative 'patch_common'
|
19
|
+
require_relative 'hint_no_app_target_support'
|
20
|
+
|
21
|
+
module Pod
|
22
|
+
class Installer
|
23
|
+
class Xcode
|
24
|
+
class PodsProjectGenerator
|
25
|
+
class PodTargetInstaller
|
26
|
+
|
27
|
+
|
28
|
+
FIX_MODULE_OLD_install = instance_method(:install!)
|
29
|
+
define_method(:install!) do
|
30
|
+
|
31
|
+
if (not target.should_build?) && target.should_generate_module_map_for_a_pod_should_not_build?
|
32
|
+
# special handling for pod with no source code
|
33
|
+
|
34
|
+
# Most code below are copied from original install! method
|
35
|
+
# Manually checked the 1.8.1/ 1.8.3, they are all the same. So it's safe.
|
36
|
+
native_target = add_target
|
37
|
+
library_file_accessors = target.file_accessors.select { |fa| fa.spec.library_specification? }
|
38
|
+
resource_bundle_targets = add_resources_bundle_targets(library_file_accessors).values.flatten
|
39
|
+
create_xcconfig_file(native_target, resource_bundle_targets)
|
40
|
+
|
41
|
+
if target.defines_module?
|
42
|
+
create_module_map(native_target) do |generator|
|
43
|
+
generator.headers.concat module_map_additional_headers
|
44
|
+
end
|
45
|
+
create_umbrella_header(native_target) do |generator|
|
46
|
+
generator.imports += library_file_accessors.flat_map do |file_accessor|
|
47
|
+
header_dir = if !target.build_as_framework? && dir = file_accessor.spec_consumer.header_dir
|
48
|
+
Pathname.new(dir)
|
49
|
+
end
|
50
|
+
|
51
|
+
file_accessor.public_headers.map do |public_header|
|
52
|
+
public_header = if header_mappings_dir(file_accessor)
|
53
|
+
public_header.relative_path_from(header_mappings_dir(file_accessor))
|
54
|
+
else
|
55
|
+
public_header.basename
|
56
|
+
end
|
57
|
+
if header_dir
|
58
|
+
public_header = header_dir.join(public_header)
|
59
|
+
end
|
60
|
+
public_header
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
if target.build_as_framework?
|
68
|
+
unless skip_info_plist?(native_target)
|
69
|
+
create_info_plist_file(target.info_plist_path, native_target, target.version, target.platform, :additional_entries => target.info_plist_entries)
|
70
|
+
end
|
71
|
+
create_build_phase_to_symlink_header_folders(native_target)
|
72
|
+
end
|
73
|
+
|
74
|
+
if target.build_as_library? && target.uses_swift?
|
75
|
+
add_swift_library_compatibility_header_phase(native_target)
|
76
|
+
end
|
77
|
+
|
78
|
+
clean_support_files_temp_dir
|
79
|
+
TargetInstallationResult.new(target, native_target, resource_bundle_targets)
|
80
|
+
|
81
|
+
|
82
|
+
else
|
83
|
+
# call original
|
84
|
+
FIX_MODULE_OLD_install.bind(self).()
|
85
|
+
end
|
86
|
+
|
87
|
+
end # patch ended
|
88
|
+
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
|