cocoapods-binary-cache 0.1.8 → 0.1.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/cocoapods-binary-cache/helper/podspec.rb +0 -1
- data/lib/cocoapods-binary-cache/hooks/post_install.rb +0 -11
- data/lib/cocoapods-binary-cache/main.rb +0 -1
- data/lib/cocoapods-binary-cache/pod-binary/helper/build.rb +5 -6
- data/lib/cocoapods-binary-cache/pod-binary/integration/patch/source_installation.rb +23 -9
- data/lib/cocoapods-binary-cache/pod-binary/integration/source_installer.rb +20 -16
- data/lib/cocoapods-binary-cache/pod-binary/prebuild.rb +17 -18
- data/lib/cocoapods-binary-cache/pod-rome/xcodebuild_command.rb +50 -53
- data/lib/cocoapods-binary-cache/pod-rome/xcodebuild_raw.rb +15 -16
- data/lib/command/config.rb +6 -0
- data/lib/command/executor/base.rb +2 -1
- data/lib/command/executor/prebuilder.rb +2 -0
- data/lib/command/prebuild.rb +2 -0
- metadata +2 -4
- data/lib/cocoapods-binary-cache/helper/prebuild_order.rb +0 -12
- data/lib/cocoapods-binary-cache/scheme_editor.rb +0 -36
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ffcf342c1552381e28baebabf84a328ee30b744beb832740d04b3125be23f2fe
|
4
|
+
data.tar.gz: 77d55d695ad65749fe94d2238361ac76b290e7f6873ceec2286b9020f236f804
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00c13ec5a3bbc3df1ea0071cb1a90a91a85eb9a75f8a33853a5b60c4fcaf85dd6c5e3ac8aaaf0a6db6ceeb8e27d19bc6c5ede34b3d68e93cdeb4db2e808233b4
|
7
|
+
data.tar.gz: a39d29b292d9878fd808fb3aa61c7ae6c1b323b132dfa30810c71d32e3d6089cf80109f23fc1c4f57399df1d187c102ef78f23847ff97635b513a7f42a735702
|
@@ -5,7 +5,6 @@ module PodPrebuild
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def run
|
8
|
-
edit_scheme_for_code_coverage if PodPrebuild::Env.prebuild_stage?
|
9
8
|
diagnose if PodPrebuild::Env.integration_stage?
|
10
9
|
end
|
11
10
|
|
@@ -20,15 +19,5 @@ module PodPrebuild
|
|
20
19
|
).run
|
21
20
|
end
|
22
21
|
end
|
23
|
-
|
24
|
-
def edit_scheme_for_code_coverage
|
25
|
-
return unless PodPrebuild.config.dev_pods_enabled?
|
26
|
-
return unless @installer_context.sandbox.instance_of?(Pod::PrebuildSandbox)
|
27
|
-
|
28
|
-
# Modify pods scheme to support code coverage
|
29
|
-
# If we don't prebuild dev pod -> no need to care about this in Pod project
|
30
|
-
# because we setup in the main project (ex. DriverCI scheme)
|
31
|
-
SchemeEditor.edit_to_support_code_coverage(@installer_context.sandbox)
|
32
|
-
end
|
33
22
|
end
|
34
23
|
end
|
@@ -4,26 +4,25 @@ require_relative "../../pod-rome/xcodebuild_command"
|
|
4
4
|
module Pod
|
5
5
|
class Prebuild
|
6
6
|
def self.build(options)
|
7
|
-
|
8
|
-
return if
|
7
|
+
targets = options[:targets] || []
|
8
|
+
return if targets.empty?
|
9
9
|
|
10
|
-
Pod::UI.puts "Building target: #{target}...".magenta
|
11
10
|
options[:sandbox] = Pod::Sandbox.new(Pathname(options[:sandbox])) unless options[:sandbox].is_a?(Pod::Sandbox)
|
12
11
|
options[:build_dir] = build_dir(options[:sandbox].root)
|
13
12
|
|
14
|
-
case
|
13
|
+
case targets[0].platform.name
|
15
14
|
when :ios, :tvos, :watchos
|
16
15
|
XcodebuildCommand.new(options).run
|
17
16
|
when :osx
|
18
17
|
xcodebuild(
|
19
18
|
sandbox: options[:sandbox],
|
20
|
-
|
19
|
+
targets: targets,
|
21
20
|
configuration: options[:configuration],
|
22
21
|
sdk: "macosx",
|
23
22
|
args: options[:args]
|
24
23
|
)
|
25
24
|
else
|
26
|
-
raise "Unsupported platform for '#{
|
25
|
+
raise "Unsupported platform for '#{targets[0].name}': '#{targets[0].platform.name}'"
|
27
26
|
end
|
28
27
|
raise "The build directory was not found in the expected location" unless options[:build_dir].directory?
|
29
28
|
end
|
@@ -3,17 +3,31 @@ require_relative "../source_installer"
|
|
3
3
|
module Pod
|
4
4
|
class Installer
|
5
5
|
# Override the download step to skip download and prepare file in target folder
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
if should_integrate_prebuilt_pod?(pod_name)
|
11
|
-
pod_installer.install_for_prebuild!(sandbox)
|
6
|
+
alias original_create_pod_installer create_pod_installer
|
7
|
+
def create_pod_installer(name)
|
8
|
+
if should_integrate_prebuilt_pod?(name)
|
9
|
+
create_prebuilt_source_installer(name)
|
12
10
|
else
|
13
|
-
|
11
|
+
create_normal_source_installer(name)
|
14
12
|
end
|
15
|
-
|
16
|
-
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def create_normal_source_installer(name)
|
18
|
+
original_create_pod_installer(name)
|
19
|
+
end
|
20
|
+
|
21
|
+
def create_prebuilt_source_installer(name)
|
22
|
+
source_installer = PodSourceInstaller.new(sandbox, podfile, specs_for_pod(name))
|
23
|
+
pod_installer = PrebuiltSourceInstaller.new(
|
24
|
+
sandbox,
|
25
|
+
podfile,
|
26
|
+
specs_for_pod(name),
|
27
|
+
source_installer: source_installer
|
28
|
+
)
|
29
|
+
pod_installers << pod_installer
|
30
|
+
pod_installer
|
17
31
|
end
|
18
32
|
|
19
33
|
def should_integrate_prebuilt_pod?(name)
|
@@ -1,21 +1,27 @@
|
|
1
|
-
# NOTE:
|
2
|
-
# This file will only be loaded on normal pod install step
|
3
|
-
# so there's no need to check is_prebuild_stage
|
4
|
-
|
5
|
-
# Provide a special "download" process for prebuilded pods.
|
6
|
-
#
|
7
|
-
# As the frameworks is already exsited in local folder. We
|
8
|
-
# just create a symlink to the original target folder.
|
9
|
-
#
|
10
1
|
module Pod
|
11
2
|
class Installer
|
12
|
-
class PodSourceInstaller
|
13
|
-
def
|
14
|
-
|
3
|
+
class PrebuiltSourceInstaller < PodSourceInstaller
|
4
|
+
def initialize(*args, **kwargs)
|
5
|
+
@source_installer = kwargs.delete(:source_installer)
|
6
|
+
super(*args, **kwargs)
|
7
|
+
end
|
8
|
+
|
9
|
+
def prebuild_sandbox
|
10
|
+
@prebuild_sandbox ||= Pod::PrebuildSandbox.from_standard_sandbox(sandbox)
|
11
|
+
end
|
12
|
+
|
13
|
+
def install!
|
14
|
+
@source_installer.install! if PodPrebuild.config.still_download_sources?(name)
|
15
|
+
install_prebuilt_framework!
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def install_prebuilt_framework!
|
21
|
+
return if !PodPrebuild.config.dev_pods_enabled? && sandbox.local?(name)
|
15
22
|
|
16
23
|
# make a symlink to target folder
|
17
24
|
# TODO (bang): Unify to 1 sandbox to optimize and avoid inconsistency
|
18
|
-
prebuild_sandbox = Pod::PrebuildSandbox.from_standard_sandbox(standard_sanbox)
|
19
25
|
# if spec used in multiple platforms, it may return multiple paths
|
20
26
|
target_names = prebuild_sandbox.existed_target_names_for_pod_name(name)
|
21
27
|
target_names.each do |name|
|
@@ -24,7 +30,7 @@ module Pod
|
|
24
30
|
# If have only one platform, just place int the root folder of this pod.
|
25
31
|
# If have multiple paths, we use a sperated folder to store different
|
26
32
|
# platform frameworks. e.g. AFNetworking/AFNetworking-iOS/AFNetworking.framework
|
27
|
-
target_folder =
|
33
|
+
target_folder = sandbox.pod_dir(self.name)
|
28
34
|
target_folder += real_file_folder.basename if target_names.count > 1
|
29
35
|
target_folder += PodPrebuild.config.prebuilt_path
|
30
36
|
target_folder.rmtree if target_folder.exist?
|
@@ -73,8 +79,6 @@ module Pod
|
|
73
79
|
end
|
74
80
|
end
|
75
81
|
|
76
|
-
private
|
77
|
-
|
78
82
|
def walk(path, &action)
|
79
83
|
return unless path.exist?
|
80
84
|
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require "fileutils"
|
2
2
|
require_relative "../prebuild_output/output"
|
3
3
|
require_relative "../helper/lockfile"
|
4
|
-
require_relative "../helper/prebuild_order"
|
5
4
|
require_relative "helper/target_checker"
|
6
5
|
require_relative "helper/build"
|
7
6
|
|
@@ -38,27 +37,27 @@ module Pod
|
|
38
37
|
def prebuild_frameworks!
|
39
38
|
existed_framework_folder = sandbox.generate_framework_path
|
40
39
|
sandbox_path = sandbox.root
|
40
|
+
targets = targets_to_prebuild
|
41
|
+
Pod::UI.puts "Prebuild frameworks (total #{targets.count}): #{targets.map(&:name)}".magenta
|
41
42
|
|
42
|
-
targets = PodPrebuild::BuildOrder.order_targets(targets_to_prebuild)
|
43
|
-
Pod::UI.puts "Prebuild frameworks (total #{targets.count}): #{targets.map(&:name)}"
|
44
|
-
Pod::Prebuild.remove_build_dir(sandbox_path)
|
45
43
|
run_code_gen!(targets)
|
44
|
+
|
45
|
+
Pod::Prebuild.remove_build_dir(sandbox_path)
|
46
|
+
Pod::Prebuild.build(
|
47
|
+
sandbox: sandbox_path,
|
48
|
+
targets: targets,
|
49
|
+
configuration: PodPrebuild.config.prebuild_config,
|
50
|
+
output_path: sandbox.generate_framework_path,
|
51
|
+
bitcode_enabled: PodPrebuild.config.bitcode_enabled?,
|
52
|
+
device_build_enabled: PodPrebuild.config.device_build_enabled?,
|
53
|
+
disable_dsym: PodPrebuild.config.disable_dsym?,
|
54
|
+
args: PodPrebuild.config.build_args
|
55
|
+
)
|
56
|
+
Pod::Prebuild.remove_build_dir(sandbox_path)
|
57
|
+
|
46
58
|
targets.each do |target|
|
47
|
-
|
48
|
-
output_path.mkpath unless output_path.exist?
|
49
|
-
Pod::Prebuild.build(
|
50
|
-
sandbox: sandbox_path,
|
51
|
-
target: target,
|
52
|
-
configuration: PodPrebuild.config.prebuild_config,
|
53
|
-
output_path: output_path,
|
54
|
-
bitcode_enabled: PodPrebuild.config.bitcode_enabled?,
|
55
|
-
device_build_enabled: PodPrebuild.config.device_build_enabled?,
|
56
|
-
disable_dsym: PodPrebuild.config.disable_dsym?,
|
57
|
-
args: PodPrebuild.config.build_args
|
58
|
-
)
|
59
|
-
collect_metadata(target, output_path)
|
59
|
+
collect_metadata(target, sandbox.framework_folder_path_for_target_name(target.name))
|
60
60
|
end
|
61
|
-
Pod::Prebuild.remove_build_dir(sandbox_path)
|
62
61
|
|
63
62
|
# copy vendored libraries and frameworks
|
64
63
|
targets.each do |target|
|
@@ -3,7 +3,7 @@ require_relative "xcodebuild_raw"
|
|
3
3
|
class XcodebuildCommand # rubocop:disable Metrics/ClassLength
|
4
4
|
def initialize(options)
|
5
5
|
@options = options
|
6
|
-
case options[:
|
6
|
+
case options[:targets][0].platform.name
|
7
7
|
when :ios
|
8
8
|
@options[:device] = "iphoneos"
|
9
9
|
@options[:simulator] = "iphonesimulator"
|
@@ -21,16 +21,18 @@ class XcodebuildCommand # rubocop:disable Metrics/ClassLength
|
|
21
21
|
build_for_sdk(simulator) if build_types.include?(:simulator)
|
22
22
|
build_for_sdk(device) if build_types.include?(:device)
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
24
|
+
targets.each do |target|
|
25
|
+
case build_types
|
26
|
+
when [:simulator]
|
27
|
+
collect_output(target, Dir[target_products_dir_of(target, simulator) + "/*"])
|
28
|
+
when [:device]
|
29
|
+
collect_output(target, Dir[target_products_dir_of(target, device) + "/*"])
|
30
|
+
else
|
31
|
+
# When merging contents of `simulator` & `device`, prefer contents of `device` over `simulator`
|
32
|
+
# https://github.com/grab/cocoapods-binary-cache/issues/25
|
33
|
+
collect_output(target, Dir[target_products_dir_of(target, device) + "/*"])
|
34
|
+
create_universal_framework(target)
|
35
|
+
end
|
34
36
|
end
|
35
37
|
end
|
36
38
|
|
@@ -59,40 +61,34 @@ class XcodebuildCommand # rubocop:disable Metrics/ClassLength
|
|
59
61
|
end
|
60
62
|
|
61
63
|
def build_for_sdk(sdk)
|
62
|
-
|
63
|
-
if Dir.exist?(framework_path)
|
64
|
-
Pod::UI.puts_indented "--> Framework already exists at: #{framework_path}"
|
65
|
-
return
|
66
|
-
end
|
67
|
-
|
68
|
-
succeeded, = xcodebuild(
|
64
|
+
xcodebuild(
|
69
65
|
sandbox: sandbox,
|
70
|
-
|
66
|
+
scheme: scheme,
|
67
|
+
targets: targets.map(&:label),
|
71
68
|
configuration: configuration,
|
72
69
|
sdk: sdk,
|
73
|
-
deployment_target:
|
70
|
+
deployment_target: targets.map { |t| t.platform.deployment_target }.max.to_s,
|
74
71
|
args: sdk == simulator ? @build_args[:simulator] : @build_args[:device]
|
75
72
|
)
|
76
|
-
raise "Build framework failed: #{target.label}" unless succeeded
|
77
73
|
end
|
78
74
|
|
79
|
-
def create_universal_framework
|
80
|
-
merge_framework_binary
|
81
|
-
merge_framework_dsym
|
82
|
-
merge_swift_headers
|
83
|
-
merge_swift_modules
|
75
|
+
def create_universal_framework(target)
|
76
|
+
merge_framework_binary(target)
|
77
|
+
merge_framework_dsym(target)
|
78
|
+
merge_swift_headers(target)
|
79
|
+
merge_swift_modules(target)
|
84
80
|
end
|
85
81
|
|
86
|
-
def merge_framework_binary
|
87
|
-
merge_contents("/#{
|
82
|
+
def merge_framework_binary(target)
|
83
|
+
merge_contents(target, "/#{target.product_module_name}", &method(:create_fat_binary))
|
88
84
|
end
|
89
85
|
|
90
|
-
def merge_framework_dsym
|
91
|
-
merge_contents(".dSYM/Contents/Resources/DWARF/#{
|
86
|
+
def merge_framework_dsym(target)
|
87
|
+
merge_contents(target, ".dSYM/Contents/Resources/DWARF/#{target.product_module_name}", &method(:create_fat_binary))
|
92
88
|
end
|
93
89
|
|
94
|
-
def merge_swift_headers
|
95
|
-
merge_contents("/Headers/#{
|
90
|
+
def merge_swift_headers(target)
|
91
|
+
merge_contents(target, "/Headers/#{target.product_module_name}-Swift.h") do |options|
|
96
92
|
merged_header = <<~HEREDOC
|
97
93
|
#if TARGET_OS_SIMULATOR // merged by cocoapods-binary
|
98
94
|
#{File.read(options[:simulator])}
|
@@ -104,19 +100,19 @@ class XcodebuildCommand # rubocop:disable Metrics/ClassLength
|
|
104
100
|
end
|
105
101
|
end
|
106
102
|
|
107
|
-
def merge_swift_modules
|
108
|
-
merge_contents("/Modules/#{
|
103
|
+
def merge_swift_modules(target)
|
104
|
+
merge_contents(target, "/Modules/#{target.product_module_name}.swiftmodule") do |options|
|
109
105
|
# Note: swiftmodules of `device` were copied beforehand,
|
110
106
|
# here, we only need to copy swiftmodules of `simulator`
|
111
107
|
FileUtils.cp_r(options[:simulator] + "/.", options[:output])
|
112
108
|
end
|
113
109
|
end
|
114
110
|
|
115
|
-
def merge_contents(path_suffix, &merger)
|
111
|
+
def merge_contents(target, path_suffix, &merger)
|
116
112
|
simulator_, device_, output_ = [
|
117
|
-
framework_path_of(simulator),
|
118
|
-
framework_path_of(device),
|
119
|
-
"#{output_path}/#{
|
113
|
+
framework_path_of(target, simulator),
|
114
|
+
framework_path_of(target, device),
|
115
|
+
"#{output_path(target)}/#{target.product_module_name}.framework"
|
120
116
|
].map { |p| p + path_suffix }
|
121
117
|
return unless File.exist?(simulator_) && File.exist?(device_)
|
122
118
|
|
@@ -127,27 +123,24 @@ class XcodebuildCommand # rubocop:disable Metrics/ClassLength
|
|
127
123
|
cmd = ["lipo", " -create"]
|
128
124
|
cmd << "-output" << options[:output]
|
129
125
|
cmd << options[:simulator] << options[:device]
|
130
|
-
|
126
|
+
`#{cmd.join(" ")}`
|
131
127
|
end
|
132
128
|
|
133
|
-
def collect_output(paths)
|
129
|
+
def collect_output(target, paths)
|
130
|
+
FileUtils.mkdir_p(output_path(target))
|
134
131
|
paths = [paths] unless paths.is_a?(Array)
|
135
132
|
paths.each do |path|
|
136
|
-
FileUtils.rm_rf(File.join(output_path, File.basename(path)))
|
137
|
-
FileUtils.cp_r(path, output_path)
|
133
|
+
FileUtils.rm_rf(File.join(output_path(target), File.basename(path)))
|
134
|
+
FileUtils.cp_r(path, output_path(target))
|
138
135
|
end
|
139
136
|
end
|
140
137
|
|
141
|
-
def target_products_dir_of(sdk)
|
138
|
+
def target_products_dir_of(target, sdk)
|
142
139
|
"#{build_dir}/#{configuration}-#{sdk}/#{target.name}"
|
143
140
|
end
|
144
141
|
|
145
|
-
def framework_path_of(sdk)
|
146
|
-
"#{target_products_dir_of(sdk)}/#{
|
147
|
-
end
|
148
|
-
|
149
|
-
def module_name
|
150
|
-
target.product_module_name
|
142
|
+
def framework_path_of(target, sdk)
|
143
|
+
"#{target_products_dir_of(target, sdk)}/#{target.product_module_name}.framework"
|
151
144
|
end
|
152
145
|
|
153
146
|
def sandbox
|
@@ -158,12 +151,16 @@ class XcodebuildCommand # rubocop:disable Metrics/ClassLength
|
|
158
151
|
@options[:build_dir]
|
159
152
|
end
|
160
153
|
|
161
|
-
def output_path
|
162
|
-
@options[:output_path]
|
154
|
+
def output_path(target)
|
155
|
+
"#{@options[:output_path]}/#{target.label}"
|
156
|
+
end
|
157
|
+
|
158
|
+
def scheme
|
159
|
+
@options[:scheme]
|
163
160
|
end
|
164
161
|
|
165
|
-
def
|
166
|
-
@options[:
|
162
|
+
def targets
|
163
|
+
@options[:targets]
|
167
164
|
end
|
168
165
|
|
169
166
|
def configuration
|
@@ -8,36 +8,35 @@ PLATFORM_OF_SDK = {
|
|
8
8
|
|
9
9
|
def xcodebuild(options)
|
10
10
|
sdk = options[:sdk] || "iphonesimulator"
|
11
|
+
targets = options[:targets] || [options[:target]]
|
11
12
|
platform = PLATFORM_OF_SDK[sdk]
|
12
13
|
|
13
14
|
cmd = ["xcodebuild"]
|
14
15
|
cmd << "-project" << options[:sandbox].project_path.realdirpath
|
15
|
-
cmd << "-
|
16
|
+
targets.each { |target| cmd << "-target" << target }
|
16
17
|
cmd << "-configuration" << options[:configuration]
|
17
18
|
cmd << "-sdk" << sdk
|
18
19
|
cmd << Fourflusher::SimControl.new.destination(:oldest, platform, options[:deployment_target]) unless platform.nil?
|
19
20
|
cmd += options[:args] if options[:args]
|
21
|
+
cmd << "build"
|
20
22
|
cmd << "2>&1"
|
21
23
|
cmd = cmd.join(" ")
|
22
24
|
|
23
25
|
Pod::UI.puts_indented "$ #{cmd}"
|
24
26
|
log = `#{cmd}`
|
27
|
+
return if $?.exitstatus.zero? # rubocop:disable Style/SpecialGlobalVars
|
25
28
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
# 64 represent command invalid. http://www.manpagez.com/man/3/sysexits/
|
34
|
-
printer = XCPretty::Printer.new({:formatter => XCPretty::Simple, :colorize => "auto"})
|
35
|
-
log.each_line do |line|
|
36
|
-
printer.pretty_print(line)
|
37
|
-
end
|
38
|
-
rescue
|
39
|
-
Pod::UI.puts log.red
|
29
|
+
begin
|
30
|
+
require "xcpretty" # TODO (thuyen): Revise this dependency
|
31
|
+
# use xcpretty to print build log
|
32
|
+
# 64 represent command invalid. http://www.manpagez.com/man/3/sysexits/
|
33
|
+
printer = XCPretty::Printer.new({:formatter => XCPretty::Simple, :colorize => "auto"})
|
34
|
+
log.each_line do |line|
|
35
|
+
printer.pretty_print(line)
|
40
36
|
end
|
37
|
+
rescue
|
38
|
+
Pod::UI.puts log.red
|
39
|
+
ensure
|
40
|
+
raise "Fail to build targets: #{targets}"
|
41
41
|
end
|
42
|
-
[succeeded, log]
|
43
42
|
end
|
data/lib/command/config.rb
CHANGED
@@ -103,6 +103,11 @@ module PodPrebuild
|
|
103
103
|
@dsl_config[:disable_dsym]
|
104
104
|
end
|
105
105
|
|
106
|
+
def still_download_sources?(name)
|
107
|
+
option = @dsl_config[:still_download_sources]
|
108
|
+
option.is_a?(Array) ? option.include?(name) : option
|
109
|
+
end
|
110
|
+
|
106
111
|
def dont_remove_source_code?
|
107
112
|
@dsl_config[:dont_remove_source_code]
|
108
113
|
end
|
@@ -162,6 +167,7 @@ module PodPrebuild
|
|
162
167
|
:bitcode_enabled,
|
163
168
|
:device_build_enabled,
|
164
169
|
:disable_dsym,
|
170
|
+
:still_download_sources,
|
165
171
|
:dont_remove_source_code,
|
166
172
|
:build_args,
|
167
173
|
:save_cache_validation_to,
|
@@ -17,7 +17,8 @@ module PodPrebuild
|
|
17
17
|
comps << cmd
|
18
18
|
comps << "&> /dev/null" if options[:ignore_output]
|
19
19
|
comps << "|| true" if options[:can_fail]
|
20
|
-
|
20
|
+
cmd = comps.join(" ")
|
21
|
+
raise "Fail to run command '#{cmd}'" unless system(cmd)
|
21
22
|
end
|
22
23
|
|
23
24
|
def git_clone(cmd, options = {})
|
@@ -8,6 +8,7 @@ module PodPrebuild
|
|
8
8
|
super(options)
|
9
9
|
@cache_branch = options[:cache_branch]
|
10
10
|
@push_cache = options[:push_cache]
|
11
|
+
@repo_update = options[:repo_update]
|
11
12
|
@fetcher = PodPrebuild::CacheFetcher.new(options)
|
12
13
|
@pusher = PodPrebuild::CachePusher.new(options)
|
13
14
|
end
|
@@ -26,6 +27,7 @@ module PodPrebuild
|
|
26
27
|
|
27
28
|
def prebuild
|
28
29
|
Pod::UI.step("Installation") do
|
30
|
+
installer.repo_update = @repo_update
|
29
31
|
installer.install!
|
30
32
|
end
|
31
33
|
end
|
data/lib/command/prebuild.rb
CHANGED
@@ -9,6 +9,7 @@ module Pod
|
|
9
9
|
def self.options
|
10
10
|
[
|
11
11
|
["--config", "Config (Debug, Test...) to prebuild"],
|
12
|
+
["--repo-update", "Update pod repo before installing"],
|
12
13
|
["--push", "Push cache to repo upon completion"],
|
13
14
|
["--all", "Prebuild all binary pods regardless of cache validation"],
|
14
15
|
["--targets", "Targets to prebuild. Use comma (,) to specify a list of targets"]
|
@@ -28,6 +29,7 @@ module Pod
|
|
28
29
|
@prebuilder = PodPrebuild::CachePrebuilder.new(
|
29
30
|
config: prebuild_config,
|
30
31
|
cache_branch: argv.shift_argument || "master",
|
32
|
+
repo_update: argv.flag?("repo-update"),
|
31
33
|
push_cache: argv.flag?("push")
|
32
34
|
)
|
33
35
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cocoapods-binary-cache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bang Nguyen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-10-
|
11
|
+
date: 2020-10-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cocoapods
|
@@ -125,7 +125,6 @@ files:
|
|
125
125
|
- lib/cocoapods-binary-cache/helper/lockfile.rb
|
126
126
|
- lib/cocoapods-binary-cache/helper/path_utils.rb
|
127
127
|
- lib/cocoapods-binary-cache/helper/podspec.rb
|
128
|
-
- lib/cocoapods-binary-cache/helper/prebuild_order.rb
|
129
128
|
- lib/cocoapods-binary-cache/hooks/post_install.rb
|
130
129
|
- lib/cocoapods-binary-cache/hooks/pre_install.rb
|
131
130
|
- lib/cocoapods-binary-cache/main.rb
|
@@ -153,7 +152,6 @@ files:
|
|
153
152
|
- lib/cocoapods-binary-cache/pod-rome/xcodebuild_raw.rb
|
154
153
|
- lib/cocoapods-binary-cache/prebuild_output/metadata.rb
|
155
154
|
- lib/cocoapods-binary-cache/prebuild_output/output.rb
|
156
|
-
- lib/cocoapods-binary-cache/scheme_editor.rb
|
157
155
|
- lib/cocoapods-binary-cache/state_store.rb
|
158
156
|
- lib/cocoapods-binary-cache/ui.rb
|
159
157
|
- lib/cocoapods_plugin.rb
|
@@ -1,12 +0,0 @@
|
|
1
|
-
module PodPrebuild
|
2
|
-
module BuildOrder
|
3
|
-
def self.order_targets(targets)
|
4
|
-
# It's more efficient to build frameworks that have more dependencies first
|
5
|
-
# so that the build parallelism is ultilized
|
6
|
-
# >> --- MyFramework ----------------------------------|
|
7
|
-
# >> --- ADependency ---|
|
8
|
-
# >> --- AnotherADependency ---|
|
9
|
-
targets.sort_by { |t| -t.recursive_dependent_targets.count }
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
# Copyright 2019 Grabtaxi Holdings PTE LTE (GRAB), All rights reserved.
|
2
|
-
# Use of this source code is governed by an MIT-style license that can be found in the LICENSE file
|
3
|
-
|
4
|
-
require "rexml/document"
|
5
|
-
|
6
|
-
class SchemeEditor
|
7
|
-
def self.edit_to_support_code_coverage(sandbox)
|
8
|
-
pod_proj_path = sandbox.project_path
|
9
|
-
Pod::UI.message "Modify schemes of pod project to support code coverage of prebuilt local pod: #{pod_proj_path}"
|
10
|
-
scheme_files = Dir["#{pod_proj_path}/**/*.xcscheme"]
|
11
|
-
scheme_files.each do |file_path|
|
12
|
-
scheme_name = File.basename(file_path, ".*")
|
13
|
-
next unless sandbox.local?(scheme_name)
|
14
|
-
|
15
|
-
Pod::UI.message "Modify scheme to enable coverage symbol when prebuild: #{scheme_name}"
|
16
|
-
|
17
|
-
doc = File.open(file_path, "r") { |f| REXML::Document.new(f) }
|
18
|
-
scheme = doc.elements["Scheme"]
|
19
|
-
test_action = scheme.elements["TestAction"]
|
20
|
-
next if test_action.attributes["codeCoverageEnabled"] == "YES"
|
21
|
-
|
22
|
-
test_action.add_attribute("codeCoverageEnabled", "YES")
|
23
|
-
test_action.add_attribute("onlyGenerateCoverageForSpecifiedTargets", "YES")
|
24
|
-
coverage_targets = REXML::Element.new("CodeCoverageTargets")
|
25
|
-
buildable_ref = scheme
|
26
|
-
.elements["BuildAction"]
|
27
|
-
.elements["BuildActionEntries"]
|
28
|
-
.elements["BuildActionEntry"]
|
29
|
-
.elements["BuildableReference"]
|
30
|
-
new_buildable_ref = buildable_ref.clone # Need to clone, otherwise the original one will be move to new place
|
31
|
-
coverage_targets.add_element(new_buildable_ref)
|
32
|
-
test_action.add_element(coverage_targets)
|
33
|
-
File.open(file_path, "w") { |f| doc.write(f) }
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|