cocoapods-fix-module 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f45e445f35ec065947fd79717584617d26c7029d
4
- data.tar.gz: 51ef2924cd1566916ba1861bde88e273bcad1eb8
3
+ metadata.gz: 3ffe52ae83b3a589de087178508764ff0402f9f0
4
+ data.tar.gz: 19e1a654050283dcd33cc9035ef60597a7fba283
5
5
  SHA512:
6
- metadata.gz: b6091fc4354253b62aa94be690657589d15499401a94870fd5264c3b97001ff91b9036d752aef2e53385b9b0f3351e28a62fc3ced80d44d4c001d7becc543813
7
- data.tar.gz: d1c4695a22411b149c9c28fe0e146646094fdd1c30658337db96ca79d82f5d2da75e8025d2f9c6052a0a40770554a159e5379dc62875cdc848006f8663839e31
6
+ metadata.gz: 2c7782189a64692b7a4605bf561ce77a479ac8c4890d1bdb932660313bacc7d61b7616700bc202aaf0360d16967c14c2eb45b4551a066458615b4545080f1a6e
7
+ data.tar.gz: acd641a68a2b3cdadeb624e17ed2eabc9baa90717261e077ff0d231035d7f35e0ba102b5f0676c76bd60a84406edabd50ebe5d190f007336b6d3e76bc5e123cc
data/README.md CHANGED
@@ -1,6 +1,12 @@
1
1
  # cocoapods-fix-module
2
2
 
3
- A description of cocoapods-fix-module.
3
+ Cocoapods have a bug: doesn't generate modulemap for pure binary pod
4
+
5
+ This plugin fix this bug.
6
+
7
+ https://code.byted.org/iOS_Library/MobileDev/issues/256
8
+
9
+
4
10
 
5
11
  ## Installation
6
12
 
@@ -20,4 +20,6 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency 'bundler', '~> 1.3'
22
22
  spec.add_development_dependency 'rake'
23
+ spec.add_runtime_dependency 'cocoapods', '>= 1.5.0'
24
+
23
25
  end
@@ -1,3 +1,3 @@
1
1
  module CocoapodsFixModule
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -0,0 +1,221 @@
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), beacause 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.uses_modular_headers?),
13
+ # we treat it differently: like nomarl pods,
14
+ # - create_umbrella_header
15
+ # - create_module_map
16
+ #
17
+ #
18
+ module Pod
19
+ class Installer
20
+ class Xcode
21
+ class PodsProjectGenerator
22
+ class PodTargetInstaller
23
+
24
+
25
+ FIX_MODULE_OLD_install = instance_method(:install!)
26
+ define_method(:install!) do
27
+
28
+ if (not target.should_build?) && target.send(:uses_modular_headers?)
29
+ # special handling for pod with no source code
30
+
31
+ # Most code below are copied from original install! method
32
+ # Manually checked the 1.5.3/ 1.5.2/ 1.5.1/ 1.5.0, they are all the same. So it's safe.
33
+ UI.message "- Installing target `#{target.name}` #{target.platform}" do
34
+ add_target
35
+ create_support_files_dir
36
+
37
+ add_resources_bundle_targets
38
+ create_xcconfig_file
39
+
40
+ if target.defines_module?
41
+ create_module_map do |generator|
42
+ generator.headers.concat module_map_additional_headers
43
+ end
44
+ create_umbrella_header do |generator|
45
+ file_accessors = target.file_accessors
46
+ file_accessors = file_accessors.reject { |f| f.spec.test_specification? } if target.contains_test_specifications?
47
+ generator.imports += if header_mappings_dir
48
+ file_accessors.flat_map(&:public_headers).map do |pathname|
49
+ pathname.relative_path_from(header_mappings_dir)
50
+ end
51
+ else
52
+ file_accessors.flat_map(&:public_headers).map(&:basename)
53
+ end
54
+ end
55
+ end
56
+
57
+ if target.requires_frameworks?
58
+ unless target.static_framework?
59
+ create_info_plist_file(target.info_plist_path, native_target, target.version, target.platform)
60
+ end
61
+ create_build_phase_to_symlink_header_folders
62
+ elsif target.uses_swift?
63
+ add_swift_static_library_compatibility_header_phase
64
+ end
65
+
66
+ end
67
+
68
+ else
69
+ # call original
70
+ FIX_MODULE_OLD_install.bind(self).()
71
+ end
72
+
73
+ end # patch ended
74
+
75
+
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
81
+
82
+
83
+
84
+
85
+
86
+ module Pod
87
+ class Installer
88
+ class Xcode
89
+ class PodsProjectGenerator
90
+
91
+
92
+ # override
93
+ #
94
+ # Manually checked the 1.5.3/ 1.5.2/ 1.5.1/ 1.5.0, they are all the same. So it's safe.
95
+ #
96
+ def install_libraries
97
+ UI.message '- Installing targets' do
98
+ umbrella_headers_by_dir = pod_targets.map do |pod_target|
99
+ ## ---- modified
100
+ # next unless pod_target.should_build? && pod_target.defines_module?
101
+ next unless pod_target.defines_module?
102
+ next unless (pod_target.should_build? || pod_target.send(:uses_modular_headers?) )
103
+ ## ---- modifed end
104
+ #
105
+ # contentx below is copied from original method
106
+
107
+ pod_target.umbrella_header_path
108
+ end.compact.group_by(&:dirname)
109
+
110
+ pod_targets.sort_by(&:name).each do |pod_target|
111
+ target_installer = PodTargetInstaller.new(sandbox, pod_target)
112
+ target_installer.umbrella_headers_by_dir = umbrella_headers_by_dir
113
+ target_installer.install!
114
+ end
115
+
116
+ aggregate_targets.sort_by(&:name).each do |target|
117
+ target_installer = AggregateTargetInstaller.new(sandbox, target)
118
+ target_installer.install!
119
+ end
120
+
121
+ add_system_framework_dependencies
122
+ end
123
+ end
124
+
125
+ end
126
+ end
127
+ end
128
+ end
129
+
130
+
131
+
132
+ module Pod
133
+ module Generator
134
+ module XCConfig
135
+ module XCConfigHelper
136
+
137
+ # override
138
+ #
139
+ # Manually checked the 1.5.3/ 1.5.2/ 1.5.1, they are all the same. So it's safe.
140
+ # 1.5.0 is slightly different at Line 147 (`dependent_targets.uniq.combination(2) do |a, b|`)
141
+ # with no `uniq`, but I think it's not a problem.
142
+ #
143
+ def self.search_paths_for_dependent_targets(target, dependent_targets, test_xcconfig = false)
144
+ ## ---- modified
145
+ # dependent_targets = dependent_targets.select(&:should_build?)
146
+ dependent_targets = dependent_targets.select { |target| target.should_build? || target.send(:uses_modular_headers?) }
147
+ ## ---- modifed end
148
+ #
149
+ # contentx below is copied from original method
150
+
151
+ # Filter out dependent targets that are subsets of another target.
152
+ subset_targets = []
153
+ dependent_targets.uniq.combination(2) do |a, b|
154
+ if (a.specs - b.specs).empty?
155
+ subset_targets << a
156
+ elsif (b.specs - a.specs).empty?
157
+ subset_targets << b
158
+ end
159
+ end
160
+ dependent_targets -= subset_targets
161
+
162
+ # Alias build dirs to avoid recursive definitions for pod targets and depending
163
+ # on build settings which could be overwritten in the user target.
164
+ build_settings = {
165
+ BUILD_DIR_VARIABLE[2..-2] => '${BUILD_DIR}',
166
+ CONFIGURATION_BUILD_DIR_VARIABLE[2..-2] => "#{BUILD_DIR_VARIABLE}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)",
167
+ }
168
+
169
+ # Scope pod targets as long as they are not test targets.
170
+ if !test_xcconfig && target.respond_to?(:configuration_build_dir)
171
+ build_settings['CONFIGURATION_BUILD_DIR'] = target.configuration_build_dir(CONFIGURATION_BUILD_DIR_VARIABLE)
172
+ end
173
+
174
+ module_map_files = []
175
+ unless dependent_targets.empty?
176
+ framework_search_paths = []
177
+ library_search_paths = []
178
+ swift_import_paths = []
179
+ dependent_targets.each do |dependent_target|
180
+ if dependent_target.requires_frameworks?
181
+ framework_search_paths << dependent_target.configuration_build_dir(CONFIGURATION_BUILD_DIR_VARIABLE)
182
+ else
183
+ ### -------------- modified ---------------
184
+ # library_search_paths << dependent_target.configuration_build_dir(CONFIGURATION_BUILD_DIR_VARIABLE)
185
+ # --- to ----
186
+ if dependent_target.should_build?
187
+ library_search_paths << dependent_target.configuration_build_dir(CONFIGURATION_BUILD_DIR_VARIABLE)
188
+ end
189
+ ### -------------- \modified ---------------
190
+ if dependent_target.defines_module?
191
+ module_map_file = if dependent_target.uses_swift?
192
+ # for swift, we have a custom build phase that copies in the module map, appending the .Swift module
193
+ "${PODS_CONFIGURATION_BUILD_DIR}/#{dependent_target.label}/#{dependent_target.product_module_name}.modulemap"
194
+ else
195
+ "${PODS_ROOT}/#{dependent_target.module_map_path.relative_path_from(dependent_target.sandbox.root)}"
196
+ end
197
+ module_map_files << %(-fmodule-map-file="#{module_map_file}")
198
+ swift_import_paths << dependent_target.configuration_build_dir(CONFIGURATION_BUILD_DIR_VARIABLE) if dependent_target.uses_swift?
199
+ end
200
+ end
201
+ end
202
+ build_settings['FRAMEWORK_SEARCH_PATHS'] = XCConfigHelper.quote(framework_search_paths.uniq)
203
+ build_settings['LIBRARY_SEARCH_PATHS'] = XCConfigHelper.quote(library_search_paths.uniq)
204
+ build_settings['SWIFT_INCLUDE_PATHS'] = XCConfigHelper.quote(swift_import_paths.uniq)
205
+ end
206
+
207
+ other_swift_flags = module_map_files.tap(&:uniq!).flat_map { |f| ['-Xcc', f] }
208
+ if target.is_a?(PodTarget) && !target.requires_frameworks? && target.defines_module? && !test_xcconfig
209
+ # make it possible for a mixed swift/objc static library to be able to import the objc from within swift
210
+ other_swift_flags += ['-import-underlying-module', '-Xcc', '-fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}"']
211
+ end
212
+ # unconditionally set these, because of (the possibility of) having to add the pod targets own module map file
213
+ build_settings['OTHER_CFLAGS'] = module_map_files.join(' ')
214
+ build_settings['OTHER_SWIFT_FLAGS'] = other_swift_flags.join(' ')
215
+
216
+ build_settings
217
+ end
218
+ end
219
+ end
220
+ end
221
+ end
@@ -1,4 +1,9 @@
1
1
 
2
2
  Pod::HooksManager.register('cocoapods-fix-module', :pre_install) do |installer_context|
3
- require 'cocoapods-fix-module/patch'
3
+ if Pod::VERSION.start_with? "1.5"
4
+ require 'cocoapods-fix-module/patch1.5'
5
+ else
6
+ # 1.6 or above
7
+ require 'cocoapods-fix-module/patch'
8
+ end
4
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoapods-fix-module
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Leavez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-08 00:00:00.000000000 Z
11
+ date: 2019-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: cocoapods
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 1.5.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 1.5.0
41
55
  description: A short description of cocoapods-fix-module.
42
56
  email:
43
57
  - gaojiji@gmail.com
@@ -54,6 +68,7 @@ files:
54
68
  - lib/cocoapods-fix-module.rb
55
69
  - lib/cocoapods-fix-module/gem_version.rb
56
70
  - lib/cocoapods-fix-module/patch.rb
71
+ - lib/cocoapods-fix-module/patch1.5.rb
57
72
  - lib/cocoapods_plugin.rb
58
73
  - spec/command/module_spec.rb
59
74
  - spec/spec_helper.rb