cocoapods 1.0.0.beta.4 → 1.0.0.beta.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 +4 -4
- data/CHANGELOG.md +51 -0
- data/lib/cocoapods/command/lib.rb +1 -1
- data/lib/cocoapods/command/project.rb +7 -7
- data/lib/cocoapods/executable.rb +20 -5
- data/lib/cocoapods/external_sources/podspec_source.rb +1 -1
- data/lib/cocoapods/gem_version.rb +1 -1
- data/lib/cocoapods/generator/copy_resources_script.rb +1 -3
- data/lib/cocoapods/installer.rb +4 -6
- data/lib/cocoapods/installer/analyzer.rb +11 -7
- data/lib/cocoapods/installer/analyzer/locking_dependency_analyzer.rb +22 -7
- data/lib/cocoapods/installer/analyzer/pod_variant_set.rb +6 -6
- data/lib/cocoapods/installer/target_installer/aggregate_target_installer.rb +11 -8
- data/lib/cocoapods/installer/target_installer/pod_target_installer.rb +6 -6
- data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +20 -5
- data/lib/cocoapods/project.rb +5 -4
- data/lib/cocoapods/resolver.rb +31 -8
- data/lib/cocoapods/sandbox/file_accessor.rb +5 -5
- data/lib/cocoapods/sources_manager.rb +4 -3
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 351bd282c885de91d29ea0ce21df2f9fbebe22ad
|
4
|
+
data.tar.gz: a2b17616d19c1cc6971232c77fde0e36c1c559e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b165cefed02d0efd9088f9acfaad7ca9e92a07df8e827b655965a9a42eabbc25796bd716e5fc7fd28feb3975411d5b7b57904bb1b8cd5b67c6d8944057ba79a9
|
7
|
+
data.tar.gz: 172057ccdbbba5eac50a33abb6d611d9f5409db97748e1fd36e348a8fbdea458101f534bfc4d4f0849f05e8a7cb9fc54dd4609dfff100525c8182f7fc9a0ef37
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,57 @@ To install or update CocoaPods see this [guide](http://docs.cocoapods.org/guides
|
|
4
4
|
|
5
5
|
To install release candidates run `[sudo] gem install cocoapods --pre`
|
6
6
|
|
7
|
+
## 1.0.0.beta.5 (2016-03-08)
|
8
|
+
|
9
|
+
##### Breaking
|
10
|
+
|
11
|
+
* Development pods will no longer be implicitly unlocked. This makes CocoaPods
|
12
|
+
to respect constraints related to dependencies of development pods in the
|
13
|
+
lockfile.
|
14
|
+
|
15
|
+
If you change constraints of a dependency of your development pod, and want to
|
16
|
+
override the locked version, you will have to use
|
17
|
+
`pod update ${DEPENDENCY_NAME}` manually.
|
18
|
+
[Muhammed Yavuz Nuzumlalı](https://github.com/manuyavuz)
|
19
|
+
[#4211](https://github.com/CocoaPods/CocoaPods/issues/4211)
|
20
|
+
[#4577](https://github.com/CocoaPods/CocoaPods/issues/4577)
|
21
|
+
[#4580](https://github.com/CocoaPods/CocoaPods/issues/4580)
|
22
|
+
|
23
|
+
##### Enhancements
|
24
|
+
|
25
|
+
* Add the :package: emoji in front of CocoaPods Script Build Phases
|
26
|
+
to quickly and visually differentiate them from other phases.
|
27
|
+
[Olivier Halligon](https://github.com/AliSoftware)
|
28
|
+
[#4985](https://github.com/CocoaPods/CocoaPods/issues/4985)
|
29
|
+
|
30
|
+
* Enable syntax highlighting on the Podfile in the generated
|
31
|
+
`Pods.xcodeproj`.
|
32
|
+
[Samuel Giddins](https://github.com/segiddins)
|
33
|
+
[#4962](https://github.com/CocoaPods/CocoaPods/issues/4962)
|
34
|
+
|
35
|
+
##### Bug Fixes
|
36
|
+
|
37
|
+
* Fixes paths passed for resources bundles in the copy resources script.
|
38
|
+
[Marius Rackwitz](https://github.com/mrackwitz)
|
39
|
+
[#4954](https://github.com/CocoaPods/CocoaPods/pull/4954)
|
40
|
+
|
41
|
+
* Fix saying the `master` specs repo exists when it has not been set up.
|
42
|
+
[Samuel Giddins](https://github.com/segiddins)
|
43
|
+
[#4955](https://github.com/CocoaPods/CocoaPods/issues/4955)
|
44
|
+
|
45
|
+
* Move `${TARGET_DEVICE_ARGS}` out of the quotations for `--sdk` in the
|
46
|
+
`Copy Pods Resources` build phase.
|
47
|
+
[seaders](https://github.com/seaders) [#4940](https://github.com/CocoaPods/CocoaPods/issues/4940)
|
48
|
+
|
49
|
+
* Handle when `$PATH` isn't set.
|
50
|
+
[Samuel Giddins](https://github.com/segiddins)
|
51
|
+
|
52
|
+
* Module maps that are set per-platform will be installed for the correct
|
53
|
+
platform.
|
54
|
+
[Samuel Giddins](https://github.com/segiddins)
|
55
|
+
[#4968](https://github.com/CocoaPods/CocoaPods/issues/4968)
|
56
|
+
|
57
|
+
|
7
58
|
## 1.0.0.beta.4 (2016-02-24)
|
8
59
|
|
9
60
|
##### Enhancements
|
@@ -37,7 +37,7 @@ module Pod
|
|
37
37
|
def validate!
|
38
38
|
super
|
39
39
|
help! 'A name for the Pod is required.' unless @name
|
40
|
-
help! 'The Pod name cannot contain spaces.' if @name
|
40
|
+
help! 'The Pod name cannot contain spaces.' if @name =~ /\s/
|
41
41
|
help! "The Pod name cannot begin with a '.'" if @name[0, 1] == '.'
|
42
42
|
end
|
43
43
|
|
@@ -135,13 +135,13 @@ module Pod
|
|
135
135
|
!lockfile_roots.include?(pod)
|
136
136
|
end
|
137
137
|
|
138
|
-
|
139
|
-
if missing_pods.length > 1
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
138
|
+
unless missing_pods.empty?
|
139
|
+
message = if missing_pods.length > 1
|
140
|
+
"Pods `#{missing_pods.join('`, `')}` are not " \
|
141
|
+
'installed and cannot be updated'
|
142
|
+
else
|
143
|
+
"The `#{missing_pods.first}` Pod is not installed " \
|
144
|
+
'and cannot be updated'
|
145
145
|
end
|
146
146
|
raise Informative, message
|
147
147
|
end
|
data/lib/cocoapods/executable.rb
CHANGED
@@ -46,8 +46,7 @@ module Pod
|
|
46
46
|
# @return [String] the output of the command (STDOUT and STDERR).
|
47
47
|
#
|
48
48
|
def self.execute_command(executable, command, raise_on_failure = true)
|
49
|
-
bin = which(executable)
|
50
|
-
raise Informative, "Unable to locate the executable `#{executable}`" unless bin
|
49
|
+
bin = which!(executable)
|
51
50
|
|
52
51
|
command = command.map(&:to_s)
|
53
52
|
full_command = "#{bin} #{command.join(' ')}"
|
@@ -87,7 +86,10 @@ module Pod
|
|
87
86
|
#
|
88
87
|
def self.which(program)
|
89
88
|
program = program.to_s
|
90
|
-
ENV
|
89
|
+
paths = ENV.fetch('PATH') { '' }.split(File::PATH_SEPARATOR)
|
90
|
+
paths.unshift('./')
|
91
|
+
paths.uniq!
|
92
|
+
paths.each do |path|
|
91
93
|
bin = File.expand_path(program, path)
|
92
94
|
if File.file?(bin) && File.executable?(bin)
|
93
95
|
return bin
|
@@ -96,6 +98,20 @@ module Pod
|
|
96
98
|
nil
|
97
99
|
end
|
98
100
|
|
101
|
+
# Returns the absolute path to the binary with the given name on the current
|
102
|
+
# `PATH`, or raises if none is found.
|
103
|
+
#
|
104
|
+
# @param [String] program
|
105
|
+
# The name of the program being searched for.
|
106
|
+
#
|
107
|
+
# @return [String] The absolute path to the given program.
|
108
|
+
#
|
109
|
+
def self.which!(program)
|
110
|
+
which(program).tap do |bin|
|
111
|
+
raise Informative, "Unable to locate the executable `#{executable}`" unless bin
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
99
115
|
# Runs the given command, capturing the desired output.
|
100
116
|
#
|
101
117
|
# @param [String] bin
|
@@ -114,8 +130,7 @@ module Pod
|
|
114
130
|
# running the command.
|
115
131
|
#
|
116
132
|
def self.capture_command(executable, command, capture: :merge)
|
117
|
-
bin = which(executable)
|
118
|
-
raise Informative, "Unable to locate the executable `#{executable}`" unless bin
|
133
|
+
bin = which!(executable)
|
119
134
|
|
120
135
|
require 'open3'
|
121
136
|
command = command.map(&:to_s)
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# rubocop:disable LineLength
|
2
|
-
|
3
1
|
module Pod
|
4
2
|
module Generator
|
5
3
|
class CopyResourcesScript
|
@@ -143,7 +141,7 @@ EOM
|
|
143
141
|
case $RESOURCE_PATH in
|
144
142
|
*\.storyboard)
|
145
143
|
echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\"$RESOURCE_PATH\\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}"
|
146
|
-
ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\"$RESOURCE_PATH\\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT} ${TARGET_DEVICE_ARGS}
|
144
|
+
ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\"$RESOURCE_PATH\\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
|
147
145
|
;;
|
148
146
|
*\.xib)
|
149
147
|
echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\"$RESOURCE_PATH\\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT}"
|
data/lib/cocoapods/installer.rb
CHANGED
@@ -552,12 +552,10 @@ module Pod
|
|
552
552
|
#
|
553
553
|
def prepare_pods_project
|
554
554
|
UI.message '- Creating Pods project' do
|
555
|
-
object_version = aggregate_targets.map(&:user_project).compact.map { |p| p.object_version.to_i }.min
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
else
|
560
|
-
@pods_project = Pod::Project.new(sandbox.project_path)
|
555
|
+
@pods_project = if object_version = aggregate_targets.map(&:user_project).compact.map { |p| p.object_version.to_i }.min
|
556
|
+
Pod::Project.new(sandbox.project_path, false, object_version)
|
557
|
+
else
|
558
|
+
Pod::Project.new(sandbox.project_path)
|
561
559
|
end
|
562
560
|
|
563
561
|
analysis_result.all_user_build_configurations.each do |name, type|
|
@@ -68,10 +68,11 @@ module Pod
|
|
68
68
|
verify_platforms_specified!
|
69
69
|
end
|
70
70
|
@result.podfile_state = generate_podfile_state
|
71
|
-
@locked_dependencies = generate_version_locking_dependencies
|
72
71
|
|
73
72
|
store_existing_checkout_options
|
74
73
|
fetch_external_sources if allow_fetches
|
74
|
+
|
75
|
+
@locked_dependencies = generate_version_locking_dependencies
|
75
76
|
@result.specs_by_target = validate_platforms(resolve_dependencies)
|
76
77
|
@result.specifications = generate_specifications
|
77
78
|
@result.targets = generate_targets
|
@@ -417,8 +418,11 @@ module Pod
|
|
417
418
|
else
|
418
419
|
pods_to_update = result.podfile_state.changed + result.podfile_state.deleted
|
419
420
|
pods_to_update += update[:pods] if update_mode == :selected
|
420
|
-
|
421
|
-
|
421
|
+
local_pod_names = podfile.dependencies.select(&:local?).map(&:root_name)
|
422
|
+
pods_to_unlock = local_pod_names.reject do |pod_name|
|
423
|
+
sandbox.specification(pod_name).checksum == lockfile.checksum(pod_name)
|
424
|
+
end
|
425
|
+
LockingDependencyAnalyzer.generate_version_locking_dependencies(lockfile, pods_to_update, pods_to_unlock)
|
422
426
|
end
|
423
427
|
end
|
424
428
|
|
@@ -466,10 +470,10 @@ module Pod
|
|
466
470
|
|
467
471
|
def fetch_external_source(dependency, use_lockfile_options)
|
468
472
|
checkout_options = lockfile.checkout_options_for_pod_named(dependency.root_name) if lockfile
|
469
|
-
if checkout_options && use_lockfile_options
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
+
source = if checkout_options && use_lockfile_options
|
474
|
+
ExternalSources.from_params(checkout_options, dependency, podfile.defined_in_file)
|
475
|
+
else
|
476
|
+
ExternalSources.from_dependency(dependency, podfile.defined_in_file)
|
473
477
|
end
|
474
478
|
source.can_cache = installation_options.clean?
|
475
479
|
source.fetch(sandbox)
|
@@ -13,11 +13,23 @@ module Pod
|
|
13
13
|
# is in update mode, to prevent it from upgrading the Pods that weren't
|
14
14
|
# changed in the {Podfile}.
|
15
15
|
#
|
16
|
+
# @param [Lockfile] lockfile the lockfile containing dependency constraints
|
17
|
+
#
|
18
|
+
# @param [Array<String>] pods_to_update
|
19
|
+
# List of pod names which needs to be updated because installer is
|
20
|
+
# in update mode for these pods. Pods in this list and all their recursive dependencies
|
21
|
+
# will not be included in generated dependency graph
|
22
|
+
#
|
23
|
+
# @param [Array<String>] pods_to_unlock
|
24
|
+
# List of pod names whose version constraints will be removed from the generated dependency graph.
|
25
|
+
# Recursive dependencies of the pods won't be affected. This is currently used to force local pods
|
26
|
+
# to be evaluated again whenever checksum of the specification of the local pods changes.
|
27
|
+
#
|
16
28
|
# @return [Molinillo::DependencyGraph<Dependency>] the dependencies
|
17
29
|
# generated by the lockfile that prevent the resolver to update
|
18
30
|
# a Pod.
|
19
31
|
#
|
20
|
-
def self.generate_version_locking_dependencies(lockfile, pods_to_update)
|
32
|
+
def self.generate_version_locking_dependencies(lockfile, pods_to_update, pods_to_unlock = [])
|
21
33
|
dependency_graph = Molinillo::DependencyGraph.new
|
22
34
|
|
23
35
|
if lockfile
|
@@ -29,7 +41,7 @@ module Pod
|
|
29
41
|
|
30
42
|
pods = lockfile.to_hash['PODS'] || []
|
31
43
|
pods.each do |pod|
|
32
|
-
add_to_dependency_graph(pod, [], dependency_graph)
|
44
|
+
add_to_dependency_graph(pod, [], dependency_graph, pods_to_unlock)
|
33
45
|
end
|
34
46
|
|
35
47
|
pods_to_update = pods_to_update.flat_map do |u|
|
@@ -56,20 +68,23 @@ module Pod
|
|
56
68
|
|
57
69
|
private
|
58
70
|
|
59
|
-
def self.add_child_vertex_to_graph(dependency_string, parents, dependency_graph)
|
71
|
+
def self.add_child_vertex_to_graph(dependency_string, parents, dependency_graph, pods_to_unlock)
|
60
72
|
dependency = Dependency.from_string(dependency_string)
|
73
|
+
if pods_to_unlock.include?(dependency.root_name)
|
74
|
+
dependency = Dependency.new(dependency.name)
|
75
|
+
end
|
61
76
|
dependency_graph.add_child_vertex(dependency.name, parents.empty? ? dependency : nil, parents, nil)
|
62
77
|
dependency
|
63
78
|
end
|
64
79
|
|
65
|
-
def self.add_to_dependency_graph(object, parents, dependency_graph)
|
80
|
+
def self.add_to_dependency_graph(object, parents, dependency_graph, pods_to_unlock)
|
66
81
|
case object
|
67
82
|
when String
|
68
|
-
add_child_vertex_to_graph(object, parents, dependency_graph)
|
83
|
+
add_child_vertex_to_graph(object, parents, dependency_graph, pods_to_unlock)
|
69
84
|
when Hash
|
70
85
|
object.each do |key, value|
|
71
|
-
dependency = add_child_vertex_to_graph(key, parents, dependency_graph)
|
72
|
-
value.each { |v| add_to_dependency_graph(v, [dependency.name], dependency_graph) }
|
86
|
+
dependency = add_child_vertex_to_graph(key, parents, dependency_graph, pods_to_unlock)
|
87
|
+
value.each { |v| add_to_dependency_graph(v, [dependency.name], dependency_graph, pods_to_unlock) }
|
73
88
|
end
|
74
89
|
end
|
75
90
|
end
|
@@ -94,12 +94,12 @@ module Pod
|
|
94
94
|
def scope_by_specs
|
95
95
|
root_spec = variants.first.root_spec
|
96
96
|
specs = [root_spec]
|
97
|
-
if root_spec.default_subspecs.empty?
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
97
|
+
specs += if root_spec.default_subspecs.empty?
|
98
|
+
root_spec.subspecs.compact
|
99
|
+
else
|
100
|
+
root_spec.default_subspecs.map do |subspec_name|
|
101
|
+
root_spec.subspec_by_name("#{root_spec.name}/#{subspec_name}")
|
102
|
+
end
|
103
103
|
end
|
104
104
|
default_specs = Set.new(specs)
|
105
105
|
grouped_variants = group_by(&:specs)
|
@@ -107,15 +107,18 @@ module Pod
|
|
107
107
|
library_targets = target.pod_targets.reject do |pod_target|
|
108
108
|
pod_target.should_build? && pod_target.requires_frameworks?
|
109
109
|
end
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
110
|
+
target.user_build_configurations.keys.each_with_object({}) do |config, resources_by_config|
|
111
|
+
resources_by_config[config] = library_targets.flat_map do |library_target|
|
112
|
+
next [] unless library_target.include_in_build_config?(target_definition, config)
|
113
|
+
resource_paths = library_target.file_accessors.flat_map do |accessor|
|
114
|
+
accessor.resources.flat_map { |res| res.relative_path_from(project.path.dirname) }
|
115
|
+
end
|
116
|
+
resource_bundles = library_target.file_accessors.flat_map do |accessor|
|
117
|
+
accessor.resource_bundles.keys.map { |name| "#{library_target.configuration_build_dir}/#{name.shellescape}.bundle" }
|
118
|
+
end
|
119
|
+
(resource_paths + resource_bundles + [bridge_support_file].compact).uniq
|
120
|
+
end
|
117
121
|
end
|
118
|
-
resources_by_config
|
119
122
|
end
|
120
123
|
|
121
124
|
# Creates a script that copies the resources to the bundle of the client
|
@@ -24,12 +24,12 @@ module Pod
|
|
24
24
|
create_info_plist_file
|
25
25
|
create_module_map
|
26
26
|
create_umbrella_header do |generator|
|
27
|
-
if header_mappings_dir
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
27
|
+
generator.imports += if header_mappings_dir
|
28
|
+
target.file_accessors.flat_map(&:public_headers).map do |pathname|
|
29
|
+
pathname.relative_path_from(header_mappings_dir)
|
30
|
+
end
|
31
|
+
else
|
32
|
+
target.file_accessors.flat_map(&:public_headers).map(&:basename)
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
@@ -9,6 +9,14 @@ module Pod
|
|
9
9
|
class TargetIntegrator
|
10
10
|
autoload :XCConfigIntegrator, 'cocoapods/installer/user_project_integrator/target_integrator/xcconfig_integrator'
|
11
11
|
|
12
|
+
# @return [String] the PACKAGE emoji to use as prefix for every build phase aded to the user project
|
13
|
+
#
|
14
|
+
BUILD_PHASE_PREFIX = "\u{1F4E6} ".freeze
|
15
|
+
|
16
|
+
# @return [String] the name of the check manifest phase
|
17
|
+
#
|
18
|
+
CHECK_MANIFEST_PHASE_NAME = 'Check Pods Manifest.lock'.freeze
|
19
|
+
|
12
20
|
# @return [Array<Symbol>] the symbol types, which require that the pod
|
13
21
|
# frameworks are embedded in the output directory / product bundle.
|
14
22
|
#
|
@@ -18,6 +26,10 @@ module Pod
|
|
18
26
|
#
|
19
27
|
EMBED_FRAMEWORK_PHASE_NAME = 'Embed Pods Frameworks'.freeze
|
20
28
|
|
29
|
+
# @return [String] the name of the copy resources phase
|
30
|
+
#
|
31
|
+
COPY_PODS_RESOURCES_PHASE_NAME = 'Copy Pods Resources'.freeze
|
32
|
+
|
21
33
|
# @return [AggregateTarget] the target that should be integrated.
|
22
34
|
#
|
23
35
|
attr_reader :target
|
@@ -121,7 +133,7 @@ module Pod
|
|
121
133
|
# @return [void]
|
122
134
|
#
|
123
135
|
def add_copy_resources_script_phase
|
124
|
-
phase_name =
|
136
|
+
phase_name = COPY_PODS_RESOURCES_PHASE_NAME
|
125
137
|
native_targets.each do |native_target|
|
126
138
|
phase = create_or_update_build_phase(native_target, phase_name)
|
127
139
|
script_path = target.copy_resources_script_relative_path
|
@@ -139,7 +151,7 @@ module Pod
|
|
139
151
|
# @return [void]
|
140
152
|
#
|
141
153
|
def add_check_manifest_lock_script_phase
|
142
|
-
phase_name =
|
154
|
+
phase_name = CHECK_MANIFEST_PHASE_NAME
|
143
155
|
native_targets.each do |native_target|
|
144
156
|
phase = create_or_update_build_phase(native_target, phase_name)
|
145
157
|
native_target.build_phases.unshift(phase).uniq! unless native_target.build_phases.first == phase
|
@@ -201,10 +213,13 @@ module Pod
|
|
201
213
|
end
|
202
214
|
|
203
215
|
def create_or_update_build_phase(target, phase_name, phase_class = Xcodeproj::Project::Object::PBXShellScriptBuildPhase)
|
204
|
-
|
216
|
+
prefixed_phase_name = BUILD_PHASE_PREFIX + phase_name
|
217
|
+
build_phases = target.build_phases.grep(phase_class)
|
218
|
+
build_phases.find { |phase| phase.name == prefixed_phase_name } ||
|
219
|
+
build_phases.find { |phase| phase.name == phase_name }.tap { |p| p.name = prefixed_phase_name if p } ||
|
205
220
|
target.project.new(phase_class).tap do |phase|
|
206
|
-
UI.message("Adding Build Phase '#{
|
207
|
-
phase.name =
|
221
|
+
UI.message("Adding Build Phase '#{prefixed_phase_name}' to project.") do
|
222
|
+
phase.name = prefixed_phase_name
|
208
223
|
phase.show_env_vars_in_log = '0'
|
209
224
|
target.build_phases << phase
|
210
225
|
end
|
data/lib/cocoapods/project.rb
CHANGED
@@ -215,10 +215,11 @@ module Pod
|
|
215
215
|
# @return [PBXFileReference] The new file reference.
|
216
216
|
#
|
217
217
|
def add_podfile(podfile_path)
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
218
|
+
new_file(podfile_path, :project).tap do |podfile_ref|
|
219
|
+
podfile_ref.xc_language_specification_identifier = 'xcode.lang.ruby'
|
220
|
+
podfile_ref.explicit_file_type = 'text.script.ruby'
|
221
|
+
podfile_ref.last_known_file_type = 'text'
|
222
|
+
end
|
222
223
|
end
|
223
224
|
|
224
225
|
# Adds a new build configuration to the project and populates it with
|
data/lib/cocoapods/resolver.rb
CHANGED
@@ -104,13 +104,7 @@ module Pod
|
|
104
104
|
def search_for(dependency)
|
105
105
|
@search ||= {}
|
106
106
|
@search[dependency] ||= begin
|
107
|
-
|
108
|
-
find_cached_set(dependency).
|
109
|
-
all_specifications.
|
110
|
-
select { |s| requirement.satisfied_by? s.version }.
|
111
|
-
map { |s| s.subspec_by_name(dependency.name, false) }.
|
112
|
-
compact.
|
113
|
-
reverse
|
107
|
+
specifications_for_dependency(dependency, [requirement_for_locked_pod_named(dependency.name)])
|
114
108
|
end
|
115
109
|
@search[dependency].dup
|
116
110
|
end
|
@@ -279,6 +273,27 @@ module Pod
|
|
279
273
|
|
280
274
|
# @!group Private helpers
|
281
275
|
|
276
|
+
# Returns available specifications which satisfy requirements of given dependency
|
277
|
+
# and additional requirements.
|
278
|
+
#
|
279
|
+
# @param [Dependency] dependency
|
280
|
+
# The dependency whose requirements will be satisfied.
|
281
|
+
#
|
282
|
+
# @param [Array<Requirement>] additional_requirements
|
283
|
+
# List of additional requirements which should also be satisfied.
|
284
|
+
#
|
285
|
+
# @return [Array<Specification>] List of specifications satisfying given requirements.
|
286
|
+
#
|
287
|
+
def specifications_for_dependency(dependency, additional_requirements = [])
|
288
|
+
requirement = Requirement.new(dependency.requirement.as_list + additional_requirements)
|
289
|
+
find_cached_set(dependency).
|
290
|
+
all_specifications.
|
291
|
+
select { |s| requirement.satisfied_by? s.version }.
|
292
|
+
map { |s| s.subspec_by_name(dependency.name, false) }.
|
293
|
+
compact.
|
294
|
+
reverse
|
295
|
+
end
|
296
|
+
|
282
297
|
# @return [Set] Loads or returns a previously initialized set for the Pod
|
283
298
|
# of the given dependency.
|
284
299
|
#
|
@@ -367,11 +382,13 @@ module Pod
|
|
367
382
|
# @param [Molinillo::ResolverError] error
|
368
383
|
#
|
369
384
|
def handle_resolver_error(error)
|
370
|
-
message = error.message
|
385
|
+
message = error.message.dup
|
371
386
|
case error
|
372
387
|
when Molinillo::VersionConflict
|
373
388
|
error.conflicts.each do |name, conflict|
|
389
|
+
local_pod_parent = conflict.requirement_trees.flatten.reverse.find(&:local?)
|
374
390
|
lockfile_reqs = conflict.requirements[name_for_locking_dependency_source]
|
391
|
+
|
375
392
|
if lockfile_reqs && lockfile_reqs.last && lockfile_reqs.last.prerelease? && !conflict.existing
|
376
393
|
message = 'Due to the previous naïve CocoaPods resolver, ' \
|
377
394
|
"you were using a pre-release version of `#{name}`, " \
|
@@ -380,6 +397,12 @@ module Pod
|
|
380
397
|
'version requirement to your Podfile ' \
|
381
398
|
"(e.g. `pod '#{name}', '#{lockfile_reqs.map(&:requirement).join("', '")}'`) " \
|
382
399
|
"or revert to a stable version by running `pod update #{name}`."
|
400
|
+
elsif local_pod_parent && !specifications_for_dependency(conflict.requirement).empty?
|
401
|
+
# Conflict was caused by a requirement from a local dependency.
|
402
|
+
# Tell user to use `pod update`.
|
403
|
+
message << "\n\nIt seems like you've changed the constraints of dependency `#{name}` " \
|
404
|
+
"inside your development pod `#{local_pod_parent.name}`.\nYou should run `pod update #{name}` to apply " \
|
405
|
+
"changes you've made."
|
383
406
|
elsif (conflict.possibility && conflict.possibility.version.prerelease?) &&
|
384
407
|
(conflict.requirement && !(
|
385
408
|
conflict.requirement.prerelease? ||
|
@@ -259,8 +259,8 @@ module Pod
|
|
259
259
|
# @return [Pathname] The of the prefix header file of the specification.
|
260
260
|
#
|
261
261
|
def prefix_header
|
262
|
-
if spec_consumer.prefix_header_file
|
263
|
-
path_list.root +
|
262
|
+
if file = spec_consumer.prefix_header_file
|
263
|
+
path_list.root + file
|
264
264
|
end
|
265
265
|
end
|
266
266
|
|
@@ -274,8 +274,8 @@ module Pod
|
|
274
274
|
# specification or auto-detected.
|
275
275
|
#
|
276
276
|
def license
|
277
|
-
if spec_consumer.
|
278
|
-
path_list.root +
|
277
|
+
if file = spec_consumer.license[:file]
|
278
|
+
path_list.root + file
|
279
279
|
else
|
280
280
|
path_list.glob([GLOB_PATTERNS[:license]]).first
|
281
281
|
end
|
@@ -284,7 +284,7 @@ module Pod
|
|
284
284
|
# @return [Pathname, Nil] The path of the custom module map file of the
|
285
285
|
# specification, if specified.
|
286
286
|
def module_map
|
287
|
-
if module_map = spec_consumer.
|
287
|
+
if module_map = spec_consumer.module_map
|
288
288
|
path_list.root + module_map
|
289
289
|
end
|
290
290
|
end
|
@@ -103,7 +103,7 @@ module Pod
|
|
103
103
|
# @return [Array<Source>] The CocoaPods Master Repo source.
|
104
104
|
#
|
105
105
|
def master
|
106
|
-
sources(['master'])
|
106
|
+
sources(['master']).select { |s| s.repo.directory? }
|
107
107
|
end
|
108
108
|
|
109
109
|
# Search the appropriate sources to match the set for the given dependency.
|
@@ -340,8 +340,9 @@ module Pod
|
|
340
340
|
# @return [Bool] Whether the given source is a GIT repo.
|
341
341
|
#
|
342
342
|
def git_repo?(dir)
|
343
|
-
Dir.chdir(dir)
|
344
|
-
|
343
|
+
Dir.chdir(dir) do
|
344
|
+
Executable.capture_command('git', %w(rev-parse), :capture => :none).success?
|
345
|
+
end
|
345
346
|
end
|
346
347
|
|
347
348
|
# Checks the version information of the source with the given directory.
|
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.0.0.beta.
|
4
|
+
version: 1.0.0.beta.5
|
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: 2016-
|
14
|
+
date: 2016-03-07 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: cocoapods-core
|
@@ -19,21 +19,21 @@ dependencies:
|
|
19
19
|
requirements:
|
20
20
|
- - '='
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 1.0.0.beta.
|
22
|
+
version: 1.0.0.beta.5
|
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.0.0.beta.
|
29
|
+
version: 1.0.0.beta.5
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: claide
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
requirements:
|
34
34
|
- - '>='
|
35
35
|
- !ruby/object:Gem::Version
|
36
|
-
version: 1.0.0.beta.
|
36
|
+
version: 1.0.0.beta.2
|
37
37
|
- - <
|
38
38
|
- !ruby/object:Gem::Version
|
39
39
|
version: '2.0'
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
requirements:
|
44
44
|
- - '>='
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: 1.0.0.beta.
|
46
|
+
version: 1.0.0.beta.2
|
47
47
|
- - <
|
48
48
|
- !ruby/object:Gem::Version
|
49
49
|
version: '2.0'
|
@@ -193,14 +193,14 @@ dependencies:
|
|
193
193
|
requirements:
|
194
194
|
- - ~>
|
195
195
|
- !ruby/object:Gem::Version
|
196
|
-
version: 0.4.
|
196
|
+
version: 0.4.4
|
197
197
|
type: :runtime
|
198
198
|
prerelease: false
|
199
199
|
version_requirements: !ruby/object:Gem::Requirement
|
200
200
|
requirements:
|
201
201
|
- - ~>
|
202
202
|
- !ruby/object:Gem::Version
|
203
|
-
version: 0.4.
|
203
|
+
version: 0.4.4
|
204
204
|
- !ruby/object:Gem::Dependency
|
205
205
|
name: xcodeproj
|
206
206
|
requirement: !ruby/object:Gem::Requirement
|
@@ -473,7 +473,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
473
473
|
version: '0'
|
474
474
|
requirements: []
|
475
475
|
rubyforge_project:
|
476
|
-
rubygems_version: 2.
|
476
|
+
rubygems_version: 2.6.1
|
477
477
|
signing_key:
|
478
478
|
specification_version: 3
|
479
479
|
summary: The Cocoa library package manager.
|