pod-builder 3.2.0 → 3.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +16 -0
- data/lib/pod_builder/analyze.rb +12 -13
- data/lib/pod_builder/command/build.rb +34 -1
- data/lib/pod_builder/command/deintegrate.rb +11 -9
- data/lib/pod_builder/command/init.rb +3 -2
- data/lib/pod_builder/command/install_sources.rb +9 -11
- data/lib/pod_builder/command/switch.rb +8 -3
- data/lib/pod_builder/command/sync_podfile.rb +11 -11
- data/lib/pod_builder/configuration.rb +8 -0
- data/lib/pod_builder/core.rb +1 -0
- data/lib/pod_builder/install.rb +10 -5
- data/lib/pod_builder/podfile.rb +12 -6
- data/lib/pod_builder/post_actions.rb +46 -0
- data/lib/pod_builder/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0cdcd16503f8c363779e6b63a2a7c7ff66cc867a2092c65fb3a8bcb66758cfb
|
4
|
+
data.tar.gz: 199fc74359e90c198cac6e8c5c1ea1e172ae93ffe584ccccf5c8d324cda0f761
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 42587bceee70997a3a91ab5428945e9e98094500ceafca8a7de957fb60784e9e2bc84d9f823fa7c00866c5910e651aa48ad7b200924163a1d9879df241fcd541
|
7
|
+
data.tar.gz: 60f520d51741fbff7d7216d018266182f4786a5b77c7eec21495d5199752edd850dbafaecd9644217d5bfb7643e41cce88d94b09c271372af2602846cd19db5a
|
data/README.md
CHANGED
@@ -324,6 +324,22 @@ PodBuilder writes a plist and markdown license files of pods specified in the Po
|
|
324
324
|
|
325
325
|
If you use bundler to pin the version of CocoaPods in your project set this to true. Default false.
|
326
326
|
|
327
|
+
#### `post_actions`
|
328
|
+
|
329
|
+
Post actions allow to execute custom scripts after a given command (`switch`, `build`) has been performed.
|
330
|
+
|
331
|
+
You need to specify a `path` to the executable script which is relative to the _PodBuilder_ folder. Optionally you can also specify whether the command should or should not print the output to stdout/stderr by passing a bool to the `quiet` key (default: false).
|
332
|
+
|
333
|
+
```json
|
334
|
+
{
|
335
|
+
"post_actions": {
|
336
|
+
"switch" : { "path": "post_switch_action.rb", "quiet": true },
|
337
|
+
"build" : { "path": "post_buil_action.rb", "quiet": false }
|
338
|
+
}
|
339
|
+
}
|
340
|
+
```
|
341
|
+
|
342
|
+
|
327
343
|
|
328
344
|
# Behind the scenes
|
329
345
|
|
data/lib/pod_builder/analyze.rb
CHANGED
@@ -17,19 +17,18 @@ module PodBuilder
|
|
17
17
|
CLAide::Command::PluginManager.loaded_plugins["cocoapods"].push(pluginspec)
|
18
18
|
end
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
Dir.chdir(current_dir)
|
20
|
+
installer = nil
|
21
|
+
analyzer = nil
|
22
|
+
Dir.chdir(path) do
|
23
|
+
config = Pod::Config.new()
|
24
|
+
installer = Pod::Installer.new(config.sandbox, config.podfile, config.lockfile)
|
25
|
+
installer.repo_update = repo_update
|
26
|
+
installer.update = false
|
27
|
+
|
28
|
+
installer.prepare
|
29
|
+
|
30
|
+
analyzer = installer.resolve_dependencies
|
31
|
+
end
|
33
32
|
|
34
33
|
return installer, analyzer
|
35
34
|
end
|
@@ -147,6 +147,8 @@ module PodBuilder
|
|
147
147
|
puts "\n\n⚠️ Podfile.restore was found invalid and was overwritten. Error:\n #{restore_file_error}".red
|
148
148
|
end
|
149
149
|
|
150
|
+
Configuration.post_actions[:build]&.execute()
|
151
|
+
|
150
152
|
puts "\n\n🎉 done!\n".green
|
151
153
|
return 0
|
152
154
|
end
|
@@ -154,7 +156,38 @@ module PodBuilder
|
|
154
156
|
private
|
155
157
|
|
156
158
|
def self.should_build_catalyst(installer)
|
157
|
-
|
159
|
+
integrate_targets = installer.podfile.installation_options.integrate_targets
|
160
|
+
|
161
|
+
# NOTE:
|
162
|
+
# When `integrate_targets` is false,
|
163
|
+
# `user_project` is nil and Build Settings cannot be collected,
|
164
|
+
# so collect Build Settings from xcodeproj and root xcodeproj defined in the Podfile
|
165
|
+
# ref:
|
166
|
+
# https://github.com/Subito-it/PodBuilder/issues/39
|
167
|
+
#
|
168
|
+
if integrate_targets
|
169
|
+
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
|
170
|
+
else
|
171
|
+
# Find all `xcodeproj` in Podfile
|
172
|
+
user_projects_build_settings = installer.analysis_result.targets.map { |t|
|
173
|
+
user_project_path = PodBuilder.basepath + '/' + t.target_definition.user_project_path
|
174
|
+
project = Xcodeproj::Project.open(user_project_path)
|
175
|
+
project.root_object.targets.map { |u| u.build_configuration_list.build_configurations.map { |v| v.build_settings } }
|
176
|
+
}
|
177
|
+
.flatten
|
178
|
+
.compact
|
179
|
+
|
180
|
+
# Find root `xcodeproj`
|
181
|
+
project = Xcodeproj::Project.open(PodBuilder.find_xcodeproj)
|
182
|
+
root_project_build_setting = project
|
183
|
+
.root_object
|
184
|
+
.targets
|
185
|
+
.map { |u| u.build_configuration_list.build_configurations.map { |v| v.build_settings } }
|
186
|
+
.flatten
|
187
|
+
|
188
|
+
build_settings = user_projects_build_settings | root_project_build_setting
|
189
|
+
end
|
190
|
+
|
158
191
|
build_catalyst = build_settings.detect { |t| t["SUPPORTS_MACCATALYST"] == "YES" } != nil
|
159
192
|
|
160
193
|
puts "\nTo support Catalyst you should enable 'build_xcframeworks' in PodBuilder.json\n".red if build_catalyst && !Configuration.build_xcframeworks_all
|
@@ -43,15 +43,16 @@ module PodBuilder
|
|
43
43
|
|
44
44
|
PodBuilder::safe_rm_rf(Configuration.base_path)
|
45
45
|
|
46
|
-
Dir.chdir(PodBuilder::project_path)
|
47
|
-
|
48
|
-
|
46
|
+
Dir.chdir(PodBuilder::project_path) do
|
47
|
+
bundler_prefix = Configuration.use_bundler ? "bundle exec " : ""
|
48
|
+
system("#{bundler_prefix}pod install;")
|
49
49
|
|
50
|
-
|
51
|
-
|
52
|
-
|
50
|
+
license_base = PodBuilder::project_path(Configuration.license_filename)
|
51
|
+
FileUtils.rm_f("#{license_base}.plist")
|
52
|
+
FileUtils.rm_f("#{license_base}.md")
|
53
53
|
|
54
|
-
|
54
|
+
update_gemfile
|
55
|
+
end
|
55
56
|
|
56
57
|
puts "\n\n🎉 done!\n".green
|
57
58
|
return 0
|
@@ -89,8 +90,9 @@ module PodBuilder
|
|
89
90
|
gemfile_lines.select! { |x| !trim_gemfile_line(x).include?(trim_gemfile_line(podbuilder_line)) }
|
90
91
|
File.write(gemfile_path, gemfile_lines.join("\n"))
|
91
92
|
|
92
|
-
Dir.chdir(PodBuilder::home)
|
93
|
-
|
93
|
+
Dir.chdir(PodBuilder::home) do
|
94
|
+
system("bundle")
|
95
|
+
end
|
94
96
|
end
|
95
97
|
|
96
98
|
def self.trim_gemfile_line(line)
|
@@ -110,8 +110,9 @@ module PodBuilder
|
|
110
110
|
|
111
111
|
File.write(gemfile_path, gemfile_lines.join("\n"))
|
112
112
|
|
113
|
-
Dir.chdir(PodBuilder::home)
|
114
|
-
|
113
|
+
Dir.chdir(PodBuilder::home) do
|
114
|
+
system("bundle")
|
115
|
+
end
|
115
116
|
end
|
116
117
|
|
117
118
|
def self.trim_gemfile_line(line)
|
@@ -45,19 +45,17 @@ module PodBuilder
|
|
45
45
|
dest_path = PodBuilder::basepath("Sources")
|
46
46
|
FileUtils.mkdir_p(dest_path)
|
47
47
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
raise "\n\nFailed cloning #{spec.name}".red if !system("git clone #{spec.repo} #{spec.podspec_name}")
|
48
|
+
Dir.chdir(dest_path) do
|
49
|
+
repo_dir = File.join(dest_path, spec.podspec_name)
|
50
|
+
if !File.directory?(repo_dir)
|
51
|
+
raise "\n\nFailed cloning #{spec.name}".red if !system("git clone #{spec.repo} #{spec.podspec_name}")
|
52
|
+
end
|
54
53
|
end
|
55
54
|
|
56
|
-
Dir.chdir(repo_dir)
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
Dir.chdir(current_dir)
|
55
|
+
Dir.chdir(repo_dir) do
|
56
|
+
puts "Checking out #{spec.podspec_name}".yellow
|
57
|
+
raise "\n\nFailed cheking out #{spec.name}".red if !system(git_hard_checkout_cmd(spec))
|
58
|
+
end
|
61
59
|
end
|
62
60
|
|
63
61
|
def self.git_hard_checkout_cmd(spec)
|
@@ -195,9 +195,14 @@ module PodBuilder
|
|
195
195
|
File.write(podfile_path, lines.join)
|
196
196
|
end
|
197
197
|
|
198
|
-
Dir.chdir(PodBuilder::project_path)
|
199
|
-
|
200
|
-
|
198
|
+
Dir.chdir(PodBuilder::project_path) do
|
199
|
+
bundler_prefix = Configuration.use_bundler ? "bundle exec " : ""
|
200
|
+
system("#{bundler_prefix}pod install;")
|
201
|
+
end
|
202
|
+
|
203
|
+
Configuration.post_actions[:switch]&.execute()
|
204
|
+
|
205
|
+
puts "\n\n🎉 done!\n".green
|
201
206
|
|
202
207
|
return 0
|
203
208
|
end
|
@@ -12,17 +12,17 @@ module PodBuilder
|
|
12
12
|
|
13
13
|
all_buildable_items = Analyze.podfile_items(installer, analyzer)
|
14
14
|
|
15
|
-
Dir.chdir(PodBuilder::project_path)
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
15
|
+
Dir.chdir(PodBuilder::project_path) do
|
16
|
+
previous_podfile_content = File.read("Podfile")
|
17
|
+
Podfile::write_prebuilt(all_buildable_items, analyzer)
|
18
|
+
updated_podfile_content = File.read("Podfile")
|
19
|
+
|
20
|
+
Licenses::write([], all_buildable_items)
|
21
|
+
|
22
|
+
if previous_podfile_content != updated_podfile_content
|
23
|
+
bundler_prefix = Configuration.use_bundler ? "bundle exec " : ""
|
24
|
+
system("#{bundler_prefix}pod install;")
|
25
|
+
end
|
26
26
|
end
|
27
27
|
|
28
28
|
puts "\n\n🎉 done!\n".green
|
@@ -75,6 +75,7 @@ module PodBuilder
|
|
75
75
|
attr_accessor :build_xcframeworks_all
|
76
76
|
attr_accessor :build_xcframeworks_include
|
77
77
|
attr_accessor :build_xcframeworks_exclude
|
78
|
+
attr_accessor :post_actions
|
78
79
|
end
|
79
80
|
|
80
81
|
@build_settings = DEFAULT_BUILD_SETTINGS
|
@@ -111,6 +112,8 @@ module PodBuilder
|
|
111
112
|
@build_xcframeworks_all = false
|
112
113
|
@build_xcframeworks_include = []
|
113
114
|
@build_xcframeworks_exclude = []
|
115
|
+
|
116
|
+
@post_actions = {}
|
114
117
|
|
115
118
|
def self.check_inited
|
116
119
|
raise "\n\nNot inited, run `pod_builder init`\n".red if podbuilder_path.nil?
|
@@ -229,6 +232,11 @@ module PodBuilder
|
|
229
232
|
Configuration.build_xcframeworks_exclude = value
|
230
233
|
end
|
231
234
|
end
|
235
|
+
if value = json["post_actions"]
|
236
|
+
if value.is_a?(Hash)
|
237
|
+
Configuration.post_actions = PodBuilder::PostActions.load(value)
|
238
|
+
end
|
239
|
+
end
|
232
240
|
|
233
241
|
Configuration.build_settings.freeze
|
234
242
|
|
data/lib/pod_builder/core.rb
CHANGED
data/lib/pod_builder/install.rb
CHANGED
@@ -424,6 +424,13 @@ module PodBuilder
|
|
424
424
|
end
|
425
425
|
end
|
426
426
|
|
427
|
+
# Cleanup unneeded files (see https://github.com/bazelbuild/rules_apple/pull/1113)
|
428
|
+
ignore_files = Dir.glob(["#{source_path}/**/Modules/**/*.swiftmodule/*.swiftdoc", "#{source_path}/**/Modules/**/*.swiftmodule/**/*.swiftsourceinfo"])
|
429
|
+
ignore_files.each { |t| PodBuilder::safe_rm_rf(t) }
|
430
|
+
|
431
|
+
project_folder = Dir.glob("#{source_path}/**/Modules/**/*.swiftmodule/Project")
|
432
|
+
project_folder.select { |t| File.directory?(t) && Dir.empty?(t) }.each { |t| PodBuilder::safe_rm_rf(t) }
|
433
|
+
|
427
434
|
unless Dir.glob("#{source_path}/**/*").select { |t| File.file?(t) }.empty?
|
428
435
|
destination_folder = PodBuilder::prebuiltpath(root_name)
|
429
436
|
FileUtils.mkdir_p(destination_folder)
|
@@ -447,11 +454,9 @@ module PodBuilder
|
|
447
454
|
end
|
448
455
|
|
449
456
|
def self.init_git(path)
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
system("git init")
|
454
|
-
Dir.chdir(current_dir)
|
457
|
+
Dir.chdir(path) do
|
458
|
+
system("git init")
|
459
|
+
end
|
455
460
|
end
|
456
461
|
|
457
462
|
def self.build_folder_hash_in_prebuilt_info_file(podfile_item)
|
data/lib/pod_builder/podfile.rb
CHANGED
@@ -34,7 +34,7 @@ module PodBuilder
|
|
34
34
|
items.each do |item|
|
35
35
|
build_settings = Configuration.build_settings.dup
|
36
36
|
|
37
|
-
item_build_settings = Configuration.build_settings_overrides[item.name] || {}
|
37
|
+
item_build_settings = Configuration.build_settings_overrides[item.name].dup || {}
|
38
38
|
|
39
39
|
# These settings need to be set as is to properly build frameworks
|
40
40
|
build_settings["SWIFT_COMPILATION_MODE"] = "wholemodule"
|
@@ -46,10 +46,6 @@ module PodBuilder
|
|
46
46
|
|
47
47
|
build_settings["IPHONEOS_DEPLOYMENT_TARGET"] = platform.deployment_target.version # Fix compilation warnings on Xcode 12
|
48
48
|
|
49
|
-
# Don't store .pcm info in binary, see https://forums.swift.org/t/swift-behavior-of-gmodules-and-dsyms/23211/3
|
50
|
-
build_settings["CLANG_ENABLE_MODULE_DEBUGGING"] = "NO"
|
51
|
-
build_settings["OTHER_SWIFT_FLAGS"] = "$(inherited) -Xfrontend -no-clang-module-breadcrumbs"
|
52
|
-
|
53
49
|
# Ignore deprecation warnings
|
54
50
|
build_settings["GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS"] = "NO"
|
55
51
|
|
@@ -70,10 +66,20 @@ module PodBuilder
|
|
70
66
|
build_settings["BITCODE_GENERATION_MODE"] = "bitcode"
|
71
67
|
end
|
72
68
|
|
69
|
+
# Don't store .pcm info in binary, see https://forums.swift.org/t/swift-behavior-of-gmodules-and-dsyms/23211/3
|
70
|
+
build_settings["CLANG_ENABLE_MODULE_DEBUGGING"] = "NO"
|
71
|
+
other_swift_flags_override = " $(inherited) -Xfrontend -no-clang-module-breadcrumbs"
|
72
|
+
|
73
73
|
item_build_settings.each do |k, v|
|
74
|
-
|
74
|
+
# Do not allow to override above settings which are mandatory for a correct compilation
|
75
|
+
if build_settings[k].nil?
|
76
|
+
build_settings[k] = v
|
77
|
+
end
|
75
78
|
end
|
76
79
|
|
80
|
+
# All the below settings should be merged with global (Configuration.build_settings) or per pod build_settings (Configuration.build_settings_overrides)
|
81
|
+
build_settings["OTHER_SWIFT_FLAGS"] = build_settings.fetch("OTHER_SWIFT_FLAGS", "") + other_swift_flags_override
|
82
|
+
|
77
83
|
podfile_build_settings += "set_build_settings(\"#{item.root_name}\", #{build_settings.to_s}, installer)\n "
|
78
84
|
|
79
85
|
dependency_names = item.dependency_names.map { |x|
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'pod_builder/core'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module PodBuilder
|
5
|
+
module PostActions
|
6
|
+
def self.load(hash)
|
7
|
+
actions = {}
|
8
|
+
if json = hash["switch"]
|
9
|
+
actions[:switch] = Item.new("switch", json)
|
10
|
+
end
|
11
|
+
if json = hash["build"]
|
12
|
+
actions[:build] = Item.new("build", json)
|
13
|
+
end
|
14
|
+
|
15
|
+
return actions
|
16
|
+
end
|
17
|
+
|
18
|
+
class Item
|
19
|
+
attr_reader :path
|
20
|
+
attr_reader :quiet
|
21
|
+
attr_reader :name
|
22
|
+
|
23
|
+
def initialize(name, hash)
|
24
|
+
@name = name
|
25
|
+
@path = hash.fetch("path", "")
|
26
|
+
@quiet = hash.fetch("quiet", false)
|
27
|
+
|
28
|
+
raise "\n\nEmpty or missing post #{name} action path\n".red if @path.empty?()
|
29
|
+
end
|
30
|
+
|
31
|
+
def execute()
|
32
|
+
cmd = PodBuilder::basepath(path)
|
33
|
+
unless File.exist?(cmd)
|
34
|
+
raise "\n\nPost #{name} action path '#{cmd}' does not exists!\n".red
|
35
|
+
end
|
36
|
+
|
37
|
+
if @quiet
|
38
|
+
cmd += " > /dev/null 2>&1"
|
39
|
+
end
|
40
|
+
|
41
|
+
puts "Executing post #{name} action".yellow
|
42
|
+
`#{cmd}`
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
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: 3.
|
4
|
+
version: 3.3.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: 2021-
|
11
|
+
date: 2021-06-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -208,6 +208,7 @@ files:
|
|
208
208
|
- lib/pod_builder/podfile_cp.rb
|
209
209
|
- lib/pod_builder/podfile_item.rb
|
210
210
|
- lib/pod_builder/podspec.rb
|
211
|
+
- lib/pod_builder/post_actions.rb
|
211
212
|
- lib/pod_builder/rome/post_install.rb
|
212
213
|
- lib/pod_builder/rome/pre_install.rb
|
213
214
|
- lib/pod_builder/templates/build_podfile.template
|