cocoapods 1.7.5 → 1.8.0.beta.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +175 -11
- data/LICENSE +13 -8
- data/README.md +2 -1
- data/lib/cocoapods/command/init.rb +18 -16
- data/lib/cocoapods/command/install.rb +2 -1
- data/lib/cocoapods/command/lib/create.rb +1 -2
- data/lib/cocoapods/command/lib/lint.rb +12 -11
- data/lib/cocoapods/command/repo/add.rb +2 -2
- data/lib/cocoapods/command/repo/list.rb +7 -5
- data/lib/cocoapods/command/repo/push.rb +15 -12
- data/lib/cocoapods/command/setup.rb +2 -88
- data/lib/cocoapods/command/spec/lint.rb +10 -9
- data/lib/cocoapods/command/update.rb +5 -4
- data/lib/cocoapods/config.rb +9 -8
- data/lib/cocoapods/external_sources/path_source.rb +1 -1
- data/lib/cocoapods/gem_version.rb +1 -1
- data/lib/cocoapods/generator/embed_frameworks_script.rb +1 -1
- data/lib/cocoapods/generator/info_plist_file.rb +2 -2
- data/lib/cocoapods/installer.rb +32 -12
- data/lib/cocoapods/installer/analyzer.rb +132 -97
- data/lib/cocoapods/installer/analyzer/target_inspector.rb +6 -8
- data/lib/cocoapods/installer/installation_options.rb +4 -0
- data/lib/cocoapods/installer/pod_source_installer.rb +17 -1
- data/lib/cocoapods/installer/podfile_validator.rb +26 -6
- data/lib/cocoapods/installer/project_cache/project_cache_analyzer.rb +37 -27
- data/lib/cocoapods/installer/project_cache/project_cache_version.rb +1 -1
- data/lib/cocoapods/installer/project_cache/project_installation_cache.rb +3 -3
- data/lib/cocoapods/installer/project_cache/project_metadata_cache.rb +12 -6
- data/lib/cocoapods/installer/project_cache/target_cache_key.rb +32 -8
- data/lib/cocoapods/installer/project_cache/target_metadata.rb +6 -2
- data/lib/cocoapods/installer/sandbox_dir_cleaner.rb +12 -0
- data/lib/cocoapods/installer/user_project_integrator/target_integrator/xcconfig_integrator.rb +1 -1
- data/lib/cocoapods/installer/xcode/multi_pods_project_generator.rb +3 -1
- data/lib/cocoapods/installer/xcode/pods_project_generator/aggregate_target_dependency_installer.rb +2 -2
- data/lib/cocoapods/installer/xcode/pods_project_generator/app_host_installer.rb +18 -3
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_dependency_installer.rb +53 -11
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb +92 -60
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_integrator.rb +66 -50
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installation_result.rb +12 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer.rb +6 -2
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer_helper.rb +2 -2
- data/lib/cocoapods/installer/xcode/target_validator.rb +30 -14
- data/lib/cocoapods/native_target_extension.rb +11 -5
- data/lib/cocoapods/open-uri.rb +1 -1
- data/lib/cocoapods/project.rb +13 -7
- data/lib/cocoapods/resolver.rb +63 -53
- data/lib/cocoapods/resolver/lazy_specification.rb +14 -5
- data/lib/cocoapods/sandbox.rb +35 -2
- data/lib/cocoapods/sandbox/pod_dir_cleaner.rb +3 -4
- data/lib/cocoapods/sources_manager.rb +72 -43
- data/lib/cocoapods/target.rb +7 -1
- data/lib/cocoapods/target/aggregate_target.rb +13 -8
- data/lib/cocoapods/target/build_settings.rb +33 -10
- data/lib/cocoapods/target/pod_target.rb +114 -30
- data/lib/cocoapods/user_interface/error_report.rb +9 -5
- data/lib/cocoapods/validator.rb +55 -11
- data/lib/cocoapods/version_metadata.rb +14 -1
- metadata +6 -7
- data/lib/cocoapods/command/spec/env_spec.rb +0 -53
@@ -58,6 +58,10 @@ module Pod
|
|
58
58
|
#
|
59
59
|
attr_accessor :app_dependent_targets_by_spec_name
|
60
60
|
|
61
|
+
# @return [Hash{String => (Specification,PodTarget)}] tuples of app specs and pod targets by test spec name.
|
62
|
+
#
|
63
|
+
attr_accessor :test_app_hosts_by_spec_name
|
64
|
+
|
61
65
|
# @return [Hash{String => BuildSettings}] the test spec build settings for this target.
|
62
66
|
#
|
63
67
|
attr_reader :test_spec_build_settings
|
@@ -85,7 +89,6 @@ module Pod
|
|
85
89
|
super(sandbox, host_requires_frameworks, user_build_configurations, archs, platform, :build_type => build_type)
|
86
90
|
raise "Can't initialize a PodTarget without specs!" if specs.nil? || specs.empty?
|
87
91
|
raise "Can't initialize a PodTarget without TargetDefinition!" if target_definitions.nil? || target_definitions.empty?
|
88
|
-
raise "Can't initialize a PodTarget with only abstract TargetDefinitions!" if target_definitions.all?(&:abstract?)
|
89
92
|
raise "Can't initialize a PodTarget with an empty string scope suffix!" if scope_suffix == ''
|
90
93
|
@specs = specs.dup.freeze
|
91
94
|
@target_definitions = target_definitions
|
@@ -99,6 +102,7 @@ module Pod
|
|
99
102
|
@dependent_targets = []
|
100
103
|
@test_dependent_targets_by_spec_name = {}
|
101
104
|
@app_dependent_targets_by_spec_name = {}
|
105
|
+
@test_app_hosts_by_spec_name = {}
|
102
106
|
@build_config_cache = {}
|
103
107
|
@test_spec_build_settings = create_test_build_settings
|
104
108
|
@app_spec_build_settings = create_app_build_settings
|
@@ -114,22 +118,27 @@ module Pod
|
|
114
118
|
def scoped(cache = {})
|
115
119
|
target_definitions.map do |target_definition|
|
116
120
|
cache_key = [specs, target_definition]
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
121
|
+
cache[cache_key] ||= begin
|
122
|
+
target = PodTarget.new(sandbox, host_requires_frameworks, user_build_configurations, archs, platform,
|
123
|
+
specs, [target_definition], file_accessors, target_definition.label,
|
124
|
+
:build_type => build_type)
|
125
|
+
scope_dependent_targets = ->(dependent_targets) do
|
126
|
+
dependent_targets.flat_map do |pod_target|
|
127
|
+
pod_target.scoped(cache).select { |pt| pt.target_definitions == [target_definition] }
|
128
|
+
end
|
125
129
|
end
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
130
|
+
|
131
|
+
target.dependent_targets = scope_dependent_targets[dependent_targets]
|
132
|
+
target.test_dependent_targets_by_spec_name = Hash[test_dependent_targets_by_spec_name.map do |spec_name, test_pod_targets|
|
133
|
+
[spec_name, scope_dependent_targets[test_pod_targets]]
|
134
|
+
end]
|
135
|
+
target.app_dependent_targets_by_spec_name = Hash[app_dependent_targets_by_spec_name.map do |spec_name, app_pod_targets|
|
136
|
+
[spec_name, scope_dependent_targets[app_pod_targets]]
|
137
|
+
end]
|
138
|
+
target.test_app_hosts_by_spec_name = Hash[test_app_hosts_by_spec_name.map do |spec_name, (app_host_spec, app_pod_target)|
|
139
|
+
[spec_name, [app_host_spec, app_pod_target.scoped(cache).find { |pt| pt.target_definitions == [target_definition] }]]
|
140
|
+
end]
|
141
|
+
target
|
133
142
|
end
|
134
143
|
end
|
135
144
|
end
|
@@ -217,6 +226,16 @@ module Pod
|
|
217
226
|
target_definitions.first.podfile
|
218
227
|
end
|
219
228
|
|
229
|
+
# @return [String] the project name derived from the target definitions that integrate this pod. If none is
|
230
|
+
# specified then the name of the pod is used by default.
|
231
|
+
#
|
232
|
+
# @note The name is guaranteed to be the same across all target definitions and is validated by the target
|
233
|
+
# validator during installation.
|
234
|
+
#
|
235
|
+
def project_name
|
236
|
+
target_definitions.map { |td| td.project_name_for_pod(pod_name) }.compact.first || pod_name
|
237
|
+
end
|
238
|
+
|
220
239
|
# @return [String] The name to use for the source code module constructed
|
221
240
|
# for this target, and which will be used to import the module in
|
222
241
|
# implementation source files.
|
@@ -364,7 +383,7 @@ module Pod
|
|
364
383
|
end
|
365
384
|
FrameworkPaths.new(framework_source, dsym_source, bcsymbolmap_paths)
|
366
385
|
end
|
367
|
-
if
|
386
|
+
if file_accessor.spec.library_specification? && should_build? && build_as_dynamic_framework?
|
368
387
|
frameworks << FrameworkPaths.new(build_product_path('${BUILT_PRODUCTS_DIR}'))
|
369
388
|
end
|
370
389
|
hash[file_accessor.spec.name] = frameworks
|
@@ -379,8 +398,13 @@ module Pod
|
|
379
398
|
def resource_paths
|
380
399
|
@resource_paths ||= begin
|
381
400
|
file_accessors.each_with_object({}) do |file_accessor, hash|
|
382
|
-
resource_paths = file_accessor.
|
383
|
-
|
401
|
+
resource_paths = if file_accessor.spec.non_library_specification? && build_as_framework?
|
402
|
+
[]
|
403
|
+
else
|
404
|
+
file_accessor.resources.map do |res|
|
405
|
+
"${PODS_ROOT}/#{res.relative_path_from(sandbox.project_path.dirname)}"
|
406
|
+
end
|
407
|
+
end
|
384
408
|
prefix = Pod::Target::BuildSettings::CONFIGURATION_BUILD_DIR_VARIABLE
|
385
409
|
prefix = configuration_build_dir unless file_accessor.spec.test_specification?
|
386
410
|
resource_bundle_paths = file_accessor.resource_bundles.keys.map { |name| "#{prefix}/#{name.shellescape}.bundle" }
|
@@ -389,6 +413,16 @@ module Pod
|
|
389
413
|
end
|
390
414
|
end
|
391
415
|
|
416
|
+
# @param [Specification] spec The non library spec to calculate the deployment target for.
|
417
|
+
#
|
418
|
+
# @return [String] The deployment target to use for the non library spec. If the spec provides one then that is the
|
419
|
+
# one used otherwise the one for the whole target is used.
|
420
|
+
#
|
421
|
+
def deployment_target_for_non_library_spec(spec)
|
422
|
+
raise ArgumentError, 'Must be a non library spec.' unless spec.non_library_specification?
|
423
|
+
spec.deployment_target(platform.name)
|
424
|
+
end
|
425
|
+
|
392
426
|
# Returns the corresponding native product type to use given the test type.
|
393
427
|
# This is primarily used when creating the native targets in order to produce the correct test bundle target
|
394
428
|
# based on the type of tests included.
|
@@ -402,6 +436,27 @@ module Pod
|
|
402
436
|
case test_type
|
403
437
|
when :unit
|
404
438
|
:unit_test_bundle
|
439
|
+
when :ui
|
440
|
+
:ui_test_bundle
|
441
|
+
else
|
442
|
+
raise ArgumentError, "Unknown test type `#{test_type}`."
|
443
|
+
end
|
444
|
+
end
|
445
|
+
|
446
|
+
# Returns the label to use for the given test type.
|
447
|
+
# This is used to generate native target names for test specs.
|
448
|
+
#
|
449
|
+
# @param [Symbol] test_type
|
450
|
+
# The test type to map to provided by the test specification DSL.
|
451
|
+
#
|
452
|
+
# @return [String] The native product type to use.
|
453
|
+
#
|
454
|
+
def label_for_test_type(test_type)
|
455
|
+
case test_type
|
456
|
+
when :unit
|
457
|
+
'Unit'
|
458
|
+
when :ui
|
459
|
+
'UI'
|
405
460
|
else
|
406
461
|
raise ArgumentError, "Unknown test type `#{test_type}`."
|
407
462
|
end
|
@@ -439,6 +494,12 @@ module Pod
|
|
439
494
|
support_files_dir + "#{label}-prefix.pch"
|
440
495
|
end
|
441
496
|
|
497
|
+
# @return [Hash] the additional entries to add to the generated Info.plist
|
498
|
+
#
|
499
|
+
def info_plist_entries
|
500
|
+
root_spec.info_plist
|
501
|
+
end
|
502
|
+
|
442
503
|
# @param [String] bundle_name
|
443
504
|
# The name of the bundle product, which is given by the +spec+.
|
444
505
|
#
|
@@ -464,7 +525,7 @@ module Pod
|
|
464
525
|
# @return [String] The derived name of the test target.
|
465
526
|
#
|
466
527
|
def test_target_label(test_spec)
|
467
|
-
"#{label}-#{test_spec.test_type
|
528
|
+
"#{label}-#{label_for_test_type(test_spec.test_type)}-#{subspec_label(test_spec)}"
|
468
529
|
end
|
469
530
|
|
470
531
|
# @param [Specification] app_spec
|
@@ -476,6 +537,38 @@ module Pod
|
|
476
537
|
"#{label}-#{subspec_label(app_spec)}"
|
477
538
|
end
|
478
539
|
|
540
|
+
# @param [Specification] test_spec
|
541
|
+
# the test spec to use for producing the app host target label.
|
542
|
+
#
|
543
|
+
# @return [(String,String)] a tuple, where the first item is the PodTarget#label of the pod target that defines the
|
544
|
+
# app host, and the second item is the target name of the app host
|
545
|
+
#
|
546
|
+
def app_host_target_label(test_spec)
|
547
|
+
app_spec, app_target = test_app_hosts_by_spec_name[test_spec.name]
|
548
|
+
|
549
|
+
if app_spec
|
550
|
+
[app_target.name, app_target.app_target_label(app_spec)]
|
551
|
+
elsif test_spec.consumer(platform).requires_app_host?
|
552
|
+
[name, "AppHost-#{label}-#{label_for_test_type(test_spec.test_type)}-Tests"]
|
553
|
+
end
|
554
|
+
end
|
555
|
+
|
556
|
+
# @param [Specification] spec
|
557
|
+
# the spec to return app host dependencies for
|
558
|
+
#
|
559
|
+
# @return [Array<PodTarget>] the app host dependent targets for the given spec.
|
560
|
+
#
|
561
|
+
def app_host_dependent_targets_for_spec(spec)
|
562
|
+
return [] unless spec.test_specification? && spec.consumer(platform).test_type == :unit
|
563
|
+
app_host_info = test_app_hosts_by_spec_name[spec.name]
|
564
|
+
if app_host_info.nil?
|
565
|
+
[]
|
566
|
+
else
|
567
|
+
app_spec, app_target = *app_host_info
|
568
|
+
app_target.dependent_targets_for_app_spec(app_spec)
|
569
|
+
end
|
570
|
+
end
|
571
|
+
|
479
572
|
def non_library_spec_label(spec)
|
480
573
|
case spec.spec_type
|
481
574
|
when :test then test_target_label(spec)
|
@@ -677,7 +770,7 @@ module Pod
|
|
677
770
|
whitelists.first
|
678
771
|
else
|
679
772
|
UI.warn "The pod `#{pod_name}` is linked to different targets " \
|
680
|
-
"(#{target_definitions.map { |td| "`#{td.
|
773
|
+
"(#{target_definitions.map { |td| "`#{td.name}`" }.to_sentence}), which contain different " \
|
681
774
|
'settings to inhibit warnings. CocoaPods does not currently ' \
|
682
775
|
'support different settings and will fall back to your preference ' \
|
683
776
|
'set in the root target definition.'
|
@@ -774,15 +867,6 @@ module Pod
|
|
774
867
|
|
775
868
|
private
|
776
869
|
|
777
|
-
def scope_dependent_pod_targets(cache, dependent_targets, target_definitions)
|
778
|
-
Hash[dependent_targets.map do |spec_name, pod_targets|
|
779
|
-
scoped_pod_targets = pod_targets.flat_map do |pod_target|
|
780
|
-
pod_target.scoped(cache).select { |pt| pt.target_definitions == target_definitions }
|
781
|
-
end
|
782
|
-
[spec_name, scoped_pod_targets]
|
783
|
-
end]
|
784
|
-
end
|
785
|
-
|
786
870
|
def create_build_settings
|
787
871
|
BuildSettings::PodTargetSettings.new(self)
|
788
872
|
end
|
@@ -171,12 +171,16 @@ EOS
|
|
171
171
|
|
172
172
|
def repo_information
|
173
173
|
Config.instance.sources_manager.all.map do |source|
|
174
|
-
next unless source.type == 'file system'
|
175
174
|
repo = source.repo
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
175
|
+
if source.is_a?(Pod::CDNSource)
|
176
|
+
"#{repo.basename} - CDN - #{source.url}"
|
177
|
+
elsif source.git?
|
178
|
+
Dir.chdir(repo) do
|
179
|
+
sha = `git rev-parse HEAD 2>&1`.strip
|
180
|
+
"#{repo.basename} - git - #{source.url} @ #{sha}"
|
181
|
+
end
|
182
|
+
else
|
183
|
+
"#{repo.basename} - #{source.type}"
|
180
184
|
end
|
181
185
|
end
|
182
186
|
end
|
data/lib/cocoapods/validator.rb
CHANGED
@@ -35,7 +35,7 @@ module Pod
|
|
35
35
|
# @param [Array<String>] source_urls
|
36
36
|
# the Source URLs to use in creating a {Podfile}.
|
37
37
|
#
|
38
|
-
# @param
|
38
|
+
# @param [Array<String>] platforms
|
39
39
|
# the platforms to lint.
|
40
40
|
#
|
41
41
|
def initialize(spec_or_path, source_urls, platforms = [])
|
@@ -239,6 +239,10 @@ module Pod
|
|
239
239
|
#
|
240
240
|
attr_accessor :skip_tests
|
241
241
|
|
242
|
+
# @return [Bool] Whether the validator should run Xcode Static Analysis.
|
243
|
+
#
|
244
|
+
attr_accessor :analyze
|
245
|
+
|
242
246
|
# @return [Bool] Whether frameworks should be used for the installation.
|
243
247
|
#
|
244
248
|
attr_accessor :use_frameworks
|
@@ -411,13 +415,18 @@ module Pod
|
|
411
415
|
end
|
412
416
|
end
|
413
417
|
|
418
|
+
# @return [Consumer] the consumer for the current platform being validated
|
419
|
+
#
|
414
420
|
attr_accessor :consumer
|
421
|
+
|
422
|
+
# @return [String, Nil] the name of the current subspec being validated, or nil if none
|
423
|
+
#
|
415
424
|
attr_accessor :subspec_name
|
416
425
|
|
417
426
|
# Performs validation of a URL
|
418
427
|
#
|
419
|
-
def validate_url(url)
|
420
|
-
resp = Pod::HTTP.validate_url(url)
|
428
|
+
def validate_url(url, user_agent = nil)
|
429
|
+
resp = Pod::HTTP.validate_url(url, user_agent)
|
421
430
|
|
422
431
|
if !resp
|
423
432
|
warning('url', "There was a problem validating the URL #{url}.", true)
|
@@ -450,7 +459,7 @@ module Pod
|
|
450
459
|
# Performs validations related to the `social_media_url` attribute.
|
451
460
|
#
|
452
461
|
def validate_social_media_url(spec)
|
453
|
-
validate_url(spec.social_media_url) if spec.social_media_url
|
462
|
+
validate_url(spec.social_media_url, 'CocoaPods') if spec.social_media_url
|
454
463
|
end
|
455
464
|
|
456
465
|
# Performs validations related to the `documentation_url` attribute.
|
@@ -527,10 +536,14 @@ module Pod
|
|
527
536
|
end
|
528
537
|
|
529
538
|
def tear_down_validation_environment
|
530
|
-
|
539
|
+
clean! unless no_clean
|
531
540
|
Config.instance = @original_config
|
532
541
|
end
|
533
542
|
|
543
|
+
def clean!
|
544
|
+
validation_dir.rmtree
|
545
|
+
end
|
546
|
+
|
534
547
|
def deployment_target
|
535
548
|
deployment_target = spec.subspec_by_name(subspec_name).deployment_target(consumer.platform_name)
|
536
549
|
if consumer.platform_name == :ios && use_frameworks
|
@@ -591,11 +604,15 @@ module Pod
|
|
591
604
|
perform_post_install_actions).each { |m| @installer.send(m) }
|
592
605
|
|
593
606
|
deployment_target = spec.subspec_by_name(subspec_name).deployment_target(consumer.platform_name)
|
594
|
-
configure_pod_targets(@installer.
|
607
|
+
configure_pod_targets(@installer.target_installation_results)
|
608
|
+
validate_dynamic_framework_support(@installer.aggregate_targets, deployment_target)
|
595
609
|
@installer.pods_project.save
|
596
610
|
end
|
597
611
|
|
598
|
-
|
612
|
+
# @param [Array<Hash{String, TargetInstallationResult}>] target_installation_results
|
613
|
+
# The installation results to configure
|
614
|
+
#
|
615
|
+
def configure_pod_targets(target_installation_results)
|
599
616
|
target_installation_results.first.values.each do |pod_target_installation_result|
|
600
617
|
pod_target = pod_target_installation_result.target
|
601
618
|
native_target = pod_target_installation_result.native_target
|
@@ -626,9 +643,21 @@ module Pod
|
|
626
643
|
end
|
627
644
|
end
|
628
645
|
end
|
629
|
-
|
630
|
-
|
631
|
-
|
646
|
+
end
|
647
|
+
|
648
|
+
# Produces an error of dynamic frameworks were requested but are not supported by the deployment target
|
649
|
+
#
|
650
|
+
# @param [Array<AggregateTarget>] aggregate_targets
|
651
|
+
# The aggregate targets installed by the installer
|
652
|
+
#
|
653
|
+
# @param [String,Version] deployment_target
|
654
|
+
# The deployment target of the installation
|
655
|
+
#
|
656
|
+
def validate_dynamic_framework_support(aggregate_targets, deployment_target)
|
657
|
+
return unless consumer.platform_name == :ios
|
658
|
+
return unless deployment_target.nil? || Version.new(deployment_target).major < 8
|
659
|
+
aggregate_targets.each do |target|
|
660
|
+
if target.pod_targets.any?(&:uses_swift?)
|
632
661
|
uses_xctest = target.spec_consumers.any? { |c| (c.frameworks + c.weak_frameworks).include? 'XCTest' }
|
633
662
|
error('swift', 'Swift support uses dynamic frameworks and is therefore only supported on iOS > 8.') unless uses_xctest
|
634
663
|
end
|
@@ -669,7 +698,18 @@ module Pod
|
|
669
698
|
if scheme.nil?
|
670
699
|
UI.warn "Skipping compilation with `xcodebuild` because target contains no sources.\n".yellow
|
671
700
|
else
|
672
|
-
|
701
|
+
if analyze
|
702
|
+
output = xcodebuild('analyze', scheme, 'Release')
|
703
|
+
find_output = Executable.execute_command('find', [validation_dir, '-name', '*.html'], false)
|
704
|
+
if find_output != ''
|
705
|
+
message = 'Static Analysis failed.'
|
706
|
+
message += ' You can use `--verbose` for more information.' unless config.verbose?
|
707
|
+
message += ' You can use `--no-clean` to save a reproducible buid environment.' unless no_clean
|
708
|
+
error('build_pod', message)
|
709
|
+
end
|
710
|
+
else
|
711
|
+
output = xcodebuild('build', scheme, 'Release')
|
712
|
+
end
|
673
713
|
parsed_output = parse_xcodebuild_output(output)
|
674
714
|
translate_output_to_linter_messages(parsed_output)
|
675
715
|
end
|
@@ -1007,6 +1047,10 @@ module Pod
|
|
1007
1047
|
command += Fourflusher::SimControl.new.destination(:oldest, 'tvOS', deployment_target)
|
1008
1048
|
end
|
1009
1049
|
|
1050
|
+
if analyze
|
1051
|
+
command += %w(CLANG_ANALYZER_OUTPUT=html CLANG_ANALYZER_OUTPUT_DIR=analyzer)
|
1052
|
+
end
|
1053
|
+
|
1010
1054
|
begin
|
1011
1055
|
_xcodebuild(command, true)
|
1012
1056
|
rescue => e
|
@@ -7,7 +7,20 @@ module Pod
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def self.project_cache_version
|
10
|
-
|
10
|
+
[
|
11
|
+
gem_version,
|
12
|
+
cocoapods_sha,
|
13
|
+
'project-cache',
|
14
|
+
CACHE_VERSION,
|
15
|
+
].compact.join('.')
|
11
16
|
end
|
17
|
+
|
18
|
+
def self.cocoapods_sha
|
19
|
+
return unless gemspec = Gem.loaded_specs['cocoapods']
|
20
|
+
return unless source = gemspec.source
|
21
|
+
return unless source.respond_to?(:revision)
|
22
|
+
source.revision
|
23
|
+
end
|
24
|
+
private_class_method :cocoapods_sha
|
12
25
|
end
|
13
26
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cocoapods
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.8.0.beta.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eloy Duran
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2019-
|
14
|
+
date: 2019-08-05 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: cocoapods-core
|
@@ -19,14 +19,14 @@ dependencies:
|
|
19
19
|
requirements:
|
20
20
|
- - '='
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 1.
|
22
|
+
version: 1.8.0.beta.1
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - '='
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 1.
|
29
|
+
version: 1.8.0.beta.1
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: claide
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -207,7 +207,7 @@ dependencies:
|
|
207
207
|
requirements:
|
208
208
|
- - ">="
|
209
209
|
- !ruby/object:Gem::Version
|
210
|
-
version: 1.
|
210
|
+
version: 1.11.1
|
211
211
|
- - "<"
|
212
212
|
- !ruby/object:Gem::Version
|
213
213
|
version: '2.0'
|
@@ -217,7 +217,7 @@ dependencies:
|
|
217
217
|
requirements:
|
218
218
|
- - ">="
|
219
219
|
- !ruby/object:Gem::Version
|
220
|
-
version: 1.
|
220
|
+
version: 1.11.1
|
221
221
|
- - "<"
|
222
222
|
- !ruby/object:Gem::Version
|
223
223
|
version: '2.0'
|
@@ -430,7 +430,6 @@ files:
|
|
430
430
|
- lib/cocoapods/command/spec/cat.rb
|
431
431
|
- lib/cocoapods/command/spec/create.rb
|
432
432
|
- lib/cocoapods/command/spec/edit.rb
|
433
|
-
- lib/cocoapods/command/spec/env_spec.rb
|
434
433
|
- lib/cocoapods/command/spec/lint.rb
|
435
434
|
- lib/cocoapods/command/spec/which.rb
|
436
435
|
- lib/cocoapods/command/update.rb
|