cocoapods 1.8.4 → 1.9.0.beta.1
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 +4 -4
- data/CHANGELOG.md +69 -1
- data/lib/cocoapods.rb +1 -0
- data/lib/cocoapods/command/setup.rb +1 -0
- data/lib/cocoapods/executable.rb +1 -1
- data/lib/cocoapods/gem_version.rb +1 -1
- data/lib/cocoapods/generator/embed_frameworks_script.rb +36 -6
- data/lib/cocoapods/generator/prepare_artifacts_script.rb +244 -0
- data/lib/cocoapods/installer.rb +6 -5
- data/lib/cocoapods/installer/analyzer.rb +137 -59
- data/lib/cocoapods/installer/analyzer/pod_variant.rb +27 -12
- data/lib/cocoapods/installer/analyzer/pod_variant_set.rb +11 -2
- data/lib/cocoapods/installer/project_cache/project_cache_analyzer.rb +10 -2
- data/lib/cocoapods/installer/project_cache/project_installation_cache.rb +15 -2
- data/lib/cocoapods/installer/project_cache/target_cache_key.rb +7 -5
- data/lib/cocoapods/installer/user_project_integrator.rb +1 -10
- data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +100 -19
- data/lib/cocoapods/installer/xcode/pods_project_generator.rb +3 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/aggregate_target_installer.rb +29 -4
- data/lib/cocoapods/installer/xcode/pods_project_generator/app_host_installer.rb +7 -2
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb +106 -45
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_integrator.rb +68 -1
- data/lib/cocoapods/installer/xcode/pods_project_generator/pods_project_writer.rb +29 -14
- data/lib/cocoapods/sandbox/file_accessor.rb +32 -21
- data/lib/cocoapods/sources_manager.rb +9 -2
- data/lib/cocoapods/target.rb +11 -14
- data/lib/cocoapods/target/aggregate_target.rb +78 -18
- data/lib/cocoapods/target/build_settings.rb +64 -31
- data/lib/cocoapods/target/pod_target.rb +236 -87
- data/lib/cocoapods/user_interface/error_report.rb +14 -4
- data/lib/cocoapods/validator.rb +2 -0
- data/lib/cocoapods/xcode.rb +7 -0
- data/lib/cocoapods/{target → xcode}/framework_paths.rb +14 -1
- data/lib/cocoapods/xcode/linkage_analyzer.rb +22 -0
- data/lib/cocoapods/xcode/xcframework.rb +81 -0
- data/lib/cocoapods/xcode/xcframework/xcframework_slice.rb +51 -0
- metadata +12 -8
- data/lib/cocoapods/target/build_type.rb +0 -139
@@ -337,7 +337,7 @@ module Pod
|
|
337
337
|
cli_host_with_frameworks = []
|
338
338
|
cli_product_type = 'com.apple.product-type.tool'
|
339
339
|
# Collect aggregate target definitions by uuid to later lookup host target
|
340
|
-
# definitions and verify their
|
340
|
+
# definitions and verify their compatibility with their embedded targets
|
341
341
|
aggregate_targets.each do |target|
|
342
342
|
target.user_targets.each do |user_target|
|
343
343
|
target_definitions_by_uuid[user_target.uuid] = target.target_definition
|
@@ -415,11 +415,11 @@ module Pod
|
|
415
415
|
|
416
416
|
# Creates the models that represent the targets generated by CocoaPods.
|
417
417
|
#
|
418
|
-
# @param [Hash{
|
418
|
+
# @param [Hash{TargetDefinition => Array<ResolvedSpecification>}] resolver_specs_by_target
|
419
419
|
# mapping of targets to resolved specs (containing information about test usage)
|
420
420
|
# aggregate targets
|
421
421
|
#
|
422
|
-
# @param [
|
422
|
+
# @param [Hash{TargetDefinition => TargetInspectionResult}] target_inspections
|
423
423
|
# the user target inspections used to construct the aggregate and pod targets.
|
424
424
|
#
|
425
425
|
# @return [(Array<AggregateTarget>, Array<PodTarget>)] the list of aggregate targets generated,
|
@@ -442,7 +442,9 @@ module Pod
|
|
442
442
|
aggregate_targets.each do |aggregate_target|
|
443
443
|
is_app_extension = !(aggregate_target.user_targets.map(&:symbol_type) &
|
444
444
|
[:app_extension, :watch_extension, :watch2_extension, :tv_extension, :messages_extension]).empty?
|
445
|
-
is_app_extension ||= aggregate_target.user_targets.any?
|
445
|
+
is_app_extension ||= aggregate_target.user_targets.any? do |user_target|
|
446
|
+
user_target.common_resolved_build_setting('APPLICATION_EXTENSION_API_ONLY', :resolve_against_xcconfig => true) == 'YES'
|
447
|
+
end
|
446
448
|
|
447
449
|
next unless is_app_extension
|
448
450
|
|
@@ -456,7 +458,7 @@ module Pod
|
|
456
458
|
embedded_targets = aggregate_targets.select(&:requires_host_target?)
|
457
459
|
analyze_host_targets_in_podfile(aggregate_targets, embedded_targets)
|
458
460
|
|
459
|
-
use_frameworks_embedded_targets, non_use_frameworks_embedded_targets = embedded_targets.partition(&:
|
461
|
+
use_frameworks_embedded_targets, non_use_frameworks_embedded_targets = embedded_targets.partition(&:build_as_framework?)
|
460
462
|
aggregate_targets = aggregate_targets.map do |aggregate_target|
|
461
463
|
# For targets that require dynamic frameworks, we always have to copy their pods to their
|
462
464
|
# host targets because those frameworks will all be loaded from the host target's bundle
|
@@ -481,7 +483,7 @@ module Pod
|
|
481
483
|
# @param [Hash{TargetDefinition => TargetInspectionResult}] target_inspections
|
482
484
|
# the user target inspections used to construct the aggregate and pod targets.
|
483
485
|
#
|
484
|
-
# @param [Hash{
|
486
|
+
# @param [Hash{TargetDefinition => Array<PodTarget>}] pod_targets_by_target_definition
|
485
487
|
# the pod targets grouped by target.
|
486
488
|
#
|
487
489
|
# @return [AggregateTarget]
|
@@ -506,13 +508,12 @@ module Pod
|
|
506
508
|
end
|
507
509
|
platform = target_definition.platform
|
508
510
|
build_configurations = user_build_configurations.keys.concat(target_definition.all_whitelisted_configurations).uniq
|
509
|
-
pod_targets_for_build_configuration = filter_pod_targets_for_target_definition(target_definition,
|
511
|
+
pod_targets_for_build_configuration = filter_pod_targets_for_target_definition(target_definition,
|
512
|
+
pod_targets_by_target_definition,
|
510
513
|
build_configurations)
|
511
|
-
|
512
|
-
build_type
|
513
|
-
|
514
|
-
target_definition, client_root, user_project, user_target_uuids,
|
515
|
-
pod_targets_for_build_configuration, :build_type => build_type)
|
514
|
+
build_type = target_definition.uses_frameworks? ? BuildType.static_framework : BuildType.static_library
|
515
|
+
AggregateTarget.new(sandbox, build_type, user_build_configurations, archs, platform, target_definition,
|
516
|
+
client_root, user_project, user_target_uuids, pod_targets_for_build_configuration)
|
516
517
|
end
|
517
518
|
|
518
519
|
# Returns a filtered list of pod targets that should or should not be part of the target definition. Pod targets
|
@@ -542,16 +543,17 @@ module Pod
|
|
542
543
|
# @param [TargetDefinition] target_definition
|
543
544
|
# the target definition to use as the base for filtering
|
544
545
|
#
|
545
|
-
# @param [Hash{
|
546
|
+
# @param [Hash{TargetDefinition => Array<PodTarget>}] pod_targets_by_target_definition
|
546
547
|
# the pod targets grouped by target.
|
547
548
|
#
|
548
549
|
# @param [Array<String>] build_configurations
|
549
550
|
# The list of all build configurations the targets will be built for.
|
550
551
|
#
|
551
|
-
# @return [Hash
|
552
|
+
# @return [Hash{String => Array<PodTarget>}]
|
552
553
|
# the filtered list of pod targets, grouped by build configuration.
|
553
554
|
#
|
554
|
-
def filter_pod_targets_for_target_definition(target_definition, pod_targets_by_target_definition,
|
555
|
+
def filter_pod_targets_for_target_definition(target_definition, pod_targets_by_target_definition,
|
556
|
+
build_configurations)
|
555
557
|
pod_targets_by_build_config = Hash.new([].freeze)
|
556
558
|
build_configurations.each { |config| pod_targets_by_build_config[config] = [] }
|
557
559
|
|
@@ -588,7 +590,7 @@ module Pod
|
|
588
590
|
# targets by grouping by platform and subspec by their root
|
589
591
|
# to create a {PodTarget} for each spec.
|
590
592
|
#
|
591
|
-
# @param [Hash{
|
593
|
+
# @param [Hash{TargetDefinition => Array<ResolvedSpecification>}] resolver_specs_by_target
|
592
594
|
# the resolved specifications grouped by target.
|
593
595
|
#
|
594
596
|
# @param [Hash{TargetDefinition => TargetInspectionResult}] target_inspections
|
@@ -606,8 +608,8 @@ module Pod
|
|
606
608
|
library_specs = all_specs_by_type[:library] || []
|
607
609
|
test_specs = all_specs_by_type[:test] || []
|
608
610
|
app_specs = all_specs_by_type[:app] || []
|
609
|
-
|
610
|
-
pod_variant = PodVariant.new(library_specs, test_specs, app_specs, target_definition.platform,
|
611
|
+
build_type = determine_build_type(root_spec, target_definition.build_type)
|
612
|
+
pod_variant = PodVariant.new(library_specs, test_specs, app_specs, target_definition.platform, build_type)
|
611
613
|
hash[root_spec] ||= {}
|
612
614
|
(hash[root_spec][pod_variant] ||= []) << target_definition
|
613
615
|
pod_variant_spec = hash[root_spec].keys.find { |k| k == pod_variant }
|
@@ -616,13 +618,25 @@ module Pod
|
|
616
618
|
end
|
617
619
|
end
|
618
620
|
|
621
|
+
# Remap pod variants to a new instance that includes the Swift version since we now have the full set
|
622
|
+
# of target definitions.
|
623
|
+
distinct_targets = Hash[distinct_targets.map do |root, target_definitions_by_variant|
|
624
|
+
variants = Hash[target_definitions_by_variant.map do |variant, target_definitions|
|
625
|
+
swift_version = determine_swift_version(variant.root_spec, target_definitions)
|
626
|
+
[variant.scoped_with_swift_version(swift_version), target_definitions]
|
627
|
+
end]
|
628
|
+
[root, variants]
|
629
|
+
end]
|
630
|
+
|
619
631
|
pod_targets = distinct_targets.flat_map do |_root, target_definitions_by_variant|
|
620
632
|
target_definitions_by_variant.each_value do |target_definitions|
|
621
633
|
target_definitions.reject!(&:abstract?) unless target_definitions.all?(&:abstract?)
|
622
634
|
end
|
623
635
|
suffixes = PodVariantSet.new(target_definitions_by_variant.keys).scope_suffixes
|
624
636
|
target_definitions_by_variant.map do |variant, target_definitions|
|
625
|
-
|
637
|
+
all_specs = variant.specs + variant.test_specs + variant.app_specs
|
638
|
+
generate_pod_target(target_definitions, variant.build_type, target_inspections, all_specs,
|
639
|
+
:scope_suffix => suffixes[variant], :swift_version => variant.swift_version)
|
626
640
|
end
|
627
641
|
end
|
628
642
|
|
@@ -633,8 +647,8 @@ module Pod
|
|
633
647
|
resolver_specs_by_target.flat_map do |target_definition, specs|
|
634
648
|
grouped_specs = specs.group_by(&:root).values.uniq
|
635
649
|
pod_targets = grouped_specs.flat_map do |pod_specs|
|
636
|
-
|
637
|
-
generate_pod_target([target_definition], target_inspections, pod_specs.map(&:spec)
|
650
|
+
build_type = determine_build_type(pod_specs.first, target_definition.build_type)
|
651
|
+
generate_pod_target([target_definition], build_type, target_inspections, pod_specs.map(&:spec)).scoped(dedupe_cache)
|
638
652
|
end
|
639
653
|
|
640
654
|
compute_pod_target_dependencies(pod_targets, specs.map(&:spec).group_by(&:name))
|
@@ -660,23 +674,26 @@ module Pod
|
|
660
674
|
end
|
661
675
|
|
662
676
|
pod_targets.each do |target|
|
663
|
-
|
664
|
-
target.
|
665
|
-
|
666
|
-
|
667
|
-
|
668
|
-
|
677
|
+
dependencies_by_config = dependencies_for_specs(target.library_specs, target.platform, all_specs)
|
678
|
+
target.dependent_targets_by_config = Hash[dependencies_by_config.map { |k, v| [k, filter_dependencies(v, pod_targets_by_name, target)] }]
|
679
|
+
|
680
|
+
target.test_dependent_targets_by_spec_name_by_config = target.test_specs.each_with_object({}) do |test_spec, hash|
|
681
|
+
test_dependencies_by_config = dependencies_for_specs([test_spec], target.platform, all_specs)
|
682
|
+
test_dependencies_by_config.each { |config, deps| deps.delete_if { |k, _| dependencies_by_config[config].key? k } }
|
683
|
+
hash[test_spec.name] = Hash[test_dependencies_by_config.map { |k, v| [k, filter_dependencies(v, pod_targets_by_name, target)] }]
|
669
684
|
end
|
670
685
|
|
671
|
-
target.
|
672
|
-
|
673
|
-
|
674
|
-
hash[app_spec.name] = filter_dependencies(
|
686
|
+
target.app_dependent_targets_by_spec_name_by_config = target.app_specs.each_with_object({}) do |app_spec, hash|
|
687
|
+
app_dependencies_by_config = dependencies_for_specs([app_spec], target.platform, all_specs)
|
688
|
+
app_dependencies_by_config.each { |config, deps| deps.delete_if { |k, _| dependencies_by_config[config].key? k } }
|
689
|
+
hash[app_spec.name] = Hash[app_dependencies_by_config.map { |k, v| [k, filter_dependencies(v, pod_targets_by_name, target)] }]
|
675
690
|
end
|
676
691
|
|
677
692
|
target.test_app_hosts_by_spec_name = target.test_specs.each_with_object({}) do |test_spec, hash|
|
678
693
|
next unless app_host_name = test_spec.consumer(target.platform).app_host_name
|
679
|
-
app_host_spec = pod_targets_by_name[Specification.root_name(app_host_name)].flat_map(&:app_specs).find
|
694
|
+
app_host_spec = pod_targets_by_name[Specification.root_name(app_host_name)].flat_map(&:app_specs).find do |pt|
|
695
|
+
pt.name == app_host_name
|
696
|
+
end
|
680
697
|
app_host_dependencies = { app_host_spec.root => [app_host_spec] }
|
681
698
|
hash[test_spec.name] = [app_host_spec, filter_dependencies(app_host_dependencies, pod_targets_by_name, target).first]
|
682
699
|
end
|
@@ -687,7 +704,7 @@ module Pod
|
|
687
704
|
dependencies.map do |root_spec, deps|
|
688
705
|
pod_targets_by_name[root_spec.name].find do |t|
|
689
706
|
next false if t.platform.symbolic_name != target.platform.symbolic_name ||
|
690
|
-
t.
|
707
|
+
t.build_as_framework? != target.build_as_framework? # rather than target type or requires_frameworks? since we want to group by what was specified in that _target definition_
|
691
708
|
spec_names = t.specs.map(&:name)
|
692
709
|
deps.all? { |dep| spec_names.include?(dep.name) }
|
693
710
|
end
|
@@ -705,38 +722,48 @@ module Pod
|
|
705
722
|
# @param [Platform] platform
|
706
723
|
# The platform for which the dependencies should be returned.
|
707
724
|
#
|
708
|
-
# @param [Hash
|
725
|
+
# @param [Hash{String => Array<Specification>}] all_specs
|
709
726
|
# All specifications which are installed alongside.
|
710
727
|
#
|
711
|
-
# @return [
|
728
|
+
# @return [Hash{Symbol => Set<Specification>}]
|
712
729
|
#
|
713
730
|
def dependencies_for_specs(specs, platform, all_specs)
|
714
|
-
|
715
|
-
|
716
|
-
|
731
|
+
dependent_specs = {
|
732
|
+
:debug => Set.new,
|
733
|
+
:release => Set.new,
|
734
|
+
}
|
735
|
+
|
736
|
+
if !specs.empty? && !all_specs.empty?
|
737
|
+
specs.each do |s|
|
738
|
+
s.dependencies(platform).each do |dep|
|
739
|
+
all_specs[dep.name].each do |spec|
|
740
|
+
if spec.non_library_specification?
|
741
|
+
if s.test_specification? && spec.name == s.consumer(platform).app_host_name && spec.app_specification?
|
742
|
+
# This needs to be handled separately, since we _don't_ want to treat this as a "normal" dependency
|
743
|
+
next
|
744
|
+
end
|
745
|
+
raise Informative, "`#{s}` depends upon `#{spec}`, which is a `#{spec.spec_type}` spec."
|
746
|
+
end
|
717
747
|
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
if spec.non_library_specification?
|
722
|
-
if s.test_specification? && spec.name == s.consumer(platform).app_host_name && spec.app_specification?
|
723
|
-
# This needs to be handled separately, since we _don't_ want to treat this as a "normal" dependency
|
724
|
-
next
|
748
|
+
dependent_specs.each do |config, set|
|
749
|
+
next unless s.dependency_whitelisted_for_configuration?(dep, config)
|
750
|
+
set << spec
|
725
751
|
end
|
726
|
-
raise Informative, "#{s} depends upon `#{spec}`, which is a `#{spec.spec_type}` spec."
|
727
752
|
end
|
728
|
-
dependent_specs << spec
|
729
753
|
end
|
730
754
|
end
|
731
755
|
end
|
732
756
|
|
733
|
-
dependent_specs - specs
|
757
|
+
Hash[dependent_specs.map { |k, v| [k, (v - specs).group_by(&:root)] }].freeze
|
734
758
|
end
|
735
759
|
|
736
760
|
# Create a target for each spec group
|
737
761
|
#
|
738
762
|
# @param [Array<TargetDefinition>] target_definitions
|
739
|
-
# the target definitions of the
|
763
|
+
# the target definitions of the pod target
|
764
|
+
#
|
765
|
+
# @param [BuildType] build_type
|
766
|
+
# the BuildType to use for this pod target.
|
740
767
|
#
|
741
768
|
# @param [Hash{TargetDefinition => TargetInspectionResult}] target_inspections
|
742
769
|
# the user target inspections used to construct the aggregate and pod targets.
|
@@ -747,9 +774,13 @@ module Pod
|
|
747
774
|
# @param [String] scope_suffix
|
748
775
|
# @see PodTarget#scope_suffix
|
749
776
|
#
|
777
|
+
# @param [String] swift_version
|
778
|
+
# @see PodTarget#swift_version
|
779
|
+
#
|
750
780
|
# @return [PodTarget]
|
751
781
|
#
|
752
|
-
def generate_pod_target(target_definitions, target_inspections, specs, scope_suffix: nil,
|
782
|
+
def generate_pod_target(target_definitions, build_type, target_inspections, specs, scope_suffix: nil,
|
783
|
+
swift_version: nil)
|
753
784
|
target_inspections = target_inspections.select { |t, _| target_definitions.include?(t) }.values
|
754
785
|
object_version = target_inspections.map { |ti| ti.project.object_version }.min
|
755
786
|
target_requires_64_bit = target_definitions.all? { |td| Analyzer.requires_64_bit_archs?(td.platform, object_version) }
|
@@ -761,14 +792,15 @@ module Pod
|
|
761
792
|
target_inspections.flat_map(&:archs).compact.uniq.sort
|
762
793
|
end
|
763
794
|
else
|
764
|
-
user_build_configurations = Target::DEFAULT_BUILD_CONFIGURATIONS
|
795
|
+
user_build_configurations = Target::DEFAULT_BUILD_CONFIGURATIONS.merge(
|
796
|
+
target_definitions.map { |td| td.build_configurations || {} }.reduce({}, &:merge),
|
797
|
+
)
|
765
798
|
archs = target_requires_64_bit ? ['$(ARCHS_STANDARD_64_BIT)'] : []
|
766
799
|
end
|
767
|
-
|
768
|
-
platform = determine_platform(specs, target_definitions, host_requires_frameworks)
|
800
|
+
platform = determine_platform(specs, target_definitions, build_type)
|
769
801
|
file_accessors = create_file_accessors(specs, platform)
|
770
|
-
PodTarget.new(sandbox,
|
771
|
-
|
802
|
+
PodTarget.new(sandbox, build_type, user_build_configurations, archs, platform, specs, target_definitions,
|
803
|
+
file_accessors, scope_suffix, swift_version)
|
772
804
|
end
|
773
805
|
|
774
806
|
# Creates the file accessors for a given pod.
|
@@ -802,25 +834,71 @@ module Pod
|
|
802
834
|
# @param [Array<TargetDefinition>] target_definitions
|
803
835
|
# the target definitions these specs are part of.
|
804
836
|
#
|
805
|
-
# @param [
|
806
|
-
#
|
837
|
+
# @param [BuildType] build_type
|
838
|
+
# the #BuildType used for calculating the platform.
|
807
839
|
#
|
808
840
|
# @return [Platform]
|
809
841
|
#
|
810
|
-
def determine_platform(specs, target_definitions,
|
842
|
+
def determine_platform(specs, target_definitions, build_type)
|
811
843
|
library_specs = specs.select(&:library_specification?)
|
812
844
|
platform_name = target_definitions.first.platform.name
|
813
845
|
default = Podfile::TargetDefinition::PLATFORM_DEFAULTS[platform_name]
|
814
846
|
deployment_target = library_specs.map do |library_spec|
|
815
847
|
Version.new(library_spec.deployment_target(platform_name) || default)
|
816
848
|
end.max
|
817
|
-
if platform_name == :ios &&
|
849
|
+
if platform_name == :ios && build_type.framework?
|
818
850
|
minimum = Version.new('8.0')
|
819
851
|
deployment_target = [deployment_target, minimum].max
|
820
852
|
end
|
821
853
|
Platform.new(platform_name, deployment_target)
|
822
854
|
end
|
823
855
|
|
856
|
+
# Determines the Swift version for the given spec within a list of target definitions. If the pod author has
|
857
|
+
# provided a set of Swift versions supported by their pod then the max Swift version is chosen, unless the target
|
858
|
+
# definitions specify explicit requirements for supported Swift versions. Otherwise the Swift version is derived
|
859
|
+
# by the target definitions that integrate this pod.
|
860
|
+
#
|
861
|
+
# @param [Specification] spec
|
862
|
+
# the specs to inspect and determine what Swift version to use.
|
863
|
+
#
|
864
|
+
# @param [Array<TargetDefinition>] target_definitions
|
865
|
+
# the target definitions the spec is part of.
|
866
|
+
#
|
867
|
+
# @return [String, nil] the computed Swift version or `nil` if the Swift version could not be determined.
|
868
|
+
#
|
869
|
+
def determine_swift_version(spec, target_definitions)
|
870
|
+
if spec.swift_versions.empty?
|
871
|
+
target_definitions.map(&:swift_version).compact.uniq.first
|
872
|
+
else
|
873
|
+
spec.swift_versions.sort.reverse_each.find do |swift_version|
|
874
|
+
target_definitions.all? do |td|
|
875
|
+
td.supports_swift_version?(swift_version)
|
876
|
+
end
|
877
|
+
end.to_s
|
878
|
+
end
|
879
|
+
end
|
880
|
+
|
881
|
+
# Calculates and returns the #BuildType to use for the given spec. If the spec specifies `static_framework` then
|
882
|
+
# it is honored as long as the host #BuildType also requires its pods to be integrated as frameworks.
|
883
|
+
#
|
884
|
+
# @param [Specification] spec
|
885
|
+
# the spec to determine the #BuildType for.
|
886
|
+
#
|
887
|
+
# @param [BuildType] target_definition_build_type
|
888
|
+
# The desired #BuildType by the target definition that integrates this target. If the pod target spec does
|
889
|
+
# not specify explicitly a `static_framework` #BuildType then the one from the target definition is used.
|
890
|
+
#
|
891
|
+
# @return [BuildType]
|
892
|
+
#
|
893
|
+
def determine_build_type(spec, target_definition_build_type)
|
894
|
+
if target_definition_build_type.framework?
|
895
|
+
root_spec = spec.root
|
896
|
+
root_spec.static_framework ? BuildType.static_framework : target_definition_build_type
|
897
|
+
else
|
898
|
+
BuildType.static_library
|
899
|
+
end
|
900
|
+
end
|
901
|
+
|
824
902
|
# Generates dependencies that require the specific version of the Pods
|
825
903
|
# that haven't changed in the {Lockfile}.
|
826
904
|
#
|
@@ -19,15 +19,13 @@ module Pod
|
|
19
19
|
#
|
20
20
|
attr_reader :platform
|
21
21
|
|
22
|
-
# @return [
|
22
|
+
# @return [BuildType] the build type of the target
|
23
23
|
#
|
24
24
|
attr_reader :build_type
|
25
25
|
|
26
|
-
# @return [
|
26
|
+
# @return [String] the Swift version of the target.
|
27
27
|
#
|
28
|
-
|
29
|
-
specs.first.root
|
30
|
-
end
|
28
|
+
attr_reader :swift_version
|
31
29
|
|
32
30
|
# Initialize a new instance from its attributes.
|
33
31
|
#
|
@@ -35,26 +33,35 @@ module Pod
|
|
35
33
|
# @param [Array<Specification>] test_specs @see #test_specs
|
36
34
|
# @param [Array<Specification>] app_specs @see #app_specs
|
37
35
|
# @param [Platform] platform @see #platform
|
38
|
-
# @param [
|
36
|
+
# @param [BuildType] build_type @see #build_type
|
37
|
+
# @param [String] swift_version @see #swift_version
|
39
38
|
#
|
40
|
-
def initialize(specs, test_specs, app_specs, platform, build_type =
|
39
|
+
def initialize(specs, test_specs, app_specs, platform, build_type = BuildType.static_library,
|
40
|
+
swift_version = nil)
|
41
41
|
@specs = specs
|
42
42
|
@test_specs = test_specs
|
43
43
|
@app_specs = app_specs
|
44
44
|
@platform = platform
|
45
45
|
@build_type = build_type
|
46
|
-
@
|
46
|
+
@swift_version = swift_version
|
47
|
+
@hash = [specs, platform, build_type, swift_version].hash
|
48
|
+
end
|
49
|
+
|
50
|
+
# @return [Specification] the root specification
|
51
|
+
#
|
52
|
+
def root_spec
|
53
|
+
specs.first.root
|
47
54
|
end
|
48
55
|
|
49
|
-
# @note
|
50
|
-
#
|
56
|
+
# @note Non library specs are intentionally not included as part of the equality for pod variants since a pod
|
57
|
+
# variant should not be affected by the number of test nor app specs included.
|
51
58
|
#
|
52
|
-
# @return [Bool] whether the {PodVariant} is equal to another taking all
|
53
|
-
# all their attributes into account
|
59
|
+
# @return [Bool] whether the {PodVariant} is equal to another taking all all their attributes into account
|
54
60
|
#
|
55
61
|
def ==(other)
|
56
62
|
self.class == other.class &&
|
57
63
|
build_type == other.build_type &&
|
64
|
+
swift_version == other.swift_version &&
|
58
65
|
platform == other.platform &&
|
59
66
|
specs == other.specs
|
60
67
|
end
|
@@ -66,6 +73,14 @@ module Pod
|
|
66
73
|
#
|
67
74
|
# @!visibility private
|
68
75
|
attr_reader :hash
|
76
|
+
|
77
|
+
# @param [String] swift_version The swift version to use for this variant.
|
78
|
+
#
|
79
|
+
# @return [PodVariant] A copy of this pod variant with the specified Swift version.
|
80
|
+
#
|
81
|
+
def scoped_with_swift_version(swift_version)
|
82
|
+
PodVariant.new(specs, test_specs, app_specs, platform, build_type, swift_version)
|
83
|
+
end
|
69
84
|
end
|
70
85
|
end
|
71
86
|
end
|
@@ -98,7 +98,16 @@ module Pod
|
|
98
98
|
# => Platform name + SDK version
|
99
99
|
platform_name_proc = proc { |v| v.platform.to_s.tr(' ', '') }
|
100
100
|
end
|
101
|
-
scope_if_necessary(grouped_variants.map(&:
|
101
|
+
scope_if_necessary(grouped_variants.map(&:scope_by_swift_version), &platform_name_proc)
|
102
|
+
end
|
103
|
+
|
104
|
+
# @private
|
105
|
+
# @return [Hash<PodVariant, String>]
|
106
|
+
#
|
107
|
+
def scope_by_swift_version
|
108
|
+
scope_if_necessary(group_by(&:swift_version).map(&:scope_without_suffix)) do |variant|
|
109
|
+
variant.swift_version ? "Swift#{variant.swift_version}" : ''
|
110
|
+
end
|
102
111
|
end
|
103
112
|
|
104
113
|
# @private
|
@@ -113,7 +122,7 @@ module Pod
|
|
113
122
|
root_spec.default_subspecs.map do |subspec_name|
|
114
123
|
root_spec.subspec_by_name("#{root_spec.name}/#{subspec_name}")
|
115
124
|
end
|
116
|
-
|
125
|
+
end
|
117
126
|
default_specs = Set.new(specs)
|
118
127
|
grouped_variants = group_by(&:specs)
|
119
128
|
all_spec_variants = grouped_variants.map { |set| set.variants.first.specs }
|