cocoapods 0.33.1 → 0.34.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +171 -46
- data/README.md +9 -9
- data/bin/pod +5 -5
- data/bin/sandbox-pod +2 -6
- data/lib/cocoapods.rb +4 -4
- data/lib/cocoapods/command.rb +12 -10
- data/lib/cocoapods/command/init.rb +12 -13
- data/lib/cocoapods/command/inter_process_communication.rb +6 -17
- data/lib/cocoapods/command/lib.rb +27 -24
- data/lib/cocoapods/command/list.rb +9 -9
- data/lib/cocoapods/command/outdated.rb +4 -9
- data/lib/cocoapods/command/project.rb +57 -19
- data/lib/cocoapods/command/push.rb +0 -1
- data/lib/cocoapods/command/repo.rb +14 -15
- data/lib/cocoapods/command/repo/push.rb +24 -19
- data/lib/cocoapods/command/search.rb +12 -13
- data/lib/cocoapods/command/setup.rb +10 -9
- data/lib/cocoapods/command/spec.rb +67 -63
- data/lib/cocoapods/config.rb +21 -54
- data/lib/cocoapods/downloader.rb +0 -1
- data/lib/cocoapods/executable.rb +3 -8
- data/lib/cocoapods/external_sources.rb +2 -4
- data/lib/cocoapods/external_sources/abstract_external_source.rb +15 -10
- data/lib/cocoapods/external_sources/downloader_source.rb +0 -2
- data/lib/cocoapods/external_sources/path_source.rb +1 -4
- data/lib/cocoapods/external_sources/podspec_source.rb +1 -3
- data/lib/cocoapods/gem_version.rb +1 -2
- data/lib/cocoapods/generator/acknowledgements.rb +5 -8
- data/lib/cocoapods/generator/acknowledgements/markdown.rb +5 -7
- data/lib/cocoapods/generator/acknowledgements/plist.rb +9 -10
- data/lib/cocoapods/generator/bridge_support.rb +1 -1
- data/lib/cocoapods/generator/copy_resources_script.rb +10 -14
- data/lib/cocoapods/generator/dummy_source.rb +3 -3
- data/lib/cocoapods/generator/prefix_header.rb +15 -16
- data/lib/cocoapods/generator/target_environment_header.rb +122 -36
- data/lib/cocoapods/generator/xcconfig.rb +0 -4
- data/lib/cocoapods/generator/xcconfig/aggregate_xcconfig.rb +74 -65
- data/lib/cocoapods/generator/xcconfig/private_pod_xcconfig.rb +92 -95
- data/lib/cocoapods/generator/xcconfig/public_pod_xcconfig.rb +48 -51
- data/lib/cocoapods/generator/xcconfig/xcconfig_helper.rb +10 -10
- data/lib/cocoapods/hooks/installer_representation.rb +15 -18
- data/lib/cocoapods/hooks/library_representation.rb +4 -8
- data/lib/cocoapods/hooks/pod_representation.rb +1 -5
- data/lib/cocoapods/hooks_manager.rb +63 -0
- data/lib/cocoapods/installer.rb +60 -47
- data/lib/cocoapods/installer/analyzer.rb +60 -62
- data/lib/cocoapods/installer/analyzer/sandbox_analyzer.rb +5 -8
- data/lib/cocoapods/installer/file_references_installer.rb +7 -10
- data/lib/cocoapods/installer/hooks_context.rb +74 -0
- data/lib/cocoapods/installer/migrator.rb +99 -0
- data/lib/cocoapods/installer/pod_source_installer.rb +9 -29
- data/lib/cocoapods/installer/target_installer.rb +7 -17
- data/lib/cocoapods/installer/target_installer/aggregate_target_installer.rb +40 -41
- data/lib/cocoapods/installer/target_installer/pod_target_installer.rb +43 -54
- data/lib/cocoapods/installer/user_project_integrator.rb +54 -10
- data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +66 -117
- data/lib/cocoapods/installer/user_project_integrator/target_integrator/xcconfig_integrator.rb +116 -0
- data/lib/cocoapods/open_uri.rb +1 -2
- data/lib/cocoapods/project.rb +34 -8
- data/lib/cocoapods/resolver.rb +43 -21
- data/lib/cocoapods/sandbox.rb +80 -75
- data/lib/cocoapods/sandbox/file_accessor.rb +3 -8
- data/lib/cocoapods/sandbox/headers_store.rb +6 -7
- data/lib/cocoapods/sandbox/path_list.rb +7 -10
- data/lib/cocoapods/sources_manager.rb +81 -49
- data/lib/cocoapods/target.rb +18 -12
- data/lib/cocoapods/target/aggregate_target.rb +43 -18
- data/lib/cocoapods/target/pod_target.rb +37 -4
- data/lib/cocoapods/user_interface.rb +19 -18
- data/lib/cocoapods/user_interface/error_report.rb +23 -4
- data/lib/cocoapods/validator.rb +30 -33
- metadata +100 -73
- data/lib/cocoapods/command/help.rb +0 -25
data/lib/cocoapods/downloader.rb
CHANGED
data/lib/cocoapods/executable.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
module Pod
|
2
|
-
|
3
2
|
# Module which provides support for running executables.
|
4
3
|
#
|
5
4
|
# In a class it can be used as:
|
@@ -12,7 +11,6 @@ module Pod
|
|
12
11
|
# output of the command.
|
13
12
|
#
|
14
13
|
module Executable
|
15
|
-
|
16
14
|
# Creates the methods for the executable with the given name.
|
17
15
|
#
|
18
16
|
# @param [Symbol] name
|
@@ -21,12 +19,11 @@ module Pod
|
|
21
19
|
# @return [void]
|
22
20
|
#
|
23
21
|
def executable(name)
|
24
|
-
|
25
22
|
define_method(name) do |command|
|
26
23
|
Executable.execute_command(name, command, false)
|
27
24
|
end
|
28
25
|
|
29
|
-
define_method(name.to_s +
|
26
|
+
define_method(name.to_s + '!') do |command|
|
30
27
|
Executable.execute_command(name, command, true)
|
31
28
|
end
|
32
29
|
end
|
@@ -51,7 +48,6 @@ module Pod
|
|
51
48
|
# @todo Find a way to display the live output of the commands.
|
52
49
|
#
|
53
50
|
def self.execute_command(executable, command, raise_on_failure)
|
54
|
-
|
55
51
|
bin = `which #{executable}`.strip
|
56
52
|
raise Informative, "Unable to locate the executable `#{executable}`" if bin.empty?
|
57
53
|
|
@@ -66,7 +62,7 @@ module Pod
|
|
66
62
|
stdout, stderr = Indenter.new, Indenter.new
|
67
63
|
end
|
68
64
|
|
69
|
-
options = {:stdout => stdout, :stderr => stderr, :status => true}
|
65
|
+
options = { :stdout => stdout, :stderr => stderr, :status => true }
|
70
66
|
status = Open4.spawn(full_command, options)
|
71
67
|
output = stdout.join("\n") + stderr.join("\n")
|
72
68
|
unless status.success?
|
@@ -82,10 +78,9 @@ module Pod
|
|
82
78
|
#-------------------------------------------------------------------------#
|
83
79
|
|
84
80
|
# Helper class that allows to write to an {IO} instance taking into account
|
85
|
-
# the UI indentation
|
81
|
+
# the UI indentation level.
|
86
82
|
#
|
87
83
|
class Indenter < ::Array
|
88
|
-
|
89
84
|
# @return [Fixnum] The indentation level of the UI.
|
90
85
|
#
|
91
86
|
attr_accessor :indent
|
@@ -4,12 +4,10 @@ require 'cocoapods/external_sources/path_source'
|
|
4
4
|
require 'cocoapods/external_sources/podspec_source'
|
5
5
|
|
6
6
|
module Pod
|
7
|
-
|
8
7
|
# Provides support for initializing the correct concrete class of an external
|
9
8
|
# source.
|
10
9
|
#
|
11
10
|
module ExternalSources
|
12
|
-
|
13
11
|
# @return [AbstractExternalSource] an initialized instance of the concrete
|
14
12
|
# external source class associated with the option specified in the
|
15
13
|
# hash.
|
@@ -34,8 +32,8 @@ module Pod
|
|
34
32
|
elsif params.key?(:path)
|
35
33
|
PathSource
|
36
34
|
elsif params.key?(:local)
|
37
|
-
UI.warn
|
38
|
-
|
35
|
+
UI.warn 'The `:local` option of the Podfile has been ' \
|
36
|
+
'renamed to `:path` and it is deprecated.'
|
39
37
|
PathSource
|
40
38
|
elsif Downloader.strategy_from_options(params)
|
41
39
|
DownloaderSource
|
@@ -1,10 +1,8 @@
|
|
1
1
|
module Pod
|
2
2
|
module ExternalSources
|
3
|
-
|
4
3
|
# Abstract class that defines the common behaviour of external sources.
|
5
4
|
#
|
6
5
|
class AbstractExternalSource
|
7
|
-
|
8
6
|
# @return [String] the name of the Pod described by this external source.
|
9
7
|
#
|
10
8
|
attr_reader :name
|
@@ -48,14 +46,14 @@ module Pod
|
|
48
46
|
#
|
49
47
|
# @return [void]
|
50
48
|
#
|
51
|
-
def fetch(
|
52
|
-
raise
|
49
|
+
def fetch(_sandbox)
|
50
|
+
raise 'Abstract method'
|
53
51
|
end
|
54
52
|
|
55
53
|
# @return [String] a string representation of the source suitable for UI.
|
56
54
|
#
|
57
55
|
def description
|
58
|
-
raise
|
56
|
+
raise 'Abstract method'
|
59
57
|
end
|
60
58
|
|
61
59
|
protected
|
@@ -98,12 +96,20 @@ module Pod
|
|
98
96
|
#
|
99
97
|
def pre_download(sandbox)
|
100
98
|
title = "Pre-downloading: `#{name}` #{description}"
|
101
|
-
UI.titled_section(title,
|
102
|
-
target = sandbox.
|
99
|
+
UI.titled_section(title, :verbose_prefix => '-> ') do
|
100
|
+
target = sandbox.pod_dir(name)
|
103
101
|
target.rmtree if target.exist?
|
104
|
-
downloader =
|
102
|
+
downloader = Downloader.for_target(target, params)
|
105
103
|
downloader.download
|
106
|
-
|
104
|
+
|
105
|
+
podspec_path = target + "#{name}.podspec"
|
106
|
+
json = false
|
107
|
+
unless Pathname(podspec_path).exist?
|
108
|
+
podspec_path = target + "#{name}.podspec.json"
|
109
|
+
json = true
|
110
|
+
end
|
111
|
+
|
112
|
+
store_podspec(sandbox, target + podspec_path, json)
|
107
113
|
sandbox.store_pre_downloaded_pod(name)
|
108
114
|
if downloader.options_specific?
|
109
115
|
source = params
|
@@ -137,4 +143,3 @@ module Pod
|
|
137
143
|
end
|
138
144
|
end
|
139
145
|
end
|
140
|
-
|
@@ -1,6 +1,5 @@
|
|
1
1
|
module Pod
|
2
2
|
module ExternalSources
|
3
|
-
|
4
3
|
# Provides support for fetching a specification file from a source handled
|
5
4
|
# by the downloader. Supports all the options of the downloader
|
6
5
|
#
|
@@ -8,7 +7,6 @@ module Pod
|
|
8
7
|
# name matching the one of the dependency.
|
9
8
|
#
|
10
9
|
class DownloaderSource < AbstractExternalSource
|
11
|
-
|
12
10
|
# @see AbstractExternalSource#fetch
|
13
11
|
#
|
14
12
|
def fetch(sandbox)
|
@@ -1,18 +1,16 @@
|
|
1
1
|
module Pod
|
2
2
|
module ExternalSources
|
3
|
-
|
4
3
|
# Provides support for fetching a specification file from a path local to
|
5
4
|
# the machine running the installation.
|
6
5
|
#
|
7
6
|
# Works with the {LocalPod::LocalSourcedPod} class.
|
8
7
|
#
|
9
8
|
class PathSource < AbstractExternalSource
|
10
|
-
|
11
9
|
# @see AbstractExternalSource#fetch
|
12
10
|
#
|
13
11
|
def fetch(sandbox)
|
14
12
|
title = "Fetching podspec for `#{name}` #{description}"
|
15
|
-
UI.titled_section(title,
|
13
|
+
UI.titled_section(title, :verbose_prefix => '-> ') do
|
16
14
|
podspec = podspec_path
|
17
15
|
unless podspec.exist?
|
18
16
|
raise Informative, "No podspec found for `#{name}` in " \
|
@@ -55,4 +53,3 @@ module Pod
|
|
55
53
|
end
|
56
54
|
end
|
57
55
|
end
|
58
|
-
|
@@ -1,16 +1,14 @@
|
|
1
1
|
module Pod
|
2
2
|
module ExternalSources
|
3
|
-
|
4
3
|
# Provides support for fetching a specification file from an URL. Can be
|
5
4
|
# http, file, etc.
|
6
5
|
#
|
7
6
|
class PodspecSource < AbstractExternalSource
|
8
|
-
|
9
7
|
# @see AbstractExternalSource#fetch
|
10
8
|
#
|
11
9
|
def fetch(sandbox)
|
12
10
|
title = "Fetching podspec for `#{name}` #{description}"
|
13
|
-
UI.titled_section(title,
|
11
|
+
UI.titled_section(title, :verbose_prefix => '-> ') do
|
14
12
|
is_json = podspec_uri.split('.').last == 'json'
|
15
13
|
require 'open-uri'
|
16
14
|
open(podspec_uri) { |io| store_podspec(sandbox, io.read, is_json) }
|
@@ -1,8 +1,6 @@
|
|
1
1
|
module Pod
|
2
2
|
module Generator
|
3
|
-
|
4
3
|
class Acknowledgements
|
5
|
-
|
6
4
|
# @return [Array<Class>] The classes of the acknowledgements generator
|
7
5
|
# subclasses.
|
8
6
|
#
|
@@ -29,25 +27,25 @@ module Pod
|
|
29
27
|
# @return [String] The title of the acknowledgements file.
|
30
28
|
#
|
31
29
|
def header_title
|
32
|
-
|
30
|
+
'Acknowledgements'
|
33
31
|
end
|
34
32
|
|
35
33
|
# @return [String] A text to present before listing the acknowledgements.
|
36
34
|
#
|
37
35
|
def header_text
|
38
|
-
|
36
|
+
'This application makes use of the following third party libraries:'
|
39
37
|
end
|
40
38
|
|
41
39
|
# @return [String] The title of the foot notes.
|
42
40
|
#
|
43
41
|
def footnote_title
|
44
|
-
|
42
|
+
''
|
45
43
|
end
|
46
44
|
|
47
45
|
# @return [String] the foot notes.
|
48
46
|
#
|
49
47
|
def footnote_text
|
50
|
-
|
48
|
+
'Generated by CocoaPods - http://cocoapods.org'
|
51
49
|
end
|
52
50
|
|
53
51
|
#-----------------------------------------------------------------------#
|
@@ -60,7 +58,7 @@ module Pod
|
|
60
58
|
# acknowledgements should be generated.
|
61
59
|
#
|
62
60
|
def specs
|
63
|
-
file_accessors.map{ |accessor| accessor.spec.root }.uniq
|
61
|
+
file_accessors.map { |accessor| accessor.spec.root }.uniq
|
64
62
|
end
|
65
63
|
|
66
64
|
# Returns the text of the license for the given spec.
|
@@ -101,7 +99,6 @@ module Pod
|
|
101
99
|
end
|
102
100
|
|
103
101
|
#-----------------------------------------------------------------------#
|
104
|
-
|
105
102
|
end
|
106
103
|
end
|
107
104
|
end
|
@@ -1,21 +1,19 @@
|
|
1
1
|
module Pod
|
2
2
|
module Generator
|
3
|
-
|
4
3
|
class Markdown < Acknowledgements
|
5
|
-
|
6
4
|
def self.path_from_basepath(path)
|
7
|
-
Pathname.new(path.dirname + "#{path.basename
|
5
|
+
Pathname.new(path.dirname + "#{path.basename}.markdown")
|
8
6
|
end
|
9
7
|
|
10
8
|
def save_as(path)
|
11
|
-
file = File.new(path,
|
9
|
+
file = File.new(path, 'w')
|
12
10
|
file.write(licenses)
|
13
11
|
file.close
|
14
12
|
end
|
15
13
|
|
16
14
|
def title_from_string(string, level)
|
17
|
-
|
18
|
-
|
15
|
+
unless string.empty?
|
16
|
+
'#' * level << " #{string}"
|
19
17
|
end
|
20
18
|
end
|
21
19
|
|
@@ -29,7 +27,7 @@ module Pod
|
|
29
27
|
licenses_string = "#{title_from_string(header_title, 1)}\n#{header_text}\n"
|
30
28
|
specs.each do |spec|
|
31
29
|
if (license = string_for_spec(spec))
|
32
|
-
license = license.force_encoding(
|
30
|
+
license = license.force_encoding('UTF-8') if license.respond_to?(:force_encoding)
|
33
31
|
licenses_string += license
|
34
32
|
end
|
35
33
|
end
|
@@ -1,9 +1,8 @@
|
|
1
1
|
module Pod
|
2
2
|
module Generator
|
3
|
-
|
4
3
|
class Plist < Acknowledgements
|
5
4
|
def self.path_from_basepath(path)
|
6
|
-
Pathname.new(path.dirname + "#{path.basename
|
5
|
+
Pathname.new(path.dirname + "#{path.basename}.plist")
|
7
6
|
end
|
8
7
|
|
9
8
|
def save_as(path)
|
@@ -15,12 +14,12 @@ module Pod
|
|
15
14
|
{
|
16
15
|
:Title => plist_title,
|
17
16
|
:StringsTable => plist_title,
|
18
|
-
:PreferenceSpecifiers => licenses
|
17
|
+
:PreferenceSpecifiers => licenses,
|
19
18
|
}
|
20
19
|
end
|
21
20
|
|
22
21
|
def plist_title
|
23
|
-
|
22
|
+
'Acknowledgements'
|
24
23
|
end
|
25
24
|
|
26
25
|
def licenses
|
@@ -36,26 +35,26 @@ module Pod
|
|
36
35
|
def hash_for_spec(spec)
|
37
36
|
if (license = license_text(spec))
|
38
37
|
{
|
39
|
-
:Type =>
|
38
|
+
:Type => 'PSGroupSpecifier',
|
40
39
|
:Title => spec.name,
|
41
|
-
:FooterText => license
|
40
|
+
:FooterText => license,
|
42
41
|
}
|
43
42
|
end
|
44
43
|
end
|
45
44
|
|
46
45
|
def header_hash
|
47
46
|
{
|
48
|
-
:Type =>
|
47
|
+
:Type => 'PSGroupSpecifier',
|
49
48
|
:Title => header_title,
|
50
|
-
:FooterText => header_text
|
49
|
+
:FooterText => header_text,
|
51
50
|
}
|
52
51
|
end
|
53
52
|
|
54
53
|
def footnote_hash
|
55
54
|
{
|
56
|
-
:Type =>
|
55
|
+
:Type => 'PSGroupSpecifier',
|
57
56
|
:Title => footnote_title,
|
58
|
-
:FooterText => footnote_text
|
57
|
+
:FooterText => footnote_text,
|
59
58
|
}
|
60
59
|
end
|
61
60
|
end
|
@@ -15,7 +15,7 @@ module Pod
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def save_as(pathname)
|
18
|
-
gen_bridge_metadata %
|
18
|
+
gen_bridge_metadata %(-c "#{search_paths.join(' ')}" -o '#{pathname}' '#{headers.join("' '")}')
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module Pod
|
2
2
|
module Generator
|
3
3
|
class CopyResourcesScript
|
4
|
-
|
5
4
|
# @return [Array<#to_s>] A list of files relative to the project pods
|
6
5
|
# root.
|
7
6
|
#
|
@@ -44,7 +43,7 @@ module Pod
|
|
44
43
|
#
|
45
44
|
EXTERNAL_STRINGS_FILE_MIMINUM_DEPLOYMENT_TARGET = {
|
46
45
|
:ios => Version.new('6.0'),
|
47
|
-
:osx => Version.new('10.8')
|
46
|
+
:osx => Version.new('10.8'),
|
48
47
|
}
|
49
48
|
|
50
49
|
# @return [Bool] Whether the external strings file is supported by the
|
@@ -58,11 +57,11 @@ module Pod
|
|
58
57
|
# @return [String] The install resources shell function.
|
59
58
|
#
|
60
59
|
def install_resources_function
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
60
|
+
if use_external_strings_file?
|
61
|
+
INSTALL_RESOURCES_FUCTION
|
62
|
+
else
|
63
|
+
INSTALL_RESOURCES_FUCTION.gsub(' --reference-external-strings-file', '')
|
64
|
+
end
|
66
65
|
end
|
67
66
|
|
68
67
|
# @return [String] The contents of the copy resources script.
|
@@ -70,14 +69,13 @@ module Pod
|
|
70
69
|
def script
|
71
70
|
script = install_resources_function
|
72
71
|
resources.each do |resource|
|
73
|
-
script += %
|
72
|
+
script += %( install_resource "#{resource}"\n )
|
74
73
|
end
|
75
74
|
script += RSYNC_CALL
|
76
75
|
script += XCASSETS_COMPILE
|
77
76
|
script
|
78
77
|
end
|
79
78
|
|
80
|
-
|
81
79
|
INSTALL_RESOURCES_FUCTION = <<EOS
|
82
80
|
#!/bin/sh
|
83
81
|
set -e
|
@@ -124,7 +122,6 @@ install_resource()
|
|
124
122
|
}
|
125
123
|
EOS
|
126
124
|
|
127
|
-
|
128
125
|
RSYNC_CALL = <<EOS
|
129
126
|
|
130
127
|
rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
|
@@ -134,12 +131,11 @@ fi
|
|
134
131
|
rm -f "$RESOURCES_TO_COPY"
|
135
132
|
EOS
|
136
133
|
|
137
|
-
|
138
134
|
XCASSETS_COMPILE = <<EOS
|
139
135
|
|
140
136
|
if [[ -n "${WRAPPER_EXTENSION}" ]] && [ `xcrun --find actool` ] && [ `find . -name '*.xcassets' | wc -l` -ne 0 ]
|
141
137
|
then
|
142
|
-
case "${TARGETED_DEVICE_FAMILY}" in
|
138
|
+
case "${TARGETED_DEVICE_FAMILY}" in
|
143
139
|
1,2)
|
144
140
|
TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone"
|
145
141
|
;;
|
@@ -151,8 +147,8 @@ then
|
|
151
147
|
;;
|
152
148
|
*)
|
153
149
|
TARGET_DEVICE_ARGS="--target-device mac"
|
154
|
-
;;
|
155
|
-
esac
|
150
|
+
;;
|
151
|
+
esac
|
156
152
|
find "${PWD}" -name "*.xcassets" -print0 | xargs -0 actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
|
157
153
|
fi
|
158
154
|
EOS
|