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
@@ -1,117 +1,114 @@
|
|
1
1
|
module Pod
|
2
2
|
module Generator
|
3
3
|
module XCConfig
|
4
|
-
|
5
|
-
# Generates the private xcconfigs for the pod targets.
|
6
|
-
#
|
7
|
-
# The private xcconfig file for a Pod target merges the configuration
|
8
|
-
# values of the public namespaced xcconfig with the default private
|
9
|
-
# configuration values required by CocoaPods.
|
10
|
-
#
|
11
|
-
class PrivatePodXCConfig
|
12
|
-
|
13
|
-
# @return [Target] the target represented by this xcconfig.
|
4
|
+
# Generates the private xcconfigs for the pod targets.
|
14
5
|
#
|
15
|
-
|
16
|
-
|
17
|
-
#
|
18
|
-
# use.
|
6
|
+
# The private xcconfig file for a Pod target merges the configuration
|
7
|
+
# values of the public namespaced xcconfig with the default private
|
8
|
+
# configuration values required by CocoaPods.
|
19
9
|
#
|
20
|
-
|
10
|
+
class PrivatePodXCConfig
|
11
|
+
# @return [Target] the target represented by this xcconfig.
|
12
|
+
#
|
13
|
+
attr_reader :target
|
21
14
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
@target = target
|
27
|
-
@public_xcconfig = public_xcconfig
|
28
|
-
end
|
15
|
+
# @return [Xcodeproj::Config] The public xcconfig which this one will
|
16
|
+
# use.
|
17
|
+
#
|
18
|
+
attr_reader :public_xcconfig
|
29
19
|
|
30
|
-
|
31
|
-
|
32
|
-
|
20
|
+
# @param [Target] target @see target
|
21
|
+
# @param [Xcodeproj::Config] public_xcconfig @see public_xcconfig
|
22
|
+
#
|
23
|
+
def initialize(target, public_xcconfig)
|
24
|
+
@target = target
|
25
|
+
@public_xcconfig = public_xcconfig
|
26
|
+
end
|
33
27
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
# the path where the prefix header should be stored.
|
38
|
-
#
|
39
|
-
# @return [void]
|
40
|
-
#
|
41
|
-
def save_as(path)
|
42
|
-
generate.save_as(path)
|
43
|
-
end
|
28
|
+
# @return [Xcodeproj::Config] The generated xcconfig.
|
29
|
+
#
|
30
|
+
attr_reader :xcconfig
|
44
31
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
'GCC_PREPROCESSOR_DEFINITIONS' => 'COCOAPODS=1',
|
56
|
-
# 'USE_HEADERMAP' => 'NO'
|
57
|
-
}
|
32
|
+
# Generates and saves the xcconfig to the given path.
|
33
|
+
#
|
34
|
+
# @param [Pathname] path
|
35
|
+
# the path where the prefix header should be stored.
|
36
|
+
#
|
37
|
+
# @return [void]
|
38
|
+
#
|
39
|
+
def save_as(path)
|
40
|
+
generate.save_as(path)
|
41
|
+
end
|
58
42
|
|
59
|
-
|
60
|
-
|
61
|
-
@
|
62
|
-
|
63
|
-
|
43
|
+
# Generates the xcconfig.
|
44
|
+
#
|
45
|
+
# @return [Xcodeproj::Config]
|
46
|
+
#
|
47
|
+
def generate
|
48
|
+
search_paths = target.build_headers.search_paths.concat(target.sandbox.public_headers.search_paths)
|
49
|
+
config = {
|
50
|
+
'OTHER_LDFLAGS' => XCConfigHelper.default_ld_flags(target),
|
51
|
+
'PODS_ROOT' => '${SRCROOT}',
|
52
|
+
'HEADER_SEARCH_PATHS' => XCConfigHelper.quote(search_paths),
|
53
|
+
'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) COCOAPODS=1',
|
54
|
+
# 'USE_HEADERMAP' => 'NO'
|
55
|
+
}
|
64
56
|
|
65
|
-
|
57
|
+
xcconfig_hash = add_xcconfig_namespaced_keys(public_xcconfig.to_hash, config, target.xcconfig_prefix)
|
58
|
+
@xcconfig = Xcodeproj::Config.new(xcconfig_hash)
|
59
|
+
@xcconfig.includes = [target.name]
|
60
|
+
@xcconfig
|
61
|
+
end
|
66
62
|
|
67
|
-
|
63
|
+
private
|
68
64
|
|
69
|
-
|
65
|
+
#-----------------------------------------------------------------------#
|
70
66
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
source_config
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
67
|
+
# !@group Private Helpers
|
68
|
+
|
69
|
+
# Returns the hash representation of an xcconfig which inherit from the
|
70
|
+
# namespaced keys of a given one.
|
71
|
+
#
|
72
|
+
# @param [Hash] source_config
|
73
|
+
# The xcconfig whose keys need to be inherited.
|
74
|
+
#
|
75
|
+
# @param [Hash] destination_config
|
76
|
+
# The config which should inherit the source config keys.
|
77
|
+
#
|
78
|
+
# @return [Hash] The inheriting xcconfig.
|
79
|
+
#
|
80
|
+
def add_xcconfig_namespaced_keys(source_config, destination_config, prefix)
|
81
|
+
result = destination_config.dup
|
82
|
+
source_config.each do |key, _value|
|
83
|
+
prefixed_key = prefix + conditional_less_key(key)
|
84
|
+
current_value = destination_config[key]
|
85
|
+
if current_value
|
86
|
+
result[key] = "#{current_value} ${#{prefixed_key}}"
|
87
|
+
else
|
88
|
+
result[key] = "${#{prefixed_key}}"
|
89
|
+
end
|
91
90
|
end
|
91
|
+
result
|
92
92
|
end
|
93
|
-
result
|
94
|
-
end
|
95
93
|
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
94
|
+
# Strips the [*]-syntax from the given xcconfig key.
|
95
|
+
#
|
96
|
+
# @param [String] key
|
97
|
+
# The key to strip.
|
98
|
+
#
|
99
|
+
# @return [String] The stripped key.
|
100
|
+
#
|
101
|
+
def conditional_less_key(key)
|
102
|
+
brackets_index = key.index('[')
|
103
|
+
if brackets_index
|
104
|
+
key[0...brackets_index]
|
105
|
+
else
|
106
|
+
key
|
107
|
+
end
|
109
108
|
end
|
110
|
-
end
|
111
|
-
|
112
|
-
#-----------------------------------------------------------------------#
|
113
109
|
|
114
|
-
|
110
|
+
#-----------------------------------------------------------------------#
|
111
|
+
end
|
115
112
|
end
|
116
113
|
end
|
117
114
|
end
|
@@ -1,62 +1,59 @@
|
|
1
1
|
module Pod
|
2
2
|
module Generator
|
3
3
|
module XCConfig
|
4
|
+
# Generates the public xcconfigs for the pod targets.
|
5
|
+
#
|
6
|
+
# The public xcconfig file for a Pod is completely namespaced to prevent
|
7
|
+
# configuration value collision with the build settings of other Pods. This
|
8
|
+
# xcconfig includes the standard podspec defined values including
|
9
|
+
# libraries, frameworks, weak frameworks and xcconfig overrides.
|
10
|
+
#
|
11
|
+
class PublicPodXCConfig
|
12
|
+
# @return [Target] the target represented by this xcconfig.
|
13
|
+
#
|
14
|
+
attr_reader :target
|
15
|
+
|
16
|
+
# @param [Target] target @see target
|
17
|
+
#
|
18
|
+
def initialize(target)
|
19
|
+
@target = target
|
20
|
+
end
|
4
21
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
#
|
20
|
-
def initialize(target)
|
21
|
-
@target = target
|
22
|
-
end
|
23
|
-
|
24
|
-
# @return [Xcodeproj::Config] The generated xcconfig.
|
25
|
-
#
|
26
|
-
attr_reader :xcconfig
|
27
|
-
|
28
|
-
# Generates and saves the xcconfig to the given path.
|
29
|
-
#
|
30
|
-
# @param [Pathname] path
|
31
|
-
# the path where the prefix header should be stored.
|
32
|
-
#
|
33
|
-
# @return [void]
|
34
|
-
#
|
35
|
-
def save_as(path)
|
36
|
-
generate.save_as(path, target.xcconfig_prefix)
|
37
|
-
end
|
22
|
+
# @return [Xcodeproj::Config] The generated xcconfig.
|
23
|
+
#
|
24
|
+
attr_reader :xcconfig
|
25
|
+
|
26
|
+
# Generates and saves the xcconfig to the given path.
|
27
|
+
#
|
28
|
+
# @param [Pathname] path
|
29
|
+
# the path where the prefix header should be stored.
|
30
|
+
#
|
31
|
+
# @return [void]
|
32
|
+
#
|
33
|
+
def save_as(path)
|
34
|
+
generate.save_as(path, target.xcconfig_prefix)
|
35
|
+
end
|
38
36
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
37
|
+
# Generates the xcconfig for the target.
|
38
|
+
#
|
39
|
+
# @return [Xcodeproj::Config]
|
40
|
+
#
|
41
|
+
def generate
|
42
|
+
@xcconfig = Xcodeproj::Config.new
|
43
|
+
target.file_accessors.each do |file_accessor|
|
44
|
+
XCConfigHelper.add_spec_build_settings_to_xcconfig(file_accessor.spec_consumer, @xcconfig)
|
45
|
+
file_accessor.vendored_frameworks.each do |vendored_framework|
|
46
|
+
XCConfigHelper.add_framework_build_settings(vendored_framework, @xcconfig, target.sandbox.root)
|
47
|
+
end
|
48
|
+
file_accessor.vendored_libraries.each do |vendored_library|
|
49
|
+
XCConfigHelper.add_library_build_settings(vendored_library, @xcconfig, target.sandbox.root)
|
50
|
+
end
|
52
51
|
end
|
52
|
+
@xcconfig
|
53
53
|
end
|
54
|
-
@xcconfig
|
55
|
-
end
|
56
54
|
|
57
|
-
|
58
|
-
|
59
|
-
end
|
55
|
+
#-----------------------------------------------------------------------#
|
56
|
+
end
|
60
57
|
end
|
61
58
|
end
|
62
59
|
end
|
@@ -1,11 +1,9 @@
|
|
1
1
|
module Pod
|
2
2
|
module Generator
|
3
3
|
module XCConfig
|
4
|
-
|
5
4
|
# Stores the shared logic of the classes of the XCConfig module.
|
6
5
|
#
|
7
6
|
module XCConfigHelper
|
8
|
-
|
9
7
|
# Converts an array of strings to a single string where the each string
|
10
8
|
# is surrounded by double quotes and separated by a space. Used to
|
11
9
|
# represent strings in a xcconfig file.
|
@@ -19,7 +17,7 @@ module Pod
|
|
19
17
|
#
|
20
18
|
def self.quote(strings, prefix = nil)
|
21
19
|
prefix = "#{prefix} " if prefix
|
22
|
-
strings.sort.map { |s| %W
|
20
|
+
strings.sort.map { |s| %W( #{prefix}"#{s}" ) }.join(' ')
|
23
21
|
end
|
24
22
|
|
25
23
|
# @return [String] the default linker flags. `-ObjC` is always included
|
@@ -28,8 +26,8 @@ module Pod
|
|
28
26
|
#
|
29
27
|
def self.default_ld_flags(target)
|
30
28
|
ld_flags = '-ObjC'
|
31
|
-
if target.target_definition.podfile.set_arc_compatibility_flag?
|
32
|
-
target.spec_consumers.any?
|
29
|
+
if target.target_definition.podfile.set_arc_compatibility_flag? &&
|
30
|
+
target.spec_consumers.any?(&:requires_arc?)
|
33
31
|
ld_flags << ' -fobjc-arc'
|
34
32
|
end
|
35
33
|
ld_flags
|
@@ -62,11 +60,11 @@ module Pod
|
|
62
60
|
# The xcconfig to edit.
|
63
61
|
#
|
64
62
|
def self.add_framework_build_settings(framework_path, xcconfig, sandbox_root)
|
65
|
-
name = File.basename(framework_path,
|
63
|
+
name = File.basename(framework_path, '.framework')
|
66
64
|
dirname = '$(PODS_ROOT)/' + framework_path.dirname.relative_path_from(sandbox_root).to_s
|
67
65
|
build_settings = {
|
68
66
|
'OTHER_LDFLAGS' => "-framework #{name}",
|
69
|
-
'FRAMEWORK_SEARCH_PATHS' => quote([dirname])
|
67
|
+
'FRAMEWORK_SEARCH_PATHS' => quote([dirname]),
|
70
68
|
}
|
71
69
|
xcconfig.merge!(build_settings)
|
72
70
|
end
|
@@ -81,11 +79,11 @@ module Pod
|
|
81
79
|
# The xcconfig to edit.
|
82
80
|
#
|
83
81
|
def self.add_library_build_settings(library_path, xcconfig, sandbox_root)
|
84
|
-
name = File.basename(library_path,
|
82
|
+
name = File.basename(library_path, '.a').sub(/\Alib/, '')
|
85
83
|
dirname = '$(PODS_ROOT)/' + library_path.dirname.relative_path_from(sandbox_root).to_s
|
86
84
|
build_settings = {
|
87
85
|
'OTHER_LDFLAGS' => "-l#{name}",
|
88
|
-
'LIBRARY_SEARCH_PATHS' => quote([dirname])
|
86
|
+
'LIBRARY_SEARCH_PATHS' => quote([dirname]),
|
89
87
|
}
|
90
88
|
xcconfig.merge!(build_settings)
|
91
89
|
end
|
@@ -101,7 +99,7 @@ module Pod
|
|
101
99
|
# @return [void]
|
102
100
|
#
|
103
101
|
def self.add_developers_frameworks_if_needed(xcconfig, platform)
|
104
|
-
matched_frameworks = xcconfig.frameworks &
|
102
|
+
matched_frameworks = xcconfig.frameworks & %w(XCTest SenTestingKit)
|
105
103
|
unless matched_frameworks.empty?
|
106
104
|
search_paths = xcconfig.attributes['FRAMEWORK_SEARCH_PATHS'] ||= ''
|
107
105
|
search_paths_to_add = []
|
@@ -111,6 +109,8 @@ module Pod
|
|
111
109
|
else
|
112
110
|
search_paths_to_add << '"$(DEVELOPER_LIBRARY_DIR)/Frameworks"'
|
113
111
|
end
|
112
|
+
frameworks_path = '"$(PLATFORM_DIR)/Developer/Library/Frameworks"'
|
113
|
+
search_paths_to_add << frameworks_path
|
114
114
|
search_paths_to_add.each do |search_path|
|
115
115
|
unless search_paths.include?(search_path)
|
116
116
|
search_paths << ' ' unless search_paths.empty?
|
@@ -1,28 +1,27 @@
|
|
1
1
|
module Pod
|
2
|
-
|
2
|
+
# @todo: Remove by CocoaPods 1.0
|
3
|
+
#
|
3
4
|
class Podfile
|
4
5
|
def config
|
5
|
-
UI.warn
|
6
|
-
|
6
|
+
UI.warn 'Podfile#config is deprecated. The config is accessible from ' \
|
7
|
+
'the parameter passed to the hooks'
|
7
8
|
Config.instance
|
8
9
|
end
|
9
|
-
end
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
11
|
+
class TargetDefinition
|
12
|
+
def copy_resources_script_name
|
13
|
+
UI.warn 'TargetDefinition#copy_resources_script_name is deprecated. ' \
|
14
|
+
'The value is accessible directly from the representation of the ' \
|
15
|
+
'library using the #copy_resources_script_path method.'
|
16
|
+
Config.instance.sandbox.root + "#{label}-resources.sh"
|
17
|
+
end
|
17
18
|
end
|
18
19
|
end
|
19
20
|
|
20
21
|
module Hooks
|
21
|
-
|
22
22
|
# The installer representation to pass to the hooks.
|
23
23
|
#
|
24
24
|
class InstallerRepresentation
|
25
|
-
|
26
25
|
public
|
27
26
|
|
28
27
|
# @!group Public Hooks API
|
@@ -79,15 +78,16 @@ module Pod
|
|
79
78
|
end
|
80
79
|
|
81
80
|
#-----------------------------------------------------------------------#
|
81
|
+
|
82
82
|
public
|
83
83
|
|
84
84
|
# @!group Compatibility
|
85
85
|
#
|
86
86
|
# The following aliases provides compatibility with CP < 0.17
|
87
87
|
|
88
|
-
|
89
|
-
|
90
|
-
|
88
|
+
alias_method :target_installers, :libraries
|
89
|
+
alias_method :specs_by_target, :specs_by_lib
|
90
|
+
alias_method :local_pods_by_target, :pods_by_lib
|
91
91
|
|
92
92
|
#-----------------------------------------------------------------------#
|
93
93
|
|
@@ -126,9 +126,6 @@ module Pod
|
|
126
126
|
end
|
127
127
|
|
128
128
|
#-----------------------------------------------------------------------#
|
129
|
-
|
130
129
|
end
|
131
130
|
end
|
132
131
|
end
|
133
|
-
|
134
|
-
|