pod-builder 2.1.0 → 3.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 +4 -4
- data/README.md +11 -6
- data/lib/pod_builder/command/build.rb +26 -3
- data/lib/pod_builder/configuration.rb +35 -24
- data/lib/pod_builder/install.rb +9 -0
- data/lib/pod_builder/podfile.rb +7 -7
- data/lib/pod_builder/podfile_item.rb +17 -6
- data/lib/pod_builder/podspec.rb +6 -2
- data/lib/pod_builder/rome/post_install.rb +41 -14
- data/lib/pod_builder/templates/build_podfile.template +1 -1
- 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: 0dada31dddd8303f3429e7ebbb13665f6c1e8b4d66ad618795971c652ecb3f7b
|
4
|
+
data.tar.gz: 290cdba5a29f1672372057f28ec9a867dcba0172b97b1e4c7a6a0cc2a83b6aed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f0af1cd519bdea4f141c374853c631bfb46813ae0c2caad40d92c7716fbc941e9f5dc4772b6358c368b76840937478fe75f3cb3c4df2508b7593ac527c582ebf
|
7
|
+
data.tar.gz: 3087670122ad1420438ac6944056e11858b62752aa7b1749b0b4411515d4ceacc80178b045027da3fcfe2404ad33b44be3ab5de64dd1b689fbd5753988783eff
|
data/README.md
CHANGED
@@ -280,9 +280,17 @@ Like `build_settings` but per pod. Pod name can also refer to subspec.
|
|
280
280
|
|
281
281
|
Specify which build system to use to compile frameworks. Either `Legacy` (standard build system) or `Latest` (new build system). Default value: `Latest`.
|
282
282
|
|
283
|
-
#### `
|
283
|
+
#### `build_xcframeworks_all`
|
284
284
|
|
285
|
-
Specify if PodBuilder
|
285
|
+
Specify if PodBuilder should build all pods as .xcframeworks. Will enable `library_evolution_support`. Default value: false
|
286
|
+
|
287
|
+
#### `build_xcframeworks_exclude`
|
288
|
+
|
289
|
+
Specify which pods PodBuilder should NOT be built as .xcframeworks when `build_xcframeworks_all` is true. Default value: []
|
290
|
+
|
291
|
+
#### `build_xcframeworks_include`
|
292
|
+
|
293
|
+
Specify which pods PodBuilder should be built as .xcframeworks. Will enable `library_evolution_support`. Default value: []
|
286
294
|
|
287
295
|
#### `library_evolution_support`
|
288
296
|
|
@@ -327,11 +335,8 @@ The podspec of the Pod you're trying to build doesn't specify the swift_version
|
|
327
335
|
|
328
336
|
```json
|
329
337
|
"spec_overrides": {
|
330
|
-
"Google-Mobile-Ads-SDK": {
|
331
|
-
"module_name": "GoogleMobileAds"
|
332
|
-
},
|
333
338
|
"PodWithError": {
|
334
|
-
"swift_version": "5.
|
339
|
+
"swift_version": "5.3"
|
335
340
|
}
|
336
341
|
}
|
337
342
|
```
|
@@ -63,9 +63,21 @@ module PodBuilder
|
|
63
63
|
pods_to_build_debug = pods_to_build.select { |x| x.build_configuration == "debug" }
|
64
64
|
pods_to_build_release = pods_to_build - pods_to_build_debug
|
65
65
|
|
66
|
+
pods_to_build_debug_xcframework = pods_to_build_debug.select { |x| x.build_xcframework }
|
67
|
+
pods_to_build_debug -= pods_to_build_debug_xcframework
|
68
|
+
|
69
|
+
pods_to_build_release_xcframework = pods_to_build_release.select { |x| x.build_xcframework }
|
70
|
+
pods_to_build_release -= pods_to_build_release_xcframework
|
71
|
+
|
66
72
|
check_dependencies_build_configurations(all_buildable_items)
|
67
73
|
|
68
|
-
|
74
|
+
# When building mixed framwork/xcframeworks pods xcframeworks should be built last
|
75
|
+
# so that the .xcframework overwrite the .framwork if the same pod needs to be built
|
76
|
+
# in both ways.
|
77
|
+
# For example we might have configured to build onlt PodA as xcframework, another pod
|
78
|
+
# PodB has a dependency to PodA. When Building PodB, PodA gets rebuilt as .framework
|
79
|
+
# but then PodA gets rebuilt again as .xcframework overwriting the .framework.
|
80
|
+
podfiles_items = [pods_to_build_debug] + [pods_to_build_release] + [pods_to_build_debug_xcframework] + [pods_to_build_release_xcframework]
|
69
81
|
|
70
82
|
install_using_frameworks = Podfile::install_using_frameworks(analyzer)
|
71
83
|
if Configuration.react_native_project
|
@@ -79,16 +91,18 @@ module PodBuilder
|
|
79
91
|
end
|
80
92
|
end
|
81
93
|
|
94
|
+
build_catalyst = should_build_catalyst(installer)
|
95
|
+
|
82
96
|
install_result = InstallResult.new
|
83
97
|
podfiles_items.reject { |x| x.empty? }.each do |podfile_items|
|
84
98
|
build_configuration = podfile_items.map(&:build_configuration).uniq.first
|
85
99
|
|
86
100
|
podfile_items = podfile_items.map { |t| t.recursive_dependencies(all_buildable_items) }.flatten.uniq
|
87
|
-
|
101
|
+
|
102
|
+
podfile_content = Podfile.from_podfile_items(podfile_items, analyzer, build_configuration, install_using_frameworks, build_catalyst, podfile_items.first.build_xcframework)
|
88
103
|
|
89
104
|
install_result += Install.podfile(podfile_content, podfile_items, podfile_items.first.build_configuration)
|
90
105
|
|
91
|
-
# remove lockfile which gets unexplicably created
|
92
106
|
FileUtils.rm_f(PodBuilder::basepath("Podfile.lock"))
|
93
107
|
end
|
94
108
|
|
@@ -124,6 +138,15 @@ module PodBuilder
|
|
124
138
|
|
125
139
|
private
|
126
140
|
|
141
|
+
def self.should_build_catalyst(installer)
|
142
|
+
build_settings = installer.analysis_result.targets.map { |t| t.user_project.root_object.targets.map { |u| u.build_configuration_list.build_configurations.map { |v| v.build_settings } } }.flatten
|
143
|
+
build_catalyst = build_settings.detect { |t| t["SUPPORTS_MACCATALYST"] == "YES" } != nil
|
144
|
+
|
145
|
+
puts "\nTo support Catalyst you should enable 'build_xcframeworks' in PodBuilder.json\n".red if build_catalyst && !Configuration.build_xcframeworks
|
146
|
+
|
147
|
+
return build_catalyst
|
148
|
+
end
|
149
|
+
|
127
150
|
def self.prepare_defines_modules_override(all_buildable_items)
|
128
151
|
all_buildable_items.each do |item|
|
129
152
|
unless item.defines_module.nil?
|
@@ -39,19 +39,10 @@ module PodBuilder
|
|
39
39
|
"ENABLE_BITCODE": "NO"
|
40
40
|
}
|
41
41
|
}.freeze
|
42
|
-
DEFAULT_SKIP_PODS = ["GoogleMaps", "React-RCTFabric", "React-Core", "React-CoreModules"] # Not including React-RCTNetwork might loose some debug warnings
|
43
|
-
|
44
|
-
DEFAULT_FORCE_PREBUILD_PODS = []
|
45
|
-
DEFAULT_BUILD_SYSTEM = "Latest".freeze # either Latest (New build system) or Legacy (Standard build system)
|
46
|
-
DEFAULT_LIBRARY_EVOLUTION_SUPPORT = false
|
47
|
-
DEFAULT_PLATFORMS = ["iphoneos", "iphonesimulator", "appletvos", "appletvsimulator"].freeze
|
48
|
-
DEFAULT_BUILD_USING_REPO_PATHS = false
|
49
|
-
DEFAULT_BUILD_XCFRAMEWORKS = false
|
50
42
|
|
51
43
|
private_constant :DEFAULT_BUILD_SETTINGS
|
52
44
|
private_constant :DEFAULT_BUILD_SETTINGS_OVERRIDES
|
53
|
-
private_constant :
|
54
|
-
private_constant :DEFAULT_LIBRARY_EVOLUTION_SUPPORT
|
45
|
+
private_constant :DEFAULT_SPEC_OVERRIDE
|
55
46
|
|
56
47
|
class <<self
|
57
48
|
attr_accessor :allow_building_development_pods
|
@@ -81,19 +72,22 @@ module PodBuilder
|
|
81
72
|
attr_accessor :build_using_repo_paths
|
82
73
|
attr_accessor :react_native_project
|
83
74
|
attr_accessor :lldbinit_name
|
84
|
-
attr_accessor :
|
75
|
+
attr_accessor :build_xcframeworks_all
|
76
|
+
attr_accessor :build_xcframeworks_include
|
77
|
+
attr_accessor :build_xcframeworks_exclude
|
85
78
|
end
|
86
|
-
|
87
|
-
@allow_building_development_pods = false
|
79
|
+
|
88
80
|
@build_settings = DEFAULT_BUILD_SETTINGS
|
89
81
|
@build_settings_overrides = DEFAULT_BUILD_SETTINGS_OVERRIDES
|
90
|
-
@build_system = DEFAULT_BUILD_SYSTEM
|
91
|
-
@library_evolution_support = DEFAULT_LIBRARY_EVOLUTION_SUPPORT
|
92
|
-
@base_path = "PodBuilder" # Not nice. This value is used only for initial initization. Once config is loaded it will be an absolute path. FIXME
|
93
82
|
@spec_overrides = DEFAULT_SPEC_OVERRIDE
|
83
|
+
|
84
|
+
@allow_building_development_pods = false
|
85
|
+
@build_system = "Latest".freeze # either Latest (New build system) or Legacy (Standard build system)
|
86
|
+
@library_evolution_support = false
|
87
|
+
@base_path = "PodBuilder" # Not nice. This value is used only for initial initization. Once config is loaded it will be an absolute path. FIXME
|
94
88
|
@skip_licenses = []
|
95
|
-
@skip_pods =
|
96
|
-
@force_prebuild_pods =
|
89
|
+
@skip_pods = ["GoogleMaps", "React-RCTFabric", "React-Core", "React-CoreModules"] # Not including React-RCTNetwork might loose some debug warnings
|
90
|
+
@force_prebuild_pods = []
|
97
91
|
@license_filename = "Pods-acknowledgements"
|
98
92
|
@development_pods_paths = []
|
99
93
|
@build_base_path = "/tmp/pod_builder".freeze
|
@@ -110,11 +104,13 @@ module PodBuilder
|
|
110
104
|
@use_bundler = false
|
111
105
|
@deterministic_build = false
|
112
106
|
|
113
|
-
@supported_platforms =
|
114
|
-
@build_using_repo_paths =
|
107
|
+
@supported_platforms = ["iphoneos", "iphonesimulator", "appletvos", "appletvsimulator"].freeze
|
108
|
+
@build_using_repo_paths = false
|
115
109
|
@react_native_project = false
|
116
110
|
|
117
|
-
@
|
111
|
+
@build_xcframeworks_all = false
|
112
|
+
@build_xcframeworks_include = []
|
113
|
+
@build_xcframeworks_exclude = []
|
118
114
|
|
119
115
|
def self.check_inited
|
120
116
|
raise "\n\nNot inited, run `pod_builder init`\n".red if podbuilder_path.nil?
|
@@ -218,12 +214,22 @@ module PodBuilder
|
|
218
214
|
Configuration.react_native_project = value
|
219
215
|
end
|
220
216
|
end
|
221
|
-
if value = json["
|
217
|
+
if value = json["build_xcframeworks_all"]
|
222
218
|
if [TrueClass, FalseClass].include?(value.class)
|
223
|
-
Configuration.
|
219
|
+
Configuration.build_xcframeworks_all = value
|
224
220
|
end
|
225
221
|
end
|
226
|
-
|
222
|
+
if value = json["build_xcframeworks_include"]
|
223
|
+
if value.is_a?(Array)
|
224
|
+
Configuration.build_xcframeworks_include = value
|
225
|
+
end
|
226
|
+
end
|
227
|
+
if value = json["build_xcframeworks_exclude"]
|
228
|
+
if value.is_a?(Array)
|
229
|
+
Configuration.build_xcframeworks_exclude = value
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
227
233
|
Configuration.build_settings.freeze
|
228
234
|
|
229
235
|
sanity_check()
|
@@ -279,6 +285,11 @@ module PodBuilder
|
|
279
285
|
puts "PodBuilder.json contains '#{pod}' both in `force_prebuild_pods` and `skip_pods`. Will force prebuilding.".yellow
|
280
286
|
end
|
281
287
|
end
|
288
|
+
if Configuration.build_xcframeworks_all
|
289
|
+
raise "Invalid PodBuilder.json configuration: 'build_xcframeworks_all' is true and 'build_xcframeworks_include' is not empty" if Configuration.build_xcframeworks_include.count > 0
|
290
|
+
else
|
291
|
+
raise "Invalid PodBuilder.json configuration: 'build_xcframeworks_all' is false and 'build_xcframeworks_exclude' is not empty" if Configuration.build_xcframeworks_exclude.count > 0
|
292
|
+
end
|
282
293
|
end
|
283
294
|
|
284
295
|
def self.config_path
|
data/lib/pod_builder/install.rb
CHANGED
@@ -379,6 +379,7 @@ module PodBuilder
|
|
379
379
|
pod_names.each do |pod_name|
|
380
380
|
root_name = pod_name.split("/").first
|
381
381
|
|
382
|
+
# Remove existing files
|
382
383
|
items_to_delete = Dir.glob("#{PodBuilder::prebuiltpath(root_name)}/**/*")
|
383
384
|
items_to_delete.each { |t| PodBuilder::safe_rm_rf(t) }
|
384
385
|
end
|
@@ -393,6 +394,14 @@ module PodBuilder
|
|
393
394
|
next
|
394
395
|
end
|
395
396
|
|
397
|
+
if podfile_item = podfile_items.detect { |t| t.root_name == pod_name }
|
398
|
+
if Dir.glob("#{source_path}/**/Modules/**/*.swiftmodule/*.swiftinterface").count > 0
|
399
|
+
# We can safely remove .swiftmodule if .swiftinterface exists
|
400
|
+
swiftmodule_files = Dir.glob("#{source_path}/**/Modules/**/*.swiftmodule/*.swiftmodule")
|
401
|
+
swiftmodule_files.each { |t| PodBuilder::safe_rm_rf(t) }
|
402
|
+
end
|
403
|
+
end
|
404
|
+
|
396
405
|
unless Dir.glob("#{source_path}/**/*").select { |t| File.file?(t) }.empty?
|
397
406
|
destination_folder = PodBuilder::prebuiltpath(root_name)
|
398
407
|
FileUtils.mkdir_p(destination_folder)
|
data/lib/pod_builder/podfile.rb
CHANGED
@@ -5,7 +5,7 @@ module PodBuilder
|
|
5
5
|
|
6
6
|
PRE_INSTALL_ACTIONS = ["Pod::Installer::Xcode::TargetValidator.send(:define_method, :verify_no_duplicate_framework_and_library_names) {}", "require 'pod_builder/podfile/pre_actions_swizzles'"].freeze
|
7
7
|
|
8
|
-
def self.from_podfile_items(items, analyzer, build_configuration, install_using_frameworks, build_xcframeworks)
|
8
|
+
def self.from_podfile_items(items, analyzer, build_configuration, install_using_frameworks, build_catalyst, build_xcframeworks)
|
9
9
|
raise "\n\nno items".red unless items.count > 0
|
10
10
|
|
11
11
|
sources = analyzer.sources
|
@@ -18,7 +18,8 @@ module PodBuilder
|
|
18
18
|
podfile.sub!("%%%use_frameworks%%%", install_using_frameworks ? "use_frameworks!" : "use_modular_headers!")
|
19
19
|
podfile.sub!("%%%uses_frameworks%%%", install_using_frameworks ? "true" : "false")
|
20
20
|
podfile.sub!("%%%build_xcframeworks%%%", build_xcframeworks ? "true" : "false")
|
21
|
-
|
21
|
+
podfile.sub!("%%%build_catalyst%%%", build_catalyst ? "true" : "false")
|
22
|
+
|
22
23
|
podfile.sub!("%%%platform_name%%%", platform.name.to_s)
|
23
24
|
podfile.sub!("%%%deployment_version%%%", platform.deployment_target.version)
|
24
25
|
|
@@ -40,6 +41,9 @@ module PodBuilder
|
|
40
41
|
build_settings["ONLY_ACTIVE_ARCH"] = "NO"
|
41
42
|
build_settings["DEBUG_INFORMATION_FORMAT"] = "dwarf-with-dsym"
|
42
43
|
|
44
|
+
# https://thi.imhttps://thi.im/posts/swift-serialize-debugging-options/
|
45
|
+
build_settings["SWIFT_SERIALIZE_DEBUGGING_OPTIONS"] = "NO"
|
46
|
+
|
43
47
|
build_settings["IPHONEOS_DEPLOYMENT_TARGET"] = platform.deployment_target.version # Fix compilation warnings on Xcode 12
|
44
48
|
|
45
49
|
# Don't store .pcm info in binary, see https://forums.swift.org/t/swift-behavior-of-gmodules-and-dsyms/23211/3
|
@@ -56,11 +60,7 @@ module PodBuilder
|
|
56
60
|
|
57
61
|
if Configuration.build_system == "Legacy"
|
58
62
|
build_settings["BUILD_LIBRARY_FOR_DISTRIBUTION"] = "NO"
|
59
|
-
|
60
|
-
elsif Configuration.library_evolution_support
|
61
|
-
build_settings["BUILD_LIBRARY_FOR_DISTRIBUTION"] = "YES"
|
62
|
-
end
|
63
|
-
if Configuration.build_xcframeworks
|
63
|
+
elsif Configuration.library_evolution_support || item.build_xcframework
|
64
64
|
build_settings["BUILD_LIBRARY_FOR_DISTRIBUTION"] = "YES"
|
65
65
|
end
|
66
66
|
|
@@ -103,27 +103,27 @@ module PodBuilder
|
|
103
103
|
#
|
104
104
|
attr_accessor :libraries
|
105
105
|
|
106
|
-
# @return [String]
|
106
|
+
# @return [String] Source_files
|
107
107
|
#
|
108
108
|
attr_accessor :source_files
|
109
109
|
|
110
|
-
# @return [String]
|
110
|
+
# @return [String] License
|
111
111
|
#
|
112
112
|
attr_accessor :license
|
113
113
|
|
114
|
-
# @return [String]
|
114
|
+
# @return [String] Summary
|
115
115
|
#
|
116
116
|
attr_accessor :summary
|
117
117
|
|
118
|
-
# @return [Hash]
|
118
|
+
# @return [Hash] Source
|
119
119
|
#
|
120
120
|
attr_accessor :source
|
121
121
|
|
122
|
-
# @return [Hash]
|
122
|
+
# @return [Hash] Authors
|
123
123
|
#
|
124
124
|
attr_accessor :authors
|
125
125
|
|
126
|
-
# @return [String]
|
126
|
+
# @return [String] Homepage
|
127
127
|
#
|
128
128
|
attr_accessor :homepage
|
129
129
|
|
@@ -134,6 +134,10 @@ module PodBuilder
|
|
134
134
|
# @return [Bool] Defines module
|
135
135
|
#
|
136
136
|
attr_accessor :defines_module
|
137
|
+
|
138
|
+
# @return [Bool] Should build as xcframework
|
139
|
+
#
|
140
|
+
attr_accessor :build_xcframework
|
137
141
|
|
138
142
|
# Initialize a new instance
|
139
143
|
#
|
@@ -235,6 +239,13 @@ module PodBuilder
|
|
235
239
|
@source = spec.root.attributes_hash.fetch("source", { "git"=>"https://github.com/Subito-it/PodBuilder.git" })
|
236
240
|
@authors = spec.root.attributes_hash.fetch("authors", {"PodBuilder"=>"pod@podbuilder.com"})
|
237
241
|
@homepage = spec.root.attributes_hash.fetch("homepage", "https://github.com/Subito-it/PodBuilder")
|
242
|
+
|
243
|
+
if Configuration.build_xcframeworks_all
|
244
|
+
build_as_xcframework = !Configuration.build_xcframeworks_exclude.include?(@root_name)
|
245
|
+
else
|
246
|
+
build_as_xcframework = Configuration.build_xcframeworks_include.include?(@root_name)
|
247
|
+
end
|
248
|
+
@build_xcframework = build_as_xcframework
|
238
249
|
end
|
239
250
|
|
240
251
|
def pod_specification(all_poditems, parent_spec = nil)
|
data/lib/pod_builder/podspec.rb
CHANGED
@@ -53,7 +53,11 @@ module PodBuilder
|
|
53
53
|
resources = []
|
54
54
|
exclude_files = []
|
55
55
|
vendored_frameworks.each do |vendored_framework|
|
56
|
-
|
56
|
+
if vendored_framework.end_with?(".xcframework")
|
57
|
+
binary_path = Dir.glob(PodBuilder::prebuiltpath("#{item.root_name}/#{vendored_framework}/**/#{File.basename(vendored_framework, ".*")}")).reject { |t| t.include?("simulator") }.first
|
58
|
+
else
|
59
|
+
binary_path = Dir.glob(PodBuilder::prebuiltpath("#{item.root_name}/#{vendored_framework}/**/#{File.basename(vendored_framework, ".*")}")).first
|
60
|
+
end
|
57
61
|
|
58
62
|
next if binary_path.nil?
|
59
63
|
|
@@ -182,7 +186,7 @@ module PodBuilder
|
|
182
186
|
subspec_base = name.split("/").first(slash_count).join("/")
|
183
187
|
subspec_items = all_buildable_items.select { |t| t.name.start_with?("#{subspec_base}/") }
|
184
188
|
|
185
|
-
subspec_names = subspec_items.map { |t| t.name.split("/").drop(slash_count).
|
189
|
+
subspec_names = subspec_items.map { |t| t.name.split("/").drop(slash_count).first }.uniq
|
186
190
|
subspec_names.map! { |t| "#{subspec_base}/#{t}" }
|
187
191
|
|
188
192
|
subspec_names.each do |subspec|
|
@@ -3,6 +3,28 @@ require 'colored'
|
|
3
3
|
require 'pathname'
|
4
4
|
|
5
5
|
module PodBuilder
|
6
|
+
class XcodeBuildSettings
|
7
|
+
attr_reader :platform_name
|
8
|
+
attr_reader :build_destination
|
9
|
+
attr_reader :configuration
|
10
|
+
|
11
|
+
def initialize(platform_name, configuration)
|
12
|
+
@platform_name = platform_name
|
13
|
+
@configuration = configuration
|
14
|
+
|
15
|
+
case platform_name
|
16
|
+
when "iphoneos" then @build_destination = "generic/platform=iOS"
|
17
|
+
when "iphonesimulator" then @build_destination = "generic/platform=iOS Simulator"
|
18
|
+
when "catalyst" then @build_destination = "platform=macOS,arch=x86_64,variant=Mac Catalyst"
|
19
|
+
when "macos" then @build_destination = "generic/platform=OS X"
|
20
|
+
when "tvos" then @build_destination = "generic/platform=tvOS"
|
21
|
+
when "tvossimulator" then @build_destination = "generic/platform=tvOS Simulator"
|
22
|
+
when "watchos" then @build_destination = "generic/platform=watchOS"
|
23
|
+
when "watchossimulator" then @build_destination = "generic/platform=watchOS Simulator"
|
24
|
+
else raise "\n\nUnknown platform '#{platform_name}'".red end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
6
28
|
def self.build_for_iosish_platform_framework(sandbox, build_dir, target, device, simulator, configuration, deterministic_build)
|
7
29
|
dsym_device_folder = File.join(build_dir, "dSYM", device)
|
8
30
|
dsym_simulator_folder = File.join(build_dir, "dSYM", simulator)
|
@@ -269,6 +291,7 @@ Pod::HooksManager.register('podbuilder-rome', :post_install) do |installer_conte
|
|
269
291
|
if user_options["pre_compile"]
|
270
292
|
user_options["pre_compile"].call(installer_context)
|
271
293
|
end
|
294
|
+
build_catalyst = user_options.fetch('build_catalyst', false)
|
272
295
|
build_xcframeworks = user_options.fetch('build_xcframeworks', false)
|
273
296
|
|
274
297
|
prebuilt_root_paths = JSON.parse(user_options["prebuilt_root_paths"].gsub('=>', ':'))
|
@@ -291,23 +314,27 @@ Pod::HooksManager.register('podbuilder-rome', :post_install) do |installer_conte
|
|
291
314
|
project_path = sandbox_root.parent + 'Pods/Pods.xcodeproj'
|
292
315
|
|
293
316
|
case target.platform_name
|
294
|
-
when :ios then
|
295
|
-
|
296
|
-
|
297
|
-
|
317
|
+
when :ios then
|
318
|
+
xcodebuild_settings = [PodBuilder::XcodeBuildSettings.new("iphoneos", configuration), PodBuilder::XcodeBuildSettings.new("iphonesimulator", configuration)]
|
319
|
+
if build_catalyst
|
320
|
+
xcodebuild_settings += [PodBuilder::XcodeBuildSettings.new("catalyst", configuration)]
|
321
|
+
end
|
322
|
+
when :osx then xcodebuild_settings = [PodBuilder::XcodeBuildSettings.new("macos", configuration)]
|
323
|
+
when :tvos then xcodebuild_settings = [PodBuilder::XcodeBuildSettings.new("tvos", configuration), PodBuilder::XcodeBuildSettings.new("tvossimulator", configuration)]
|
324
|
+
when :watchos then xcodebuild_settings = [PodBuilder::XcodeBuildSettings.new("watchos", configuration), PodBuilder::XcodeBuildSettings.new("watchossimulator", configuration)]
|
298
325
|
else raise "\n\nUnknown platform '#{target.platform_name}'".red end
|
299
326
|
|
300
|
-
|
301
|
-
puts "Building xcframeworks for #{
|
302
|
-
raise "\n\n#{
|
327
|
+
xcodebuild_settings.each do |xcodebuild_setting|
|
328
|
+
puts "Building xcframeworks for #{xcodebuild_setting.platform_name}".yellow
|
329
|
+
raise "\n\n#{build_destination} xcframework archive failed!".red if !system("xcodebuild archive -project #{project_path.to_s} -scheme Pods-DummyTarget -configuration #{xcodebuild_setting.configuration} -destination '#{xcodebuild_setting.build_destination}' -archivePath '#{build_dir}/#{xcodebuild_setting.platform_name}' SKIP_INSTALL=NO > /dev/null 2>&1")
|
303
330
|
end
|
304
331
|
|
305
|
-
built_items = Dir.glob("#{build_dir}/#{
|
332
|
+
built_items = Dir.glob("#{build_dir}/#{xcodebuild_settings[0].platform_name}.xcarchive/Products/Library/Frameworks/*").reject { |t| File.basename(t, ".*") == "Pods_DummyTarget" }
|
306
333
|
|
307
334
|
built_items.each do |built_item|
|
308
335
|
built_item_paths = [built_item]
|
309
|
-
|
310
|
-
path = "#{build_dir}/#{
|
336
|
+
xcodebuild_settings.drop(1).each do |xcodebuild_setting|
|
337
|
+
path = "#{build_dir}/#{xcodebuild_setting.platform_name}.xcarchive/Products/Library/Frameworks/#{File.basename(built_item)}"
|
311
338
|
if File.directory?(path)
|
312
339
|
built_item_paths.push(path)
|
313
340
|
else
|
@@ -321,16 +348,16 @@ Pod::HooksManager.register('podbuilder-rome', :post_install) do |installer_conte
|
|
321
348
|
framework_name = File.basename(built_item_paths.first, ".*")
|
322
349
|
xcframework_path = "#{base_destination}/#{framework_name}/#{framework_name}.xcframework"
|
323
350
|
framework_params = built_item_paths.map { |t| "-framework '#{t}'"}.join(" ")
|
324
|
-
raise "\n\nFailed packing xcframework!".red if !system("xcodebuild -create-xcframework #{framework_params} -output '#{xcframework_path}' > /dev/null")
|
351
|
+
raise "\n\nFailed packing xcframework!".red if !system("xcodebuild -create-xcframework #{framework_params} -output '#{xcframework_path}' > /dev/null 2>&1")
|
325
352
|
|
326
353
|
if enable_dsym
|
327
|
-
|
328
|
-
dsym_source = "#{build_dir}/#{
|
354
|
+
xcodebuild_settings.each do |xcodebuild_setting|
|
355
|
+
dsym_source = "#{build_dir}/#{xcodebuild_setting.platform_name}.xcarchive/dSYMs/"
|
329
356
|
if File.directory?(dsym_source)
|
330
357
|
destination = sandbox_root.parent + "dSYMs"
|
331
358
|
FileUtils.mkdir_p(destination)
|
332
359
|
FileUtils.mv(dsym_source, destination)
|
333
|
-
FileUtils.mv("#{destination}/dSYMs", "#{destination}/#{
|
360
|
+
FileUtils.mv("#{destination}/dSYMs", "#{destination}/#{xcodebuild_setting.platform_name}")
|
334
361
|
end
|
335
362
|
end
|
336
363
|
else
|
@@ -4,7 +4,7 @@ require 'cfpropertylist'
|
|
4
4
|
|
5
5
|
%%%use_frameworks%%%
|
6
6
|
|
7
|
-
plugin 'podbuilder-rome', { dsym: true, configuration: '%%%build_configuration%%%', uses_frameworks: %%%uses_frameworks%%%, build_xcframeworks: %%%build_xcframeworks%%%, prebuilt_root_paths: '%%%prebuilt_root_paths%%%', pre_compile: Proc.new { |installer|
|
7
|
+
plugin 'podbuilder-rome', { dsym: true, configuration: '%%%build_configuration%%%', uses_frameworks: %%%uses_frameworks%%%, build_catalyst: %%%build_catalyst%%%, build_xcframeworks: %%%build_xcframeworks%%%, prebuilt_root_paths: '%%%prebuilt_root_paths%%%', pre_compile: Proc.new { |installer|
|
8
8
|
|
9
9
|
def set_build_settings(target_name, build_configurations, installer)
|
10
10
|
installer.pods_project.targets.each do |target|
|
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:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomas Camin
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|