cocoapods-binary 0.4.3 → 0.4.4
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 +5 -5
- data/cocoapods-binary.gemspec +2 -1
- data/lib/cocoapods-binary/Integration.rb +7 -11
- data/lib/cocoapods-binary/Main.rb +36 -0
- data/lib/cocoapods-binary/Prebuild.rb +14 -4
- data/lib/cocoapods-binary/gem_version.rb +1 -1
- data/lib/cocoapods-binary/helper/target_checker.rb +49 -0
- data/lib/cocoapods-binary/rome/build_framework.rb +70 -20
- metadata +18 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7b59508b448e37d01ed739d543e081ef5e29ac379a8864a06ba90f4ffeec1092
|
4
|
+
data.tar.gz: ba6d98f85c6ed5e725186b3a8425d26b11637d0c8a868102ddd6525282954ca2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 99999f08eca4b68e4d1b5fbad63a943402adfe1c15aaae23ff4f60a9971972a876baa01fa51d4922ca8e7ef243baf6cc290af3029ef17dd70f6a3373cb412673
|
7
|
+
data.tar.gz: 9e75f9cf7e4eb114b93ed45c07c3f7ecf4d96800be9dd51fad65fdaeb04635d293575675e3b768b64df1c2492c43af6e97e802a5ee1364d93008f57f316ae177
|
data/cocoapods-binary.gemspec
CHANGED
@@ -13,13 +13,14 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.homepage = 'https://github.com/leavez/cocoapods-binary'
|
14
14
|
spec.license = 'MIT'
|
15
15
|
|
16
|
-
spec.files = `git ls-files`.split($/).reject{|f| f.start_with?
|
16
|
+
spec.files = `git ls-files`.split($/).reject{|f| f.start_with?("test/") || f.start_with?('demo/')}
|
17
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
21
|
spec.add_dependency "cocoapods", ">= 1.5.0", "< 2.0"
|
22
22
|
spec.add_dependency "fourflusher", "~> 2.0"
|
23
|
+
spec.add_dependency "xcpretty", "~> 0.3.0"
|
23
24
|
|
24
25
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
25
26
|
spec.add_development_dependency 'rake'
|
@@ -2,6 +2,7 @@ require_relative 'helper/podfile_options'
|
|
2
2
|
require_relative 'helper/feature_switches'
|
3
3
|
require_relative 'helper/prebuild_sandbox'
|
4
4
|
require_relative 'helper/passer'
|
5
|
+
require_relative 'helper/target_checker'
|
5
6
|
|
6
7
|
|
7
8
|
# NOTE:
|
@@ -32,6 +33,7 @@ module Pod
|
|
32
33
|
|
33
34
|
# make a relatvie symbol link for all children
|
34
35
|
def walk(path, &action)
|
36
|
+
return unless path.exist?
|
35
37
|
path.children.each do |child|
|
36
38
|
result = action.call(child, &action)
|
37
39
|
if child.directory?
|
@@ -128,18 +130,12 @@ module Pod
|
|
128
130
|
# call original
|
129
131
|
old_method2.bind(self).()
|
130
132
|
|
133
|
+
# check the pods
|
134
|
+
# Although we have did it in prebuild stage, it's not sufficient.
|
135
|
+
# Same pod may appear in another target in form of source code.
|
136
|
+
Prebuild.check_one_pod_should_have_only_one_target(self.prebuild_pod_targets)
|
131
137
|
|
132
|
-
#
|
133
|
-
targets = self.prebuild_pod_targets
|
134
|
-
targets_have_different_platforms = targets.select {|t| t.pod_name != t.name }
|
135
|
-
|
136
|
-
if targets_have_different_platforms.count > 0
|
137
|
-
names = targets_have_different_platforms.map(&:pod_name)
|
138
|
-
STDERR.puts "[!] Binary doesn't support pods who integrate in 2 or more platforms simultaneously: #{names}".red
|
139
|
-
exit
|
140
|
-
end
|
141
|
-
|
142
|
-
|
138
|
+
#
|
143
139
|
specs = self.analysis_result.specifications
|
144
140
|
prebuilt_specs = (specs.select do |spec|
|
145
141
|
self.prebuild_pod_names.include? spec.root.name
|
@@ -24,6 +24,37 @@ module Pod
|
|
24
24
|
DSL.dont_remove_source_code = true
|
25
25
|
end
|
26
26
|
|
27
|
+
# Add custom xcodebuild option to the prebuilding action
|
28
|
+
#
|
29
|
+
# You may use this for your special demands. For example: the default archs in dSYMs
|
30
|
+
# of prebuilt frameworks is 'arm64 armv7 x86_64', and no 'i386' for 32bit simulator.
|
31
|
+
# It may generate a warning when building for a 32bit simulator. You may add following
|
32
|
+
# to your podfile
|
33
|
+
#
|
34
|
+
# ` set_custom_xcodebuild_options_for_prebuilt_frameworks :simulator => "ARCHS=$(ARCHS_STANDARD)" `
|
35
|
+
#
|
36
|
+
# Another example to disable the generating of dSYM file:
|
37
|
+
#
|
38
|
+
# ` set_custom_xcodebuild_options_for_prebuilt_frameworks "DEBUG_INFORMATION_FORMAT=dwarf"`
|
39
|
+
#
|
40
|
+
#
|
41
|
+
# @param [String or Hash] options
|
42
|
+
#
|
43
|
+
# If is a String, it will apply for device and simulator. Use it just like in the commandline.
|
44
|
+
# If is a Hash, it should be like this: { :device => "XXXXX", :simulator => "XXXXX" }
|
45
|
+
#
|
46
|
+
def set_custom_xcodebuild_options_for_prebuilt_frameworks(options)
|
47
|
+
if options.kind_of? Hash
|
48
|
+
DSL.custom_build_options = [ options[:device] ] unless options[:device].nil?
|
49
|
+
DSL.custom_build_options_simulator = [ options[:simulator] ] unless options[:simulator].nil?
|
50
|
+
elsif options.kind_of? String
|
51
|
+
DSL.custom_build_options = [options]
|
52
|
+
DSL.custom_build_options_simulator = [options]
|
53
|
+
else
|
54
|
+
raise "Wrong type."
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
27
58
|
private
|
28
59
|
class_attr_accessor :prebuild_all
|
29
60
|
prebuild_all = false
|
@@ -33,6 +64,11 @@ module Pod
|
|
33
64
|
|
34
65
|
class_attr_accessor :dont_remove_source_code
|
35
66
|
dont_remove_source_code = false
|
67
|
+
|
68
|
+
class_attr_accessor :custom_build_options
|
69
|
+
class_attr_accessor :custom_build_options_simulator
|
70
|
+
self.custom_build_options = []
|
71
|
+
self.custom_build_options_simulator = []
|
36
72
|
end
|
37
73
|
end
|
38
74
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
require_relative 'rome/build_framework'
|
2
2
|
require_relative 'helper/passer'
|
3
|
+
require_relative 'helper/target_checker'
|
4
|
+
|
3
5
|
|
4
6
|
# patch prebuild ability
|
5
7
|
module Pod
|
@@ -67,6 +69,10 @@ module Pod
|
|
67
69
|
# Build the needed framework files
|
68
70
|
def prebuild_frameworks!
|
69
71
|
|
72
|
+
# check
|
73
|
+
# give a early warning, instead of after compiling all the pods
|
74
|
+
Prebuild.check_one_pod_should_have_only_one_target(self.pod_targets)
|
75
|
+
|
70
76
|
# build options
|
71
77
|
sandbox_path = sandbox.root
|
72
78
|
existed_framework_folder = sandbox.generate_framework_path
|
@@ -98,7 +104,9 @@ module Pod
|
|
98
104
|
sum
|
99
105
|
end
|
100
106
|
targets = root_names_to_update.map do |root_name|
|
101
|
-
name_to_target_hash[root_name]
|
107
|
+
t = name_to_target_hash[root_name]
|
108
|
+
raise "There's no target named (#{root_name}) in Pod.xcodeproj.\n #{name_to_target_hash.keys}" if t.nil?
|
109
|
+
t
|
102
110
|
end || []
|
103
111
|
|
104
112
|
# add the dendencies
|
@@ -111,16 +119,18 @@ module Pod
|
|
111
119
|
targets = targets.reject {|pod_target| sandbox.local?(pod_target.pod_name) }
|
112
120
|
|
113
121
|
|
114
|
-
|
115
122
|
# build!
|
116
123
|
Pod::UI.puts "Prebuild frameworks (total #{targets.count})"
|
117
124
|
Pod::Prebuild.remove_build_dir(sandbox_path)
|
118
125
|
targets.each do |target|
|
119
|
-
|
126
|
+
if !target.should_build?
|
127
|
+
UI.puts "Prebuilding #{target.label}"
|
128
|
+
next
|
129
|
+
end
|
120
130
|
|
121
131
|
output_path = sandbox.framework_folder_path_for_pod_name(target.name)
|
122
132
|
output_path.mkpath unless output_path.exist?
|
123
|
-
Pod::Prebuild.build(sandbox_path, target, output_path, bitcode_enabled)
|
133
|
+
Pod::Prebuild.build(sandbox_path, target, output_path, bitcode_enabled, Podfile::DSL.custom_build_options, Podfile::DSL.custom_build_options_simulator)
|
124
134
|
|
125
135
|
# save the resource paths for later installing
|
126
136
|
if target.static_framework? and !target.resource_paths.empty?
|
@@ -0,0 +1,49 @@
|
|
1
|
+
|
2
|
+
module Pod
|
3
|
+
class Prebuild
|
4
|
+
|
5
|
+
# Check the targets, for the current limitation of the plugin
|
6
|
+
#
|
7
|
+
# @param [Array<PodTarget>] prebuilt_targets
|
8
|
+
def self.check_one_pod_should_have_only_one_target(prebuilt_targets)
|
9
|
+
|
10
|
+
targets_have_different_platforms = prebuilt_targets.select {|t| t.pod_name != t.name }
|
11
|
+
|
12
|
+
if targets_have_different_platforms.count > 0
|
13
|
+
names = targets_have_different_platforms.map(&:pod_name)
|
14
|
+
raw_names = targets_have_different_platforms.map(&:name)
|
15
|
+
message = "Oops, you came across a limitation of cocoapods-binary.
|
16
|
+
|
17
|
+
The plugin requires that one pod should have ONLY ONE target in the 'Pod.xcodeproj'. There are mainly 2 situations \
|
18
|
+
causing this problem:
|
19
|
+
|
20
|
+
1. One pod integrates in 2 or more different platforms' targets. e.g.
|
21
|
+
```
|
22
|
+
target 'iphoneApp' do
|
23
|
+
pod 'A', :binary => true
|
24
|
+
end
|
25
|
+
target 'watchApp' do
|
26
|
+
pod 'A'
|
27
|
+
end
|
28
|
+
```
|
29
|
+
|
30
|
+
2. Use different subspecs in multiple targets. e.g.
|
31
|
+
```
|
32
|
+
target 'iphoneApp' do
|
33
|
+
pod 'A/core'
|
34
|
+
pod 'A/network'
|
35
|
+
end
|
36
|
+
target 'iphoneAppTest' do
|
37
|
+
pod 'A/core'
|
38
|
+
end
|
39
|
+
```
|
40
|
+
|
41
|
+
Related pods: #{names}, target names: #{raw_names}
|
42
|
+
"
|
43
|
+
raise Informative, message
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'fourflusher'
|
2
|
+
require 'xcpretty'
|
2
3
|
|
3
4
|
CONFIGURATION = "Release"
|
4
5
|
PLATFORMS = { 'iphonesimulator' => 'iOS',
|
@@ -15,7 +16,10 @@ def build_for_iosish_platform(sandbox,
|
|
15
16
|
target,
|
16
17
|
device,
|
17
18
|
simulator,
|
18
|
-
bitcode_enabled
|
19
|
+
bitcode_enabled,
|
20
|
+
custom_build_options = [], # Array<String>
|
21
|
+
custom_build_options_simulator = [] # Array<String>
|
22
|
+
)
|
19
23
|
|
20
24
|
deployment_target = target.platform.deployment_target.to_s
|
21
25
|
|
@@ -26,47 +30,77 @@ def build_for_iosish_platform(sandbox,
|
|
26
30
|
if bitcode_enabled
|
27
31
|
other_options += ['BITCODE_GENERATION_MODE=bitcode']
|
28
32
|
end
|
29
|
-
|
30
|
-
xcodebuild(sandbox, target_label,
|
33
|
+
|
34
|
+
is_succeed, _ = xcodebuild(sandbox, target_label, device, deployment_target, other_options + custom_build_options)
|
35
|
+
exit 1 unless is_succeed
|
36
|
+
is_succeed, _ = xcodebuild(sandbox, target_label, simulator, deployment_target, other_options + ['ARCHS=x86_64', 'ONLY_ACTIVE_ARCH=NO'] + custom_build_options_simulator)
|
37
|
+
exit 1 unless is_succeed
|
31
38
|
|
32
39
|
# paths
|
33
40
|
root_name = target.pod_name
|
34
41
|
module_name = target.product_module_name
|
35
|
-
|
36
|
-
|
42
|
+
device_framework_path = "#{build_dir}/#{CONFIGURATION}-#{device}/#{root_name}/#{module_name}.framework"
|
43
|
+
simulator_framework_path = "#{build_dir}/#{CONFIGURATION}-#{simulator}/#{root_name}/#{module_name}.framework"
|
37
44
|
|
38
|
-
device_binary =
|
39
|
-
simulator_binary =
|
45
|
+
device_binary = device_framework_path + "/#{module_name}"
|
46
|
+
simulator_binary = simulator_framework_path + "/#{module_name}"
|
40
47
|
return unless File.file?(device_binary) && File.file?(simulator_binary)
|
41
48
|
|
42
49
|
# the device_lib path is the final output file path
|
43
|
-
# combine the
|
50
|
+
# combine the binaries
|
44
51
|
tmp_lipoed_binary_path = "#{build_dir}/#{root_name}"
|
45
52
|
lipo_log = `lipo -create -output #{tmp_lipoed_binary_path} #{device_binary} #{simulator_binary}`
|
46
53
|
puts lipo_log unless File.exist?(tmp_lipoed_binary_path)
|
47
54
|
FileUtils.mv tmp_lipoed_binary_path, device_binary, :force => true
|
48
55
|
|
49
56
|
# collect the swiftmodule file for various archs.
|
50
|
-
device_swiftmodule_path =
|
51
|
-
simulator_swiftmodule_path =
|
57
|
+
device_swiftmodule_path = device_framework_path + "/Modules/#{module_name}.swiftmodule"
|
58
|
+
simulator_swiftmodule_path = simulator_framework_path + "/Modules/#{module_name}.swiftmodule"
|
52
59
|
if File.exist?(device_swiftmodule_path)
|
53
60
|
FileUtils.cp_r simulator_swiftmodule_path + "/.", device_swiftmodule_path
|
54
61
|
end
|
55
62
|
|
63
|
+
# combine the generated swift headers
|
64
|
+
# (In xcode 10.2, the generated swift headers vary for each archs)
|
65
|
+
# https://github.com/leavez/cocoapods-binary/issues/58
|
66
|
+
simulator_generated_swift_header_path = simulator_framework_path + "/Headers/#{module_name}-Swift.h"
|
67
|
+
device_generated_swift_header_path = device_framework_path + "/Headers/#{module_name}-Swift.h"
|
68
|
+
if File.exist? simulator_generated_swift_header_path
|
69
|
+
device_header = File.read(device_generated_swift_header_path)
|
70
|
+
simulator_header = File.read(simulator_generated_swift_header_path)
|
71
|
+
# https://github.com/Carthage/Carthage/issues/2718#issuecomment-473870461
|
72
|
+
combined_header_content = %Q{
|
73
|
+
#if TARGET_OS_SIMULATOR // merged by cocoapods-binary
|
74
|
+
|
75
|
+
#{simulator_header}
|
76
|
+
|
77
|
+
#else // merged by cocoapods-binary
|
78
|
+
|
79
|
+
#{device_header}
|
80
|
+
|
81
|
+
#endif // merged by cocoapods-binary
|
82
|
+
}
|
83
|
+
File.write(device_generated_swift_header_path, combined_header_content.strip)
|
84
|
+
end
|
85
|
+
|
56
86
|
# handle the dSYM files
|
57
|
-
device_dsym = "#{
|
87
|
+
device_dsym = "#{device_framework_path}.dSYM"
|
58
88
|
if File.exist? device_dsym
|
59
89
|
# lipo the simulator dsym
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
90
|
+
simulator_dsym = "#{simulator_framework_path}.dSYM"
|
91
|
+
if File.exist? simulator_dsym
|
92
|
+
tmp_lipoed_binary_path = "#{output_path}/#{module_name}.draft"
|
93
|
+
lipo_log = `lipo -create -output #{tmp_lipoed_binary_path} #{device_dsym}/Contents/Resources/DWARF/#{module_name} #{simulator_dsym}/Contents/Resources/DWARF/#{module_name}`
|
94
|
+
puts lipo_log unless File.exist?(tmp_lipoed_binary_path)
|
95
|
+
FileUtils.mv tmp_lipoed_binary_path, "#{device_framework_path}.dSYM/Contents/Resources/DWARF/#{module_name}", :force => true
|
96
|
+
end
|
97
|
+
# move
|
64
98
|
FileUtils.mv device_dsym, output_path, :force => true
|
65
99
|
end
|
66
100
|
|
67
101
|
# output
|
68
102
|
output_path.mkpath unless output_path.exist?
|
69
|
-
FileUtils.mv
|
103
|
+
FileUtils.mv device_framework_path, output_path, :force => true
|
70
104
|
|
71
105
|
end
|
72
106
|
|
@@ -75,7 +109,23 @@ def xcodebuild(sandbox, target, sdk='macosx', deployment_target=nil, other_optio
|
|
75
109
|
platform = PLATFORMS[sdk]
|
76
110
|
args += Fourflusher::SimControl.new.destination(:oldest, platform, deployment_target) unless platform.nil?
|
77
111
|
args += other_options
|
78
|
-
|
112
|
+
log = `xcodebuild #{args.join(" ")} 2>&1`
|
113
|
+
exit_code = $?.exitstatus # Process::Status
|
114
|
+
is_succeed = (exit_code == 0)
|
115
|
+
|
116
|
+
if !is_succeed
|
117
|
+
begin
|
118
|
+
# 64 represent command invalid. http://www.manpagez.com/man/3/sysexits/
|
119
|
+
raise "shouldn't be handle by xcpretty" if exit_code == 64
|
120
|
+
printer = XCPretty::Printer.new({:formatter => XCPretty::Simple, :colorize => 'auto'})
|
121
|
+
log.each_line do |line|
|
122
|
+
printer.pretty_print(line)
|
123
|
+
end
|
124
|
+
rescue
|
125
|
+
puts log
|
126
|
+
end
|
127
|
+
end
|
128
|
+
[is_succeed, log]
|
79
129
|
end
|
80
130
|
|
81
131
|
|
@@ -94,7 +144,7 @@ module Pod
|
|
94
144
|
# [Pathname] output_path
|
95
145
|
# output path for generated frameworks
|
96
146
|
#
|
97
|
-
def self.build(sandbox_root_path, target, output_path, bitcode_enabled = false)
|
147
|
+
def self.build(sandbox_root_path, target, output_path, bitcode_enabled = false, custom_build_options=[], custom_build_options_simulator=[])
|
98
148
|
|
99
149
|
return unless not target == nil
|
100
150
|
|
@@ -104,8 +154,8 @@ module Pod
|
|
104
154
|
|
105
155
|
# -- build the framework
|
106
156
|
case target.platform.name
|
107
|
-
when :ios then build_for_iosish_platform(sandbox, build_dir, output_path, target, 'iphoneos', 'iphonesimulator', bitcode_enabled)
|
108
|
-
when :osx then xcodebuild(sandbox, target.label)
|
157
|
+
when :ios then build_for_iosish_platform(sandbox, build_dir, output_path, target, 'iphoneos', 'iphonesimulator', bitcode_enabled, custom_build_options, custom_build_options_simulator)
|
158
|
+
when :osx then xcodebuild(sandbox, target.label, 'macosx', nil, custom_build_options)
|
109
159
|
# when :tvos then build_for_iosish_platform(sandbox, build_dir, target, 'appletvos', 'appletvsimulator')
|
110
160
|
# when :watchos then build_for_iosish_platform(sandbox, build_dir, target, 'watchos', 'watchsimulator')
|
111
161
|
else raise "Unsupported platform for '#{target.name}': '#{target.platform.name}'" end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cocoapods-binary
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.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-04-
|
11
|
+
date: 2019-04-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cocoapods
|
@@ -44,6 +44,20 @@ dependencies:
|
|
44
44
|
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: '2.0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: xcpretty
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.3.0
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 0.3.0
|
47
61
|
- !ruby/object:Gem::Dependency
|
48
62
|
name: bundler
|
49
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -96,6 +110,7 @@ files:
|
|
96
110
|
- lib/cocoapods-binary/helper/passer.rb
|
97
111
|
- lib/cocoapods-binary/helper/podfile_options.rb
|
98
112
|
- lib/cocoapods-binary/helper/prebuild_sandbox.rb
|
113
|
+
- lib/cocoapods-binary/helper/target_checker.rb
|
99
114
|
- lib/cocoapods-binary/rome/build_framework.rb
|
100
115
|
- lib/cocoapods-binary/tool/tool.rb
|
101
116
|
- lib/cocoapods_plugin.rb
|
@@ -120,7 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
120
135
|
version: '0'
|
121
136
|
requirements: []
|
122
137
|
rubyforge_project:
|
123
|
-
rubygems_version: 2.
|
138
|
+
rubygems_version: 2.7.6
|
124
139
|
signing_key:
|
125
140
|
specification_version: 4
|
126
141
|
summary: A CocoaPods plugin to integrate pods in form of prebuilt frameworks, not
|