cocoapods-alexandria 0.2.1 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 27616506322af399e0045f19891817ae5ec87f1023fc1c66121b617e6b62fc2c
4
- data.tar.gz: 900b0c88287e32f8c96db19fca25ab6c3eccc7ed314c29a996b9cc3734bb3670
3
+ metadata.gz: 53a4f9bbe821077493e3ed28b9498c8d354568a5d1db2b21325a410f01ac9174
4
+ data.tar.gz: dc38d21a6c95984c84398423813359c35f9c38c1d10acfff3ec1ec568749f97c
5
5
  SHA512:
6
- metadata.gz: e005c66afc5ea2a076dbeb60cbbc9582713b2fd133abbd539fb993c385ffe0b27f28dea850d28e957311ab710293c248cc5f8218bc49113795719be99ed1ad6e
7
- data.tar.gz: 648ba30e5d6834466f13a8370eb90dd0fd4125f7d93121c6e785e15d9af869509a8904825fea66fbb892d2bef378f3bfb184ac2efe913d10d268e1ad36bbe6ed
6
+ metadata.gz: 2bd60a0217002b5c9301f3ccc9cc72dffec098f5aacd479a630aa13cdcf531c53126717b3baf745a8690ac9fb6d0d22607bf1a5a2cfbf8586f9ccbf013eb277f
7
+ data.tar.gz: c99fd46bf20edd1e1c96ebae578d555fe761c2488e04bea00b37bfc595df310f0f200b5b253cc6e4dc1b1a655110dc00611707655fefd01254b97874eef63abf
@@ -1,3 +1,3 @@
1
1
  module CocoapodsAlexandria
2
- VERSION = '0.2.1'
2
+ VERSION = '0.2.4'
3
3
  end
@@ -15,15 +15,16 @@ module PodAlexandria
15
15
  deployment_target = target.platform_deployment_target
16
16
  target_label = target.cocoapods_target_label
17
17
 
18
- # build each dependency of target
19
- spec_names = target.specs.map { |spec| [spec.root.name, spec.root.module_name] }.uniq
20
-
21
- spec_names.map { |root_name, module_name|
22
- next if skip_build?(root_name, module_name, sdk)
23
- if File.directory?(build_path(target, module_name, sdk))
24
- build_path(target, module_name, sdk)
18
+ # find & build all dependencies
19
+ project.all_dependencies_for(target).map { |target|
20
+ # skip if already built (product, or by other target)
21
+ next if skip_build?(target, sdk)
22
+
23
+ # may already be built (by another target)
24
+ if File.directory?(build_path(target, sdk))
25
+ build_path(target, sdk)
25
26
  else
26
- xcodebuild(root_name, module_name, sdk, deployment_target)
27
+ xcodebuild(target, sdk, deployment_target)
27
28
  end
28
29
  }.compact
29
30
  end
@@ -34,37 +35,69 @@ module PodAlexandria
34
35
  { :ios => 'iphoneos', :osx => 'macosx', :tvos => 'appletvos', :watchos => 'watchos' }
35
36
  end
36
37
 
37
- def skip_build?(target, module_name, sdk)
38
- File.directory?(destination_path(module_name)) ||
39
- !is_native_target?(target)
38
+ def skip_build?(target, sdk)
39
+ File.directory?(destination_path(target)) ||
40
+ File.directory?(build_path(target, sdk))
40
41
  end
41
42
 
42
- def is_native_target?(target_name)
43
- project.targets
44
- .find { |t| t.name == target_name }
45
- .is_a?(Xcodeproj::Project::Object::PBXNativeTarget)
46
- end
47
-
48
- def xcodebuild(target, module_name, sdk, deployment_target)
49
- args = %W(-project #{sandbox.project_path.realdirpath} -scheme #{target} -configuration #{configuration} -sdk #{sdk})
43
+ def xcodebuild(target, sdk, deployment_target)
44
+ args = %W(-project #{sandbox.project_path.realdirpath} -scheme #{target.name} -configuration #{configuration} -sdk #{sdk})
50
45
  args += flags unless flags.nil?
51
46
 
52
- Pod::UI.puts "Building '#{target}' for #{sdk}..."
47
+ Pod::UI.puts "Building '#{target.name}' for #{sdk}..."
53
48
  Pod::Executable.execute_command 'xcodebuild', args, true
54
49
 
55
- build_path(target, module_name, sdk)
50
+ build_path(target, sdk)
56
51
  end
57
52
 
58
53
  def project
59
54
  @project ||= Xcodeproj::Project.open(sandbox.project_path)
60
55
  end
61
56
 
62
- def build_path(target, module_name, sdk)
63
- "#{build_dir}/#{configuration}-#{sdk}/#{target}/#{module_name}.framework"
57
+ def build_path(target, sdk)
58
+ "#{build_dir}/#{configuration}-#{sdk}/#{target.name}/#{target.product_name}.framework"
59
+ end
60
+
61
+ def destination_path(target)
62
+ "#{destination}/#{target.product_name}.framework"
63
+ end
64
+ end
65
+ end
66
+
67
+ module Xcodeproj
68
+ class Project
69
+ module Object
70
+ class AbstractTarget
71
+ def is_native?
72
+ is_a?(Xcodeproj::Project::Object::PBXNativeTarget)
73
+ end
74
+ end
75
+
76
+ class PBXNativeTarget
77
+ def is_bundle?
78
+ product_type == 'com.apple.product-type.bundle'
79
+ end
80
+
81
+ def all_dependencies
82
+ dependencies
83
+ .filter { |d| d.target.is_native? && !d.target.is_bundle? }
84
+ .map { |d| [d.target] + d.target.all_dependencies }
85
+ .flatten.uniq
86
+ end
87
+ end
88
+ end
89
+
90
+ def all_dependencies_for(umbrella_target)
91
+ target(umbrella_target.cocoapods_target_label).all_dependencies
64
92
  end
65
93
 
66
- def destination_path(module_name)
67
- "#{destination}/#{module_name}.framework"
94
+ def target(target_name)
95
+ result = targets.find { |t| t.name == target_name }
96
+ if result.is_native?
97
+ return result
98
+ else
99
+ return nil
100
+ end
68
101
  end
69
102
  end
70
103
  end
@@ -35,7 +35,7 @@ module PodAlexandria
35
35
  end
36
36
 
37
37
  def self.config_file_for_target(installer_context, target)
38
- Dir["#{installer_context.sandbox_root}/Target Support Files/#{target.cocoapods_target_label}/#{target.cocoapods_target_label}.*-release.xcconfig"]
38
+ Dir["#{installer_context.sandbox_root}/Target Support Files/#{target.cocoapods_target_label}/#{target.cocoapods_target_label}.*release.xcconfig"]
39
39
  .first
40
40
  end
41
41
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoapods-alexandria
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Jennes
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-16 00:00:00.000000000 Z
11
+ date: 2022-08-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cocoapods