pod-builder 0.9.1 → 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Example/Frameworks/PodBuilder.json +2 -20
- data/lib/pod_builder/command/build.rb +19 -1
- data/lib/pod_builder/command/install_sources.rb +16 -1
- data/lib/pod_builder/configuration.rb +4 -2
- data/lib/pod_builder/licenses.rb +13 -6
- data/lib/pod_builder/podfile.rb +13 -5
- data/lib/pod_builder/podfile_item.rb +32 -15
- data/lib/pod_builder/podspec.rb +11 -35
- data/lib/pod_builder/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d36d9f96e5add40dcfea2b813f2f2e7c7a8bf9dc92f66c18d9a9908b8b08acf9
|
4
|
+
data.tar.gz: 9277379ff44774e76b71ee3daa8763dcdf73733800561baa6c12ce4c98b9f649
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 49c7bfd632020dfb7d1ce681599652e4d5b7f4f44082a62b9440a6c5f45eccb571db1005f1b8d320aea8cdcc5ba4f9f571fe68c8cd7d824b8c681e22b01f4384
|
7
|
+
data.tar.gz: 97ade0e62f14c2128937b5abd4f734fd123ad82ab506d0992a7dd5ee28318596fb600d4781fd1c1e000743eef41ed30e0e1ff46d2ee528af7fefe60ea8282bc4
|
@@ -4,33 +4,15 @@
|
|
4
4
|
"Google-Mobile-Ads-SDK": {
|
5
5
|
"module_name": "GoogleMobileAds"
|
6
6
|
},
|
7
|
-
"Firebase/Core": {
|
8
|
-
"module_name": "FirebaseCore"
|
9
|
-
},
|
10
|
-
"Firebase/Performance": {
|
11
|
-
"module_name": "FirebasePerformance"
|
12
|
-
},
|
13
|
-
"Firebase/RemoteConfig": {
|
14
|
-
"module_name": "FirebaseRemoteConfig"
|
15
|
-
}
|
16
7
|
},
|
17
8
|
"skip_licenses": [
|
18
9
|
|
19
10
|
],
|
20
11
|
"skip_pods": [
|
21
|
-
|
12
|
+
"GoogleMaps"
|
22
13
|
],
|
23
14
|
"force_prebuild_pods": [
|
24
|
-
"
|
25
|
-
"FirebaseAnalyticsInterop",
|
26
|
-
"Firebase/Core",
|
27
|
-
"Firebase/CoreOnly",
|
28
|
-
"FirebaseCoreDiagnosticsInterop",
|
29
|
-
"FirebasePerformance",
|
30
|
-
"Firebase/Performance",
|
31
|
-
"FirebaseRemoteConfig",
|
32
|
-
"GoogleAppMeasurement",
|
33
|
-
"GoogleToolboxForMac"
|
15
|
+
"Firebase"
|
34
16
|
],
|
35
17
|
"build_settings": {
|
36
18
|
"ENABLE_BITCODE": "NO",
|
@@ -82,10 +82,12 @@ module PodBuilder
|
|
82
82
|
FileUtils.rm_f(PodBuilder::basepath("Podfile.lock"))
|
83
83
|
end
|
84
84
|
|
85
|
+
cleanup_framework_folder(all_buildable_items)
|
86
|
+
|
85
87
|
Licenses::write(licenses, all_buildable_items)
|
86
88
|
|
87
89
|
GenerateLFS::call(nil)
|
88
|
-
Podspec::generate(analyzer)
|
90
|
+
Podspec::generate(all_buildable_items, analyzer)
|
89
91
|
|
90
92
|
builded_pods = podfiles_items.flatten
|
91
93
|
builded_pods_and_deps = add_dependencies(builded_pods, all_buildable_items).select { |x| !x.is_prebuilt }
|
@@ -294,6 +296,22 @@ module PodBuilder
|
|
294
296
|
|
295
297
|
return pods_to_build
|
296
298
|
end
|
299
|
+
|
300
|
+
def self.cleanup_framework_folder(buildable_items)
|
301
|
+
expected_frameworks = buildable_items.map { |x| "#{x.module_name}.framework" }
|
302
|
+
expected_frameworks += buildable_items.map { |x| x.vendored_items }.flatten.map { |x| x.split("/").last }
|
303
|
+
expected_frameworks.uniq!
|
304
|
+
|
305
|
+
existing_frameworks = Dir.glob("#{PodBuilder::basepath("Rome")}/*.framework")
|
306
|
+
|
307
|
+
existing_frameworks.each do |existing_framework|
|
308
|
+
existing_framework_name = File.basename(existing_framework)
|
309
|
+
if !expected_frameworks.include?(existing_framework_name)
|
310
|
+
puts "Cleanining up `#{existing_framework_name}`, no longer found among dependencies".blue
|
311
|
+
FileUtils.rm_rf(existing_framework)
|
312
|
+
end
|
313
|
+
end
|
314
|
+
end
|
297
315
|
end
|
298
316
|
end
|
299
317
|
end
|
@@ -47,11 +47,26 @@ module PodBuilder
|
|
47
47
|
|
48
48
|
Dir.chdir(repo_dir)
|
49
49
|
puts "Checking out #{spec.podspec_name}".yellow
|
50
|
-
raise "Failed cheking out #{spec.name}" if !system(spec
|
50
|
+
raise "Failed cheking out #{spec.name}" if !system(git_hard_checkout_cmd(spec))
|
51
51
|
|
52
52
|
Dir.chdir(current_dir)
|
53
53
|
end
|
54
54
|
|
55
|
+
def self.git_hard_checkout_cmd(spec)
|
56
|
+
prefix = "git fetch --all --tags --prune; git reset --hard"
|
57
|
+
if @tag
|
58
|
+
return "#{prefix} tags/#{spec.tag}"
|
59
|
+
end
|
60
|
+
if @commit
|
61
|
+
return "#{prefix} #{spec.commit}"
|
62
|
+
end
|
63
|
+
if @branch
|
64
|
+
return "#{prefix} origin/#{spec.branch}"
|
65
|
+
end
|
66
|
+
|
67
|
+
return nil
|
68
|
+
end
|
69
|
+
|
55
70
|
def self.rewrite_lldinit
|
56
71
|
puts "Writing ~/.lldbinit-Xcode".yellow
|
57
72
|
|
@@ -14,6 +14,8 @@ module PodBuilder
|
|
14
14
|
"module_name": "GoogleMobileAds"
|
15
15
|
}
|
16
16
|
}.freeze
|
17
|
+
DEFAULT_SKIP_PODS = ["GoogleMaps"]
|
18
|
+
DEFAULT_FORCE_PREBUILD_PODS = ["Firebase"]
|
17
19
|
DEFAULT_BUILD_SYSTEM = "Legacy".freeze # either Latest (New build system) or Legacy (Standard build system)
|
18
20
|
MIN_LFS_SIZE_KB = 256.freeze
|
19
21
|
|
@@ -51,8 +53,8 @@ module PodBuilder
|
|
51
53
|
@base_path = "Frameworks" # Not nice. This value is used only for initial initization. Once config is loaded it will be an absolute path. FIXME
|
52
54
|
@spec_overrides = DEFAULT_SPEC_OVERRIDE
|
53
55
|
@skip_licenses = []
|
54
|
-
@skip_pods =
|
55
|
-
@force_prebuild_pods =
|
56
|
+
@skip_pods = DEFAULT_SKIP_PODS
|
57
|
+
@force_prebuild_pods = DEFAULT_FORCE_PREBUILD_PODS
|
56
58
|
@license_filename = "Pods-acknowledgements"
|
57
59
|
@subspecs_to_split = []
|
58
60
|
@development_pods_paths = []
|
data/lib/pod_builder/licenses.rb
CHANGED
@@ -10,10 +10,14 @@
|
|
10
10
|
dict = CFPropertyList.native_types(plist.value)
|
11
11
|
current_licenses = dict["PreferenceSpecifiers"]
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
13
|
+
if current_licenses.count > 0
|
14
|
+
licenses_header = current_licenses.shift
|
15
|
+
raise "Unexpected license found in header" if licenses_header.has_key?("License")
|
16
|
+
end
|
17
|
+
if current_licenses.count > 0
|
18
|
+
license_footer = current_licenses.pop
|
19
|
+
raise "Unexpected license found in footer" if license_footer.has_key?("License")
|
20
|
+
end
|
17
21
|
end
|
18
22
|
|
19
23
|
if licenses.count > 0
|
@@ -33,7 +37,7 @@
|
|
33
37
|
licenses.select! { |x| all_buildable_items.map(&:root_name).include?(x["Title"]) } # Remove items that are no longer included
|
34
38
|
|
35
39
|
license_dict = {}
|
36
|
-
license_dict["PreferenceSpecifiers"] = [licenses_header, licenses, license_footer].flatten
|
40
|
+
license_dict["PreferenceSpecifiers"] = [licenses_header, licenses, license_footer].compact.flatten
|
37
41
|
license_dict["StringsTable"] = "Acknowledgements"
|
38
42
|
license_dict["Title"] = license_dict["StringsTable"]
|
39
43
|
|
@@ -41,7 +45,9 @@
|
|
41
45
|
plist.value = CFPropertyList.guess(license_dict)
|
42
46
|
plist.save(license_file_path, CFPropertyList::List::FORMAT_BINARY)
|
43
47
|
|
44
|
-
|
48
|
+
if licenses.count > 0
|
49
|
+
write_markdown(license_file_path)
|
50
|
+
end
|
45
51
|
end
|
46
52
|
|
47
53
|
private
|
@@ -50,6 +56,7 @@
|
|
50
56
|
plist = CFPropertyList::List.new(:file => plist_path)
|
51
57
|
dict = CFPropertyList.native_types(plist.value)
|
52
58
|
licenses = dict["PreferenceSpecifiers"]
|
59
|
+
|
53
60
|
header = licenses.shift
|
54
61
|
|
55
62
|
markdown = []
|
data/lib/pod_builder/podfile.rb
CHANGED
@@ -147,20 +147,28 @@ module PodBuilder
|
|
147
147
|
prebuilt_lines = ["# Autogenerated by PodBuilder (https://github.com/Subito-it/PodBuilder)\n", "# Any change to this file should be done on #{rel_path}\n", "\n"]
|
148
148
|
podfile_content.each_line do |line|
|
149
149
|
stripped_line = strip_line(line)
|
150
|
+
if exclude_lines.include?(stripped_line)
|
151
|
+
next
|
152
|
+
end
|
150
153
|
|
151
154
|
if pod_name = pod_definition_in(line, true)
|
152
155
|
if podfile_item = all_buildable_items.detect { |x| x.name == pod_name }
|
153
156
|
if Podspec.include?(podfile_item.name)
|
154
|
-
if podfile_item.
|
155
|
-
|
157
|
+
if podfile_item.vendored_framework_path.nil?
|
158
|
+
marker = podfile_item.prebuilt_marker()
|
159
|
+
|
160
|
+
podfile_item_dependency_items = all_buildable_items.select { |x| podfile_item.dependency_names.include?(x.name) && x.vendored_framework_path.nil? == false }
|
161
|
+
prebuilt_lines += podfile_item_dependency_items.map { |x| "#{line.detect_indentation}#{x.prebuilt_entry(include_pb_entry = false)}#{marker}\n" }.uniq
|
162
|
+
else
|
163
|
+
prebuilt_lines.push("#{line.detect_indentation}#{podfile_item.prebuilt_entry}\n")
|
156
164
|
end
|
165
|
+
|
166
|
+
next
|
157
167
|
end
|
158
168
|
end
|
159
169
|
end
|
160
170
|
|
161
|
-
|
162
|
-
prebuilt_lines.push(line)
|
163
|
-
end
|
171
|
+
prebuilt_lines.push(line)
|
164
172
|
end
|
165
173
|
|
166
174
|
project_podfile_path = PodBuilder::project_path("Podfile")
|
@@ -278,12 +278,12 @@ module PodBuilder
|
|
278
278
|
swift_version = data["swift_version"]
|
279
279
|
is_static = data["is_static"] || false
|
280
280
|
|
281
|
-
e += "
|
281
|
+
e += "#{prebuilt_marker()} is<#{is_static}>"
|
282
282
|
if swift_version
|
283
283
|
e += " sv<#{swift_version}>"
|
284
284
|
end
|
285
285
|
else
|
286
|
-
e +=
|
286
|
+
e += prebuilt_marker()
|
287
287
|
end
|
288
288
|
end
|
289
289
|
|
@@ -314,12 +314,16 @@ module PodBuilder
|
|
314
314
|
end
|
315
315
|
|
316
316
|
if include_pb_entry && !is_prebuilt
|
317
|
-
entry +=
|
317
|
+
entry += prebuilt_marker()
|
318
318
|
end
|
319
319
|
|
320
320
|
return entry
|
321
321
|
end
|
322
322
|
|
323
|
+
def prebuilt_marker
|
324
|
+
return " # pb<#{name}>"
|
325
|
+
end
|
326
|
+
|
323
327
|
def has_subspec(named)
|
324
328
|
unless !is_subspec
|
325
329
|
return false
|
@@ -332,20 +336,27 @@ module PodBuilder
|
|
332
336
|
return root_name == named.split("/").first
|
333
337
|
end
|
334
338
|
|
335
|
-
def
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
if @commit
|
341
|
-
return "#{prefix} #{@commit}"
|
342
|
-
end
|
343
|
-
if @branch
|
344
|
-
return "#{prefix} origin/#{@branch}"
|
339
|
+
def vendored_framework_path
|
340
|
+
if File.exist?(PodBuilder::basepath(vendored_subspec_framework_path))
|
341
|
+
return vendored_subspec_framework_path
|
342
|
+
elsif File.exist?(PodBuilder::basepath(vendored_spec_framework_path))
|
343
|
+
return vendored_spec_framework_path
|
345
344
|
end
|
346
|
-
|
345
|
+
|
347
346
|
return nil
|
348
347
|
end
|
348
|
+
|
349
|
+
def vendored_subspec_framework_path
|
350
|
+
return "Rome/#{prebuilt_rel_path}"
|
351
|
+
end
|
352
|
+
|
353
|
+
def vendored_spec_framework_path
|
354
|
+
return "Rome/#{module_name}.framework"
|
355
|
+
end
|
356
|
+
|
357
|
+
def self.vendored_name_framework_path(name)
|
358
|
+
return "Rome/#{name}"
|
359
|
+
end
|
349
360
|
|
350
361
|
private
|
351
362
|
|
@@ -421,9 +432,15 @@ module PodBuilder
|
|
421
432
|
|
422
433
|
def spec_and_dependencies(spec, all_specs)
|
423
434
|
specs = all_specs.select { |x| spec.dependencies.map(&:name).include?(x.name) }
|
435
|
+
specs += all_specs.select { |x| spec.default_subspecs.include?(x.name.split("/").last) }
|
424
436
|
specs += [spec, spec.root]
|
437
|
+
|
438
|
+
all_remaining_specs = all_specs.reject { |x| specs.map(&:name).include?(x.name) }
|
439
|
+
if all_remaining_specs.count < all_specs.count
|
440
|
+
specs += specs.map { |x| spec_and_dependencies(x, all_remaining_specs) }
|
441
|
+
end
|
425
442
|
|
426
|
-
return specs.compact.uniq
|
443
|
+
return specs.flatten.compact.uniq
|
427
444
|
end
|
428
445
|
end
|
429
446
|
end
|
data/lib/pod_builder/podspec.rb
CHANGED
@@ -31,12 +31,10 @@ module PodBuilder
|
|
31
31
|
end
|
32
32
|
private_constant :PodspecItem
|
33
33
|
|
34
|
-
def self.generate(analyzer)
|
34
|
+
def self.generate(all_buildable_items, analyzer)
|
35
35
|
puts "Generating PodBuilder's local podspec".yellow
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
podspec_items = podspec_items_from(buildable_items)
|
36
|
+
|
37
|
+
podspec_items = podspec_items_from(all_buildable_items)
|
40
38
|
|
41
39
|
platform = analyzer.instance_variable_get("@result").targets.first.platform
|
42
40
|
generate_podspec_from(podspec_items, platform)
|
@@ -66,8 +64,8 @@ module PodBuilder
|
|
66
64
|
def self.generate_podspec_from(podspec_items, platform)
|
67
65
|
podspecs = []
|
68
66
|
podspec_items.each do |item|
|
69
|
-
vendored_frameworks = item.vendored_frameworks.map { |x| vendored_framework_path
|
70
|
-
vendored_frameworks += item.vendored_items.select { |x| File.exist?(PodBuilder::basepath(vendored_name_framework_path(x))) }.map { |x| "Rome/#{x}" }
|
67
|
+
vendored_frameworks = item.vendored_frameworks.map { |x| x.vendored_framework_path }.compact
|
68
|
+
vendored_frameworks += item.vendored_items.map { |x| File.basename(x) }.select { |x| File.exist?(PodBuilder::basepath(PodfileItem::vendored_name_framework_path(x))) }.map { |x| "Rome/#{x}" }
|
71
69
|
vendored_frameworks.uniq!
|
72
70
|
vendored_libraries = Dir.glob(PodBuilder::basepath("Rome/#{item.module_name}/**/*.a")).map { |x| x.to_s.gsub(PodBuilder::basepath, "")[1..-1] }
|
73
71
|
|
@@ -114,8 +112,8 @@ module PodBuilder
|
|
114
112
|
podspec_items = []
|
115
113
|
|
116
114
|
buildable_items.each do |pod|
|
117
|
-
spec_exists = File.exist?(PodBuilder::basepath(vendored_spec_framework_path
|
118
|
-
subspec_exists = File.exist?(PodBuilder::basepath(vendored_subspec_framework_path
|
115
|
+
spec_exists = File.exist?(PodBuilder::basepath(pod.vendored_spec_framework_path))
|
116
|
+
subspec_exists = File.exist?(PodBuilder::basepath(pod.vendored_subspec_framework_path))
|
119
117
|
|
120
118
|
unless spec_exists || subspec_exists
|
121
119
|
puts "Skipping `#{pod.name}`, not prebuilt".blue
|
@@ -138,10 +136,10 @@ module PodBuilder
|
|
138
136
|
podspec_item.libraries = podspec_item.vendored_frameworks.map { |x| x.libraries }.flatten.uniq.sort
|
139
137
|
|
140
138
|
static_vendored_frameworks = podspec_item.vendored_frameworks.select { |x| x.is_static }
|
141
|
-
|
142
|
-
podspec_item.resources = static_vendored_frameworks.map { |x|
|
143
|
-
podspec_item.exclude_files = static_vendored_frameworks.map { |x|
|
144
|
-
podspec_item.exclude_files += podspec_item.vendored_frameworks.map { |x|
|
139
|
+
|
140
|
+
podspec_item.resources = static_vendored_frameworks.map { |x| x.vendored_framework_path.nil? ? nil : "#{x.vendored_framework_path}/*.{nib,bundle,xcasset,strings,png,jpg,tif,tiff,otf,ttf,ttc,plist,json,caf,wav,p12,momd}" }.compact.flatten.uniq
|
141
|
+
podspec_item.exclude_files = static_vendored_frameworks.map { |x| x.vendored_framework_path.nil? ? nil : "#{x.vendored_framework_path}/Info.plist" }.compact.flatten.uniq
|
142
|
+
podspec_item.exclude_files += podspec_item.vendored_frameworks.map { |x| x.vendored_framework_path.nil? ? nil : "#{x.vendored_framework_path}/#{Configuration.framework_plist_filename}" }.compact.flatten.uniq.sort
|
145
143
|
|
146
144
|
# Merge xcconfigs
|
147
145
|
if !pod.xcconfig.empty?
|
@@ -166,27 +164,5 @@ module PodBuilder
|
|
166
164
|
|
167
165
|
return podspec_items
|
168
166
|
end
|
169
|
-
|
170
|
-
def self.vendored_framework_path(pod)
|
171
|
-
if File.exist?(PodBuilder::basepath(vendored_subspec_framework_path(pod)))
|
172
|
-
return vendored_subspec_framework_path(pod)
|
173
|
-
elsif File.exist?(PodBuilder::basepath(vendored_spec_framework_path(pod)))
|
174
|
-
return vendored_spec_framework_path(pod)
|
175
|
-
end
|
176
|
-
|
177
|
-
return nil
|
178
|
-
end
|
179
|
-
|
180
|
-
def self.vendored_subspec_framework_path(pod)
|
181
|
-
return "Rome/#{pod.prebuilt_rel_path}"
|
182
|
-
end
|
183
|
-
|
184
|
-
def self.vendored_spec_framework_path(pod)
|
185
|
-
return "Rome/#{pod.module_name}.framework"
|
186
|
-
end
|
187
|
-
|
188
|
-
def self.vendored_name_framework_path(name)
|
189
|
-
return "Rome/#{name}"
|
190
|
-
end
|
191
167
|
end
|
192
168
|
end
|
data/lib/pod_builder/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pod-builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomas Camin
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-12-
|
11
|
+
date: 2019-12-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|