xcode-archive-cache 0.0.8.pre.1 → 0.0.8.pre.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 153bd48a6899fb06dd35f7e7a6d45e81e31b10addee748cf5cd5ba56ad82ba17
4
- data.tar.gz: 485fca1a778dfffe38d7d4a09315dda122c0dcc08c828999f2559bf35d750c52
3
+ metadata.gz: 52f8f43f53d74aef2d09148fe876d585c3cacf6f8f280a493684e235fb718d7f
4
+ data.tar.gz: 71df654b2b3d8e4bc867357b83e86bf6f2aea403f9d15c2552bdefe1d3688331
5
5
  SHA512:
6
- metadata.gz: 154fa88f04f1e01f0faae4155ff4f0dd558de0c2dce805728bd42ff77fbe5944c84d16fd8a4221279183e22c3a9eb0741429382c834ce1a2662413fcc83fdca7
7
- data.tar.gz: 6ba834613e56bd982e2d36bd5a7828b6f527b743fc40b7d577b3af69e573c7ebdb3aa506c51b1a222fcb7122a58e40be8ec3ef7702614d7729d1cd6066d1bda6
6
+ metadata.gz: a2e2ebc240b6ec293000cc023e65ed11a563ba841cb3dfafbab7e8d1ceaae0d9a21d2d9d0b556ff450495be9f20384adb27b34f68614f716aedf1e1aab9c28e4
7
+ data.tar.gz: 472d0209a2a24f01c8f07a7e33bdafbd85d915dbfd358f1f0799ca47ba3b34456f11d09ba67bc38874b95452f8e88d2e6540ae3ed5ab654a9cc6206a5d51cc64
@@ -11,9 +11,13 @@ module XcodeArchiveCache
11
11
  @shell_executor = XcodeArchiveCache::Shell::Executor.new
12
12
  end
13
13
 
14
- def list_product_contents(root_target_name, built_node)
15
- file_paths = list_products(root_target_name, built_node)
16
- file_paths.select {|path| File.exist?(path)}.map {|path| File.realpath(path) }
14
+ # @param [XcodeArchiveCache::BuildGraph::Node] built_node
15
+ #
16
+ # @return [Array<String>]
17
+ #
18
+ def list_product_contents(built_node)
19
+ file_paths = list_products(built_node)
20
+ file_paths.select {|path| File.exist?(path)}.map {|path| File.realpath(path)}
17
21
  end
18
22
 
19
23
  private
@@ -32,11 +36,15 @@ module XcodeArchiveCache
32
36
 
33
37
  # @param [XcodeArchiveCache::BuildGraph::Node] built_node
34
38
  #
35
- def list_products(root_target_name, built_node)
39
+ # @return [Array<String>]
40
+ #
41
+ def list_products(built_node)
36
42
  if built_node.has_framework_product?
37
- list_framework_products(root_target_name, built_node)
38
- elsif built_node.has_static_library_product?
39
- list_static_lib_products(root_target_name, built_node)
43
+ list_framework_products(built_node)
44
+ elsif built_node.has_acceptable_product?
45
+ list_single_product(built_node)
46
+ else
47
+ raise Informative, "#{built_node.name} has unsupported product type: #{built_node.native_target.product_type}"
40
48
  end
41
49
  end
42
50
 
@@ -44,8 +52,8 @@ module XcodeArchiveCache
44
52
  #
45
53
  # @return [Array<String>]
46
54
  #
47
- def list_framework_products(root_target_name, built_node)
48
- framework_glob = get_main_product_glob(root_target_name, built_node)
55
+ def list_framework_products(built_node)
56
+ framework_glob = get_main_product_glob(built_node)
49
57
  framework_path = Dir.glob(framework_glob).first
50
58
  unless framework_path
51
59
  raise Informative, "Framework product not found for #{built_node.name}"
@@ -63,21 +71,21 @@ module XcodeArchiveCache
63
71
  #
64
72
  # @return [Array<String>]
65
73
  #
66
- def list_static_lib_products(root_target_name, built_node)
67
- static_lib_glob = get_main_product_glob(root_target_name, built_node)
68
- static_lib_path = Dir.glob(static_lib_glob).first
69
- unless static_lib_path
70
- raise Informative, "Static library product not found for #{built_node.name}"
74
+ def list_single_product(built_node)
75
+ product_glob = get_main_product_glob(built_node)
76
+ product_path = Dir.glob(product_glob).first
77
+ unless product_path
78
+ raise Informative, "Product of type #{built_node.native_target.product_type} not found for #{built_node.name}"
71
79
  end
72
80
 
73
- [static_lib_path]
81
+ [product_path]
74
82
  end
75
83
 
76
84
  # @param [XcodeArchiveCache::BuildGraph::Node] built_node
77
85
  #
78
86
  # @return [String]
79
87
  #
80
- def get_main_product_glob(root_target_name, built_node)
88
+ def get_main_product_glob(built_node)
81
89
  product_name = built_node.native_target.product_reference.name ?
82
90
  built_node.native_target.product_reference.name :
83
91
  built_node.native_target.product_reference.path
@@ -86,14 +94,6 @@ module XcodeArchiveCache
86
94
  File.basename(product_name))
87
95
  end
88
96
 
89
- # @param [XcodeArchiveCache::BuildGraph::Node] built_node
90
- #
91
- # @return [String]
92
- #
93
- def configuration_dir(built_node)
94
- "#{configuration}-#{built_node.native_target.sdk}"
95
- end
96
-
97
97
  # @param [String] framework_path
98
98
  #
99
99
  # @return [Array<String>]
@@ -55,6 +55,14 @@ module XcodeArchiveCache
55
55
  native_target.product_type == Xcodeproj::Constants::PRODUCT_TYPE_UTI[:static_library]
56
56
  end
57
57
 
58
+ def has_bundle_product?
59
+ native_target.product_type == Xcodeproj::Constants::PRODUCT_TYPE_UTI[:bundle]
60
+ end
61
+
62
+ def has_acceptable_product?
63
+ ACCEPTABLE_PRODUCT_TYPES.include?(native_target.product_type)
64
+ end
65
+
58
66
  # @return [String]
59
67
  #
60
68
  def product_file_name
@@ -112,6 +120,12 @@ module XcodeArchiveCache
112
120
  dependency_names = dependencies.length > 0 ? dependencies.map(&:name).join(", ") : "<none>"
113
121
  "#{name}\n\troot: #{is_root}\n\tproduct: #{product_file_name}\n\tsha: #{sha_string}\n\tstate: #{state}\n\tdependent: #{dependent_names}\n\tdependencies: #{dependency_names}"
114
122
  end
123
+
124
+ private
125
+
126
+ ACCEPTABLE_PRODUCT_TYPES = [Xcodeproj::Constants::PRODUCT_TYPE_UTI[:framework],
127
+ Xcodeproj::Constants::PRODUCT_TYPE_UTI[:static_library],
128
+ Xcodeproj::Constants::PRODUCT_TYPE_UTI[:bundle]].freeze
115
129
  end
116
130
  end
117
131
  end
@@ -49,6 +49,7 @@ module XcodeArchiveCache
49
49
  #
50
50
  if graph.node_by_name(get_pods_target_name(target))
51
51
  pods_fixer.fix_embed_frameworks_script(target, graph, storage.container_dir_path)
52
+ pods_fixer.fix_copy_resources_script(target, graph, storage.container_dir_path)
52
53
  else
53
54
  framework_nodes = graph.nodes.select {|node| node.has_framework_product?}
54
55
  framework_file_paths = framework_nodes.map {|node| File.join(storage.get_storage_path(node), node.product_file_name)}
@@ -113,10 +114,10 @@ module XcodeArchiveCache
113
114
  # @param [Array<String>] paths
114
115
  #
115
116
  def add_header_paths_to_target(target, paths)
116
- debug("adding #{paths} to #{target.display_name}")
117
-
118
117
  return if paths == nil
119
118
 
119
+ debug("adding #{paths} to #{target.display_name}")
120
+
120
121
  build_configuration = find_build_configuration(target)
121
122
  paths.each do |path|
122
123
  build_flags_changer.add_headers_search_path(build_configuration, path)
@@ -153,12 +154,14 @@ module XcodeArchiveCache
153
154
  def add_as_prebuilt_dependency(prebuilt_node, dependent_target, should_link)
154
155
  debug("adding #{prebuilt_node.name} as prebuilt to #{dependent_target.display_name}")
155
156
 
157
+ unless prebuilt_node.has_acceptable_product?
158
+ raise Informative, "#{prebuilt_node.name} has unsupported product type: #{prebuilt_node.native_target.product_type}"
159
+ end
160
+
156
161
  if prebuilt_node.has_framework_product?
157
162
  add_as_prebuilt_framework(prebuilt_node, dependent_target)
158
163
  elsif prebuilt_node.has_static_library_product?
159
164
  add_as_prebuilt_static_lib(prebuilt_node, dependent_target, should_link)
160
- else
161
- raise ArgumentError.new, "#{prebuilt_node.name} has unsupported product type: #{prebuilt_node.native_target.product_type}"
162
165
  end
163
166
 
164
167
  debug("done with #{prebuilt_node.name} for #{dependent_target.display_name}")
@@ -197,7 +200,7 @@ module XcodeArchiveCache
197
200
  def find_build_configuration(target)
198
201
  build_configuration = target.build_configurations.select {|configuration| configuration.name == configuration_name}.first
199
202
  unless build_configuration
200
- raise ArgumentError.new, "#{configuration_name} build configuration not found on target #{node.name}"
203
+ raise Informative, "#{configuration_name} build configuration not found on target #{node.name}"
201
204
  end
202
205
 
203
206
  build_configuration
@@ -17,14 +17,19 @@ module XcodeArchiveCache
17
17
  file_path = find_embed_frameworks_script(target, build_settings)
18
18
  return unless file_path
19
19
 
20
- info("fixing #{file_path}")
21
- script = File.read(file_path)
22
- graph.nodes.each do |node|
23
- relative_product_path = "#{node.native_target.display_name}/#{node.product_file_name}"
24
- script = script.gsub("${BUILT_PRODUCTS_DIR}/#{relative_product_path}", File.join(products_dir, relative_product_path))
25
- end
20
+ fix_script(file_path, graph, products_dir)
21
+ end
26
22
 
27
- File.open(file_path, "w") {|file| file.puts(script)}
23
+ # @param [Xcodeproj::Project::Object::PBXNativeTarget] target
24
+ # @param [XcodeArchiveCache::BuildGraph::Graph] graph
25
+ # @param [String] products_dir
26
+ #
27
+ def fix_copy_resources_script(target, graph, products_dir)
28
+ build_settings = graph.dependent_build_settings
29
+ file_path = find_copy_resources_script(target, build_settings)
30
+ return unless file_path
31
+
32
+ fix_script(file_path, graph, products_dir)
28
33
  end
29
34
 
30
35
  private
@@ -39,8 +44,27 @@ module XcodeArchiveCache
39
44
  # @return [String]
40
45
  #
41
46
  def find_embed_frameworks_script(target, build_settings)
47
+ find_script(target, build_settings, "[CP] Embed Pods Frameworks")
48
+ end
49
+
50
+ # @param [Xcodeproj::Project::Object::PBXNativeTarget] target
51
+ # @param [XcodeArchiveCache::BuildSettings::Container] build_settings
52
+ #
53
+ # @return [String]
54
+ #
55
+ def find_copy_resources_script(target, build_settings)
56
+ find_script(target, build_settings, "[CP] Copy Pods Resources")
57
+ end
58
+
59
+ # @param [Xcodeproj::Project::Object::PBXNativeTarget] target
60
+ # @param [XcodeArchiveCache::BuildSettings::Container] build_settings
61
+ # @param [String] script_name
62
+ #
63
+ # @return [String]
64
+ #
65
+ def find_script(target, build_settings, script_name)
42
66
  target.shell_script_build_phases.each do |phase|
43
- if phase.display_name == "[CP] Embed Pods Frameworks"
67
+ if phase.display_name == script_name
44
68
  return build_settings_interpolator.interpolate(phase.shell_script, build_settings)
45
69
  .gsub(/^"|"$/, "")
46
70
  .strip
@@ -49,6 +73,22 @@ module XcodeArchiveCache
49
73
 
50
74
  nil
51
75
  end
76
+
77
+ # @param [String] file_path
78
+ # @param [XcodeArchiveCache::BuildGraph::Node] graph
79
+ # @param [String] products_dir
80
+ #
81
+ def fix_script(file_path, graph, products_dir)
82
+ info("fixing #{file_path}")
83
+ script = File.read(file_path)
84
+ graph.nodes.each do |node|
85
+ relative_product_path = "#{node.native_target.display_name}/#{node.product_file_name}"
86
+ absolute_product_path = File.join(products_dir, relative_product_path)
87
+ script = script.gsub(Regexp.new("\"[^\"]+\/#{node.product_file_name}\""), "\"#{absolute_product_path}\"")
88
+ end
89
+
90
+ File.open(file_path, "w") {|file| file.puts(script)}
91
+ end
52
92
  end
53
93
  end
54
94
  end
data/lib/runner/runner.rb CHANGED
@@ -131,7 +131,7 @@ module XcodeArchiveCache
131
131
  graph.nodes
132
132
  .select(&:waiting_for_rebuild)
133
133
  .each do |node|
134
- file_paths = @product_extractor.list_product_contents(root_target.name, node)
134
+ file_paths = @product_extractor.list_product_contents(node)
135
135
  @injection_storage.store_products(node, file_paths)
136
136
  @cache_storage.store(node, @injection_storage.get_storage_path(node))
137
137
  node.state = :rebuilt_and_cached
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xcode-archive-cache
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8.pre.1
4
+ version: 0.0.8.pre.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ilya Dyakonov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-30 00:00:00.000000000 Z
11
+ date: 2019-08-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: xcodeproj