cocoapods-alexandria 0.2.2 → 0.2.5

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: 939deeb120d224d7de1d886e55edbe77151f73b6a2d0b083aee075ffc1c9c214
4
- data.tar.gz: 1c13e5daec652c151d6d01d8e6c5bccfe2d3d3efda099ae9f70c60e6d6f8f3a1
3
+ metadata.gz: 6d3e818c908ebf093b15067e862eb0aa6b0c4a576023b07596014806386d605b
4
+ data.tar.gz: 064c89f49a1d7ffe73c8e8c2f45df3bd56550fbb594388f26b92e77bedfee02f
5
5
  SHA512:
6
- metadata.gz: e79bd080912d587bb7ffa66f59da8fc75c7106e30eb40efc9775dbcf48cca63660df71cd74ed4a2d3cedb6dc3229c28c15a3730d49619aaf5f0eb1c86a09f893
7
- data.tar.gz: eb4e35e5c6e55efa0412a022e3ca13c00bc1f5911b62910c70ce55870ace98b5a35374864f95ba68330b21b0ecb918f211077d642325150e61ec6878015c5964
6
+ metadata.gz: a5cb6e45538fa2b455bd4772a0a2abeab086624ec7f597c220f19b1590346234e08cfd039c8bb10b12479a46b0c2392efc5a055aa39cf9c6c24ce1311101febc
7
+ data.tar.gz: b0942db92ebf9f9eac042c07ddf84ee7a7f0548b6720869abe391f973a105d6de2dd6a04560241c945232f7c247ea63d9f2421f3cbe6294edc5860ecbf66f73c
@@ -1,3 +1,3 @@
1
1
  module CocoapodsAlexandria
2
- VERSION = '0.2.2'
2
+ VERSION = '0.2.5'
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,73 @@ 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
+ # Note: using target.product_name is wrong in some cases (Cocoapods project generation bug)
59
+ # See https://github.com/CocoaPods/CocoaPods/issues/8007
60
+ "#{build_dir}/#{configuration}-#{sdk}/#{target.name}/#{target.product_reference.name}"
61
+ end
62
+
63
+ def destination_path(target)
64
+ # Note: using target.product_name is wrong in some cases (Cocoapods project generation bug)
65
+ # See https://github.com/CocoaPods/CocoaPods/issues/8007
66
+ "#{destination}/#{target.product_reference.name}"
67
+ end
68
+ end
69
+ end
70
+
71
+ module Xcodeproj
72
+ class Project
73
+ module Object
74
+ class AbstractTarget
75
+ def is_native?
76
+ is_a?(Xcodeproj::Project::Object::PBXNativeTarget)
77
+ end
78
+ end
79
+
80
+ class PBXNativeTarget
81
+ def is_bundle?
82
+ product_type == 'com.apple.product-type.bundle'
83
+ end
84
+
85
+ def all_dependencies
86
+ dependencies
87
+ .filter { |d| d.target.is_native? && !d.target.is_bundle? }
88
+ .map { |d| [d.target] + d.target.all_dependencies }
89
+ .flatten.uniq
90
+ end
91
+ end
92
+ end
93
+
94
+ def all_dependencies_for(umbrella_target)
95
+ target(umbrella_target.cocoapods_target_label).all_dependencies
64
96
  end
65
97
 
66
- def destination_path(module_name)
67
- "#{destination}/#{module_name}.framework"
98
+ def target(target_name)
99
+ result = targets.find { |t| t.name == target_name }
100
+ if result.is_native?
101
+ return result
102
+ else
103
+ return nil
104
+ end
68
105
  end
69
106
  end
70
107
  end
@@ -90,12 +90,12 @@ module PodAlexandria
90
90
 
91
91
  def delete(spec)
92
92
  name = spec_modules[spec] || module_name(spec)
93
- paths = Dir["#{destination}/#{name}.{framework,xcframework}"]
93
+ paths = Dir["#{destination}/#{name}.{a,framework,xcframework}"]
94
94
 
95
95
  if !paths.empty?
96
- paths.each { |path| FileUtils.remove_dir(path, true) }
96
+ paths.each { |path| FileUtils.remove_entry(path, true) }
97
97
  else
98
- Pod::UI.warn "🤔 Could not delete #{destination}/#{name}.(xc)framework, it does not exist! (this is normal for newly added pods)"
98
+ Pod::UI.warn "🤔 Could not delete cached binary for #{name}, it does not exist! (this is normal for newly added pods)"
99
99
  end
100
100
  end
101
101
 
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.2
4
+ version: 0.2.5
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-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cocoapods