cocoapods-binaryhqp 0.4.8

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.
@@ -0,0 +1,165 @@
1
+ # encoding: UTF-8
2
+ require_relative 'helper/podfile_options'
3
+ require_relative 'tool/tool'
4
+ require_relative 'gem_version'
5
+
6
+ module Pod
7
+ class Podfile
8
+ module DSL
9
+
10
+ # Enable prebuiding for all pods
11
+ # it has a lower priority to other binary settings
12
+ def all_binary!
13
+ DSL.prebuild_all = true
14
+ end
15
+
16
+ # Enable bitcode for prebuilt frameworks
17
+ def enable_bitcode_for_prebuilt_frameworks!
18
+ DSL.bitcode_enabled = true
19
+ end
20
+
21
+ # Don't remove source code of prebuilt pods
22
+ # It may speed up the pod install if git didn't
23
+ # include the `Pods` folder
24
+ def keep_source_code_for_prebuilt_frameworks!
25
+ DSL.dont_remove_source_code = true
26
+ end
27
+
28
+ # Add custom xcodebuild option to the prebuilding action
29
+ #
30
+ # You may use this for your special demands. For example: the default archs in dSYMs
31
+ # of prebuilt frameworks is 'arm64 armv7 x86_64', and no 'i386' for 32bit simulator.
32
+ # It may generate a warning when building for a 32bit simulator. You may add following
33
+ # to your podfile
34
+ #
35
+ # ` set_custom_xcodebuild_options_for_prebuilt_frameworks :simulator => "ARCHS=$(ARCHS_STANDARD)" `
36
+ #
37
+ # Another example to disable the generating of dSYM file:
38
+ #
39
+ # ` set_custom_xcodebuild_options_for_prebuilt_frameworks "DEBUG_INFORMATION_FORMAT=dwarf"`
40
+ #
41
+ #
42
+ # @param [String or Hash] options
43
+ #
44
+ # If is a String, it will apply for device and simulator. Use it just like in the commandline.
45
+ # If is a Hash, it should be like this: { :device => "XXXXX", :simulator => "XXXXX" }
46
+ #
47
+ def set_custom_xcodebuild_options_for_prebuilt_frameworks(options)
48
+ if options.kind_of? Hash
49
+ DSL.custom_build_options = [ options[:device] ] unless options[:device].nil?
50
+ DSL.custom_build_options_simulator = [ options[:simulator] ] unless options[:simulator].nil?
51
+ elsif options.kind_of? String
52
+ DSL.custom_build_options = [options]
53
+ DSL.custom_build_options_simulator = [options]
54
+ else
55
+ raise "Wrong type."
56
+ end
57
+ end
58
+
59
+ private
60
+ class_attr_accessor :prebuild_all
61
+ prebuild_all = false
62
+
63
+ class_attr_accessor :bitcode_enabled
64
+ bitcode_enabled = false
65
+
66
+ class_attr_accessor :dont_remove_source_code
67
+ dont_remove_source_code = false
68
+
69
+ class_attr_accessor :custom_build_options
70
+ class_attr_accessor :custom_build_options_simulator
71
+ self.custom_build_options = []
72
+ self.custom_build_options_simulator = []
73
+ end
74
+ end
75
+ end
76
+
77
+ Pod::HooksManager.register('cocoapods-binaryhqp', :pre_install) do |installer_context|
78
+
79
+ require_relative 'helper/feature_switches'
80
+ if Pod.is_prebuild_stage
81
+ next
82
+ end
83
+
84
+ Pod::UI.puts("当前版本: #{CocoapodsBinaryHqp::VERSION}")
85
+
86
+ # [Check Environment]
87
+ # check user_framework is on
88
+ podfile = installer_context.podfile
89
+ podfile.target_definition_list.each do |target_definition|
90
+ next if target_definition.prebuild_framework_pod_names.empty?
91
+ if not target_definition.uses_frameworks?
92
+ STDERR.puts "[!] Cocoapods-binaryhqp requires `use_frameworks!`".red
93
+ exit
94
+ end
95
+ end
96
+
97
+
98
+ # -- step 1: prebuild framework ---
99
+ # Execute a sperated pod install, to generate targets for building framework,
100
+ # then compile them to framework files.
101
+ require_relative 'helper/prebuild_sandbox'
102
+ require_relative 'Prebuild'
103
+
104
+ Pod::UI.puts "🚀 Prebuild frameworks"
105
+
106
+ # Fetch original installer (which is running this pre-install hook) options,
107
+ # then pass them to our installer to perform update if needed
108
+ # Looks like this is the most appropriate way to figure out that something should be updated
109
+
110
+ update = nil
111
+ repo_update = nil
112
+
113
+ include ObjectSpace
114
+ ObjectSpace.each_object(Pod::Installer) { |installer|
115
+ update = installer.update
116
+ repo_update = installer.repo_update
117
+ }
118
+
119
+ # control features
120
+ Pod.is_prebuild_stage = true
121
+ Pod::Podfile::DSL.enable_prebuild_patch true # enable sikpping for prebuild targets
122
+ Pod::Installer.force_disable_integration true # don't integrate targets
123
+ Pod::Config.force_disable_write_lockfile true # disbale write lock file for perbuild podfile
124
+ Pod::Installer.disable_install_complete_message true # disable install complete message
125
+
126
+ # make another custom sandbox
127
+ standard_sandbox = installer_context.sandbox
128
+ prebuild_sandbox = Pod::PrebuildSandbox.from_standard_sandbox(standard_sandbox)
129
+
130
+ # get the podfile for prebuild
131
+ prebuild_podfile = Pod::Podfile.from_ruby(podfile.defined_in_file)
132
+
133
+ # install
134
+ lockfile = installer_context.lockfile
135
+ binary_installer = Pod::Installer.new(prebuild_sandbox, prebuild_podfile, lockfile)
136
+
137
+ if binary_installer.have_exact_prebuild_cache? && !update
138
+ binary_installer.install_when_cache_hit!
139
+ else
140
+ binary_installer.update = update
141
+ binary_installer.repo_update = repo_update
142
+ binary_installer.install!
143
+ end
144
+
145
+
146
+ # reset the environment
147
+ Pod.is_prebuild_stage = false
148
+ Pod::Installer.force_disable_integration false
149
+ Pod::Podfile::DSL.enable_prebuild_patch false
150
+ Pod::Config.force_disable_write_lockfile false
151
+ Pod::Installer.disable_install_complete_message false
152
+ Pod::UserInterface.warnings = [] # clean the warning in the prebuild step, it's duplicated.
153
+
154
+
155
+
156
+
157
+
158
+ # -- step 2: pod install ---
159
+ # install
160
+ Pod::UI.puts "\n"
161
+ Pod::UI.puts "🤖 Pod Install"
162
+ require_relative 'Integration'
163
+ # go on the normal install step ...
164
+ end
165
+
@@ -0,0 +1,291 @@
1
+ require_relative 'rome/build_framework'
2
+ require_relative 'helper/passer'
3
+ require_relative 'helper/target_checker'
4
+ require 'cfpropertylist'
5
+
6
+
7
+
8
+
9
+ # patch prebuild ability
10
+ module Pod
11
+ class Installer
12
+
13
+ include Config::Mixin
14
+
15
+ private
16
+
17
+ def local_manifest
18
+ if not @local_manifest_inited
19
+ @local_manifest_inited = true
20
+ raise "This method should be call before generate project" unless self.analysis_result == nil
21
+ @local_manifest = self.sandbox.manifest
22
+ end
23
+ @local_manifest
24
+ end
25
+ # @return [Analyzer::SpecsState]
26
+ def prebuild_pods_changes
27
+ local_manifest = self.sandbox.manifest
28
+ return nil if local_manifest.nil?
29
+ # if @prebuild_pods_changes.nil?
30
+ changes = local_manifest.detect_changes_with_podfile(podfile)
31
+ unchanged_pod_names = changes[:unchanged]
32
+ changed_pod_names = changes[:changed]
33
+ unchanged_pod_names.reverse_each do |name|
34
+ mainfest_pod_version = local_manifest.version(name).to_s
35
+ already_prebuild_version = prebuilded_framework_version(name) || "未找到"
36
+ if already_prebuild_version != mainfest_pod_version
37
+ Pod::UI.puts("- #{name} 已编译版本 #{already_prebuild_version}, manifest中的版本: #{mainfest_pod_version}") if config.verbose
38
+ changed_pod_names = changed_pod_names.push(name)
39
+ unchanged_pod_names.delete(name)
40
+ end
41
+ end
42
+
43
+ changes[:changed] = changed_pod_names
44
+ changes[:unchanged] = unchanged_pod_names
45
+ Pod::UI.puts("需要重编译的framework : #{changed_pod_names.to_s}") if config.verbose
46
+ @prebuild_pods_changes = Analyzer::SpecsState.new(changes)
47
+ # save the chagnes info for later stage
48
+ Pod::Prebuild::Passer.prebuild_pods_changes = @prebuild_pods_changes
49
+ @prebuild_pods_changes
50
+ end
51
+
52
+
53
+ public
54
+
55
+ # pod update 之后 lockfile 文件更新,更新lockfile对象,再次检查与预编译的版本是否一致
56
+ def post_update_pods_changes
57
+ changes = lockfile.detect_changes_with_podfile(podfile)
58
+ unchanged_pod_names = changes[:unchanged]
59
+ changed_pod_names = changes[:changed]
60
+ unchanged_pod_names.reverse_each do |name|
61
+ mainfest_pod_version = lockfile.version(name).to_s
62
+ already_prebuild_version = prebuilded_framework_version(name) || "未找到"
63
+ if already_prebuild_version != mainfest_pod_version
64
+ Pod::UI.puts("- #{name} 已编译版本 #{already_prebuild_version}, manifest中的版本: #{mainfest_pod_version}") if config.verbose
65
+ changed_pod_names = changed_pod_names.push(name)
66
+ unchanged_pod_names.delete(name)
67
+ end
68
+ end
69
+
70
+ changes[:changed] = changed_pod_names
71
+ changes[:unchanged] = unchanged_pod_names
72
+ Pod::UI.puts("需要重编译的framework : #{changed_pod_names.to_s}") if config.verbose
73
+ @prebuild_pods_changes = Analyzer::SpecsState.new(changes)
74
+ # save the chagnes info for later stage
75
+ Pod::Prebuild::Passer.prebuild_pods_changes = @prebuild_pods_changes
76
+ @prebuild_pods_changes
77
+
78
+ end
79
+
80
+ # check if need to prebuild
81
+ def have_exact_prebuild_cache?
82
+
83
+ # check if need build frameworks
84
+ return false if local_manifest == nil
85
+
86
+ changes = prebuild_pods_changes
87
+ added = changes.added
88
+ changed = changes.changed
89
+ unchanged = changes.unchanged
90
+ deleted = changes.deleted
91
+
92
+ exsited_framework_pod_names = sandbox.exsited_framework_pod_names
93
+ missing = unchanged.select do |pod_name|
94
+ not exsited_framework_pod_names.include?(pod_name)
95
+ end
96
+
97
+ needed = (added + changed + deleted + missing)
98
+
99
+ return needed.empty?
100
+ end
101
+ # 当前已编译的framework的版本
102
+ def prebuilded_framework_version(name)
103
+ path = self.sandbox.plist_path_for_target_name(name)
104
+ framework_version = ""
105
+ if Pathname.new(path).exist?
106
+ plist_file = CFPropertyList::List.new(:file => path)
107
+ data = CFPropertyList.native_types(plist_file.value)
108
+ framework_version = data["CFBundleShortVersionString"]
109
+ end
110
+ framework_version
111
+ end
112
+
113
+
114
+ # The install method when have completed cache
115
+ def install_when_cache_hit!
116
+ # just print log
117
+ self.sandbox.exsited_framework_target_names.each do |name|
118
+ UI.puts "Using #{name}"
119
+ end
120
+ end
121
+
122
+
123
+ # Build the needed framework files
124
+ def prebuild_frameworks!(after_write_lock)
125
+ # build options
126
+ sandbox_path = sandbox.root
127
+ existed_framework_folder = sandbox.generate_framework_path
128
+ bitcode_enabled = Pod::Podfile::DSL.bitcode_enabled
129
+ targets = []
130
+
131
+ if local_manifest != nil
132
+
133
+ if after_write_lock
134
+ changes = post_update_pods_changes
135
+ elsif
136
+ changes = prebuild_pods_changes
137
+ end
138
+
139
+ added = changes.added
140
+ changed = changes.changed
141
+ unchanged = changes.unchanged
142
+ deleted = changes.deleted
143
+
144
+ existed_framework_folder.mkdir unless existed_framework_folder.exist?
145
+ exsited_framework_pod_names = sandbox.exsited_framework_pod_names
146
+
147
+ # additions
148
+ missing = unchanged.select do |pod_name|
149
+ not exsited_framework_pod_names.include?(pod_name)
150
+ end
151
+
152
+
153
+ root_names_to_update = (added + changed + missing)
154
+
155
+ # transform names to targets
156
+ cache = []
157
+ targets = root_names_to_update.map do |pod_name|
158
+ tars = Pod.fast_get_targets_for_pod_name(pod_name, self.pod_targets, cache)
159
+ if tars.nil? || tars.empty?
160
+ raise "There's no target named (#{pod_name}) in Pod.xcodeproj.\n #{self.pod_targets.map(&:name)}" if t.nil?
161
+ end
162
+ tars
163
+ end.flatten
164
+
165
+ # add the dendencies
166
+ dependency_targets = targets.map {|t| t.recursive_dependent_targets }.flatten.uniq || []
167
+ targets = (targets + dependency_targets).uniq
168
+ else
169
+ targets = self.pod_targets
170
+ end
171
+
172
+ targets = targets.reject {|pod_target| sandbox.local?(pod_target.pod_name) }
173
+
174
+
175
+ # build!
176
+ Pod::UI.puts "Prebuild frameworks (total #{targets.count})"
177
+ Pod::Prebuild.remove_build_dir(sandbox_path)
178
+ targets.each do |target|
179
+ if !target.should_build?
180
+ UI.puts "Prebuilding #{target.label}"
181
+ next
182
+ end
183
+
184
+ output_path = sandbox.framework_folder_path_for_target_name(target.name)
185
+ output_path.rmtree if output_path.exist?
186
+ output_path.mkpath unless output_path.exist?
187
+ Pod::Prebuild.build(sandbox_path, target, output_path, bitcode_enabled, Podfile::DSL.custom_build_options, Podfile::DSL.custom_build_options_simulator)
188
+
189
+ # save the resource paths for later installing
190
+ if target.static_framework? and !target.resource_paths.empty?
191
+ framework_path = output_path + target.framework_name
192
+ standard_sandbox_path = sandbox.standard_sanbox_path
193
+
194
+ resources = begin
195
+ if Pod::VERSION.start_with? "1.5"
196
+ target.resource_paths
197
+ else
198
+ # resource_paths is Hash{String=>Array<String>} on 1.6 and above
199
+ # (use AFNetworking to generate a demo data)
200
+ # https://github.com/leavez/cocoapods-binary/issues/50
201
+ target.resource_paths.values.flatten
202
+ end
203
+ end
204
+ raise "Wrong type: #{resources}" unless resources.kind_of? Array
205
+
206
+ path_objects = resources.map do |path|
207
+ object = Prebuild::Passer::ResourcePath.new
208
+ object.real_file_path = framework_path + File.basename(path)
209
+ object.target_file_path = path.gsub('${PODS_ROOT}', standard_sandbox_path.to_s) if path.start_with? '${PODS_ROOT}'
210
+ object.target_file_path = path.gsub("${PODS_CONFIGURATION_BUILD_DIR}", standard_sandbox_path.to_s) if path.start_with? "${PODS_CONFIGURATION_BUILD_DIR}"
211
+ object
212
+ end
213
+ Prebuild::Passer.resources_to_copy_for_static_framework[target.name] = path_objects
214
+ end
215
+
216
+ end
217
+ Pod::Prebuild.remove_build_dir(sandbox_path)
218
+
219
+
220
+ # copy vendored libraries and frameworks
221
+ targets.each do |target|
222
+ root_path = self.sandbox.pod_dir(target.name)
223
+ target_folder = sandbox.framework_folder_path_for_target_name(target.name)
224
+
225
+ # If target shouldn't build, we copy all the original files
226
+ # This is for target with only .a and .h files
227
+ if not target.should_build?
228
+ Prebuild::Passer.target_names_to_skip_integration_framework << target.name
229
+ FileUtils.cp_r(root_path, target_folder, :remove_destination => true)
230
+ next
231
+ end
232
+
233
+ target.spec_consumers.each do |consumer|
234
+ file_accessor = Sandbox::FileAccessor.new(root_path, consumer)
235
+ lib_paths = file_accessor.vendored_frameworks || []
236
+ lib_paths += file_accessor.vendored_libraries
237
+ # @TODO dSYM files
238
+ lib_paths.each do |lib_path|
239
+ relative = lib_path.relative_path_from(root_path)
240
+ destination = target_folder + relative
241
+ destination.dirname.mkpath unless destination.dirname.exist?
242
+ FileUtils.cp_r(lib_path, destination, :remove_destination => true)
243
+ end
244
+ end
245
+ end
246
+
247
+ # save the pod_name for prebuild framwork in sandbox
248
+ targets.each do |target|
249
+ sandbox.save_pod_name_for_target target
250
+ end
251
+
252
+ # Remove useless files
253
+ # remove useless pods
254
+ all_needed_names = self.pod_targets.map(&:name).uniq
255
+ useless_target_names = sandbox.exsited_framework_target_names.reject do |name|
256
+ all_needed_names.include? name
257
+ end
258
+ useless_target_names.each do |name|
259
+ path = sandbox.framework_folder_path_for_target_name(name)
260
+ path.rmtree if path.exist?
261
+ end
262
+
263
+ if not Podfile::DSL.dont_remove_source_code
264
+ # only keep manifest.lock and framework folder in _Prebuild
265
+ to_remain_files = ["Manifest.lock", File.basename(existed_framework_folder)]
266
+ to_delete_files = sandbox_path.children.select do |file|
267
+ filename = File.basename(file)
268
+ not to_remain_files.include?(filename)
269
+ end
270
+ to_delete_files.each do |path|
271
+ path.rmtree if path.exist?
272
+ end
273
+ else
274
+ # just remove the tmp files
275
+ path = sandbox.root + 'Manifest.lock.tmp'
276
+ path.rmtree if path.exist?
277
+ end
278
+ end
279
+
280
+ # patch the post install hook
281
+ old_method2 = instance_method(:run_plugins_post_install_hooks)
282
+ define_method(:run_plugins_post_install_hooks) do
283
+ old_method2.bind(self).()
284
+ if Pod::is_prebuild_stage
285
+ self.prebuild_frameworks!(true)
286
+ end
287
+ end
288
+
289
+
290
+ end
291
+ end
@@ -0,0 +1,3 @@
1
+ module CocoapodsBinaryHqp
2
+ VERSION = "0.4.8"
3
+ end
@@ -0,0 +1,97 @@
1
+ require_relative '../tool/tool'
2
+ require_relative 'prebuild_sandbox'
3
+
4
+ module Pod
5
+
6
+ # a flag that indicate stages
7
+ class_attr_accessor :is_prebuild_stage
8
+
9
+
10
+ # a switch for the `pod` DSL to make it only valid for ':binary => true'
11
+ class Podfile
12
+ module DSL
13
+
14
+ @@enable_prebuild_patch = false
15
+
16
+ # when enable, `pod` function will skip all pods without 'prebuild => true'
17
+ def self.enable_prebuild_patch(value)
18
+ @@enable_prebuild_patch = value
19
+ end
20
+
21
+ # --- patch ---
22
+ old_method = instance_method(:pod)
23
+
24
+ define_method(:pod) do |name, *args|
25
+ if !@@enable_prebuild_patch
26
+ old_method.bind(self).(name, *args)
27
+ return
28
+ end
29
+
30
+ # patched content
31
+ should_prebuild = Pod::Podfile::DSL.prebuild_all
32
+ local = false
33
+
34
+ options = args.last
35
+ if options.is_a?(Hash) and options[Pod::Prebuild.keyword] != nil
36
+ should_prebuild = options[Pod::Prebuild.keyword]
37
+ local = (options[:path] != nil)
38
+ end
39
+
40
+ if should_prebuild and (not local)
41
+ old_method.bind(self).(name, *args)
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+
48
+ # a force disable option for integral
49
+ class Installer
50
+ def self.force_disable_integration(value)
51
+ @@force_disable_integration = value
52
+ end
53
+
54
+ old_method = instance_method(:integrate_user_project)
55
+ define_method(:integrate_user_project) do
56
+ if @@force_disable_integration
57
+ return
58
+ end
59
+ old_method.bind(self).()
60
+ end
61
+ end
62
+
63
+ # a option to disable install complete message
64
+ class Installer
65
+ def self.disable_install_complete_message(value)
66
+ @@disable_install_complete_message = value
67
+ end
68
+
69
+ old_method = instance_method(:print_post_install_message)
70
+ define_method(:print_post_install_message) do
71
+ if @@disable_install_complete_message
72
+ return
73
+ end
74
+ old_method.bind(self).()
75
+ end
76
+ end
77
+
78
+ # option to disable write lockfiles
79
+ class Config
80
+
81
+ @@force_disable_write_lockfile = false
82
+ def self.force_disable_write_lockfile(value)
83
+ @@force_disable_write_lockfile = value
84
+ end
85
+
86
+ old_method = instance_method(:lockfile_path)
87
+ define_method(:lockfile_path) do
88
+ if @@force_disable_write_lockfile
89
+ # As config is a singleton, sandbox_root refer to the standard sandbox.
90
+ return PrebuildSandbox.from_standard_sanbox_path(sandbox_root).root + 'Manifest.lock.tmp'
91
+ else
92
+ return old_method.bind(self).()
93
+ end
94
+ end
95
+ end
96
+
97
+ end
@@ -0,0 +1,78 @@
1
+ # ABOUT NAMES
2
+ #
3
+ # There are many kinds of name in cocoapods. Two main names are widely used in this plugin.
4
+ # - root_spec.name (spec.root_name, targe.pod_name):
5
+ # aka "pod_name"
6
+ # the name we use in podfile. the concept.
7
+ #
8
+ # - target.name:
9
+ # aka "target_name"
10
+ # the name of the final target in xcode project. the final real thing.
11
+ #
12
+ # One pod may have multiple targets in xcode project, due to one pod can be used in mutiple
13
+ # platform simultaneously. So one `root_spec.name` may have multiple coresponding `target.name`s.
14
+ # Therefore, map a spec to/from targets is a little complecated. It's one to many.
15
+ #
16
+
17
+ # Tool to transform Pod_name to target efficiently
18
+ module Pod
19
+ def self.fast_get_targets_for_pod_name(pod_name, targets, cache)
20
+ pod_name_to_targets_hash = nil
21
+ if cache.empty?
22
+ pod_name_to_targets_hash = targets.reduce({}) do |sum, target|
23
+ array = sum[target.pod_name] || []
24
+ array << target
25
+ sum[target.pod_name] = array
26
+ sum
27
+ end
28
+ cache << pod_name_to_targets_hash
29
+ else
30
+ pod_name_to_targets_hash = cache.first
31
+ end
32
+
33
+ pod_name_to_targets_hash[pod_name] || []
34
+ end
35
+ end
36
+
37
+
38
+
39
+
40
+
41
+
42
+ # Target:
43
+
44
+ # def pod_name
45
+ # root_spec.name
46
+ # end
47
+
48
+ # def name
49
+ # pod_name + #{scope_suffix}
50
+ # end
51
+
52
+ # def product_module_name
53
+ # root_spec.module_name
54
+ # end
55
+
56
+ # def framework_name
57
+ # "#{product_module_name}.framework"
58
+ # end
59
+
60
+ # def product_name
61
+ # if requires_frameworks?
62
+ # framework_name
63
+ # else
64
+ # static_library_name
65
+ # end
66
+ # end
67
+
68
+ # def product_basename
69
+ # if requires_frameworks?
70
+ # product_module_name
71
+ # else
72
+ # label
73
+ # end
74
+ # end
75
+
76
+ # def framework_name
77
+ # "#{product_module_name}.framework"
78
+ # end
@@ -0,0 +1,41 @@
1
+ require_relative '../tool/tool'
2
+
3
+ module Pod
4
+ class Prebuild
5
+
6
+ # Pass the data between the 2 steps
7
+ #
8
+ # At step 2, the normal pod install, it needs some info of the
9
+ # prebuilt step. So we store it here.
10
+ #
11
+ class Passer
12
+
13
+ # indicate the add/remove/update of prebuit pods
14
+ # @return [Analyzer::SpecsState]
15
+ #
16
+ class_attr_accessor :prebuild_pods_changes
17
+
18
+
19
+ # represent the path of resurces to copy
20
+ class ResourcePath
21
+ attr_accessor :real_file_path
22
+ attr_accessor :target_file_path
23
+ end
24
+ # Save the resoures for static framework, and used when installing the prebuild framework
25
+ # static framework needs copy the resurces mannully
26
+ #
27
+ # @return [Hash<String, [Passer::ResourcePath]>]
28
+ class_attr_accessor :resources_to_copy_for_static_framework
29
+ self.resources_to_copy_for_static_framework = {}
30
+
31
+ # Some pod won't be build in prebuild stage even if it have `binary=>true`.
32
+ # The targets of this pods have `oshould_build? == true`.
33
+ # We should skip integration (patch spec) for this pods
34
+ #
35
+ # @return [Array<String>]
36
+ class_attr_accessor :target_names_to_skip_integration_framework
37
+ self.target_names_to_skip_integration_framework = []
38
+
39
+ end
40
+ end
41
+ end