cocoapods-square-stable 0.19.3

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.
Files changed (58) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +1296 -0
  3. data/LICENSE +20 -0
  4. data/README.md +94 -0
  5. data/bin/pod +16 -0
  6. data/bin/sandbox-pod +120 -0
  7. data/lib/cocoapods.rb +77 -0
  8. data/lib/cocoapods/command.rb +116 -0
  9. data/lib/cocoapods/command/help.rb +23 -0
  10. data/lib/cocoapods/command/inter_process_communication.rb +178 -0
  11. data/lib/cocoapods/command/list.rb +77 -0
  12. data/lib/cocoapods/command/outdated.rb +56 -0
  13. data/lib/cocoapods/command/podfile_info.rb +91 -0
  14. data/lib/cocoapods/command/project.rb +88 -0
  15. data/lib/cocoapods/command/push.rb +172 -0
  16. data/lib/cocoapods/command/repo.rb +145 -0
  17. data/lib/cocoapods/command/search.rb +61 -0
  18. data/lib/cocoapods/command/setup.rb +134 -0
  19. data/lib/cocoapods/command/spec.rb +590 -0
  20. data/lib/cocoapods/config.rb +231 -0
  21. data/lib/cocoapods/downloader.rb +59 -0
  22. data/lib/cocoapods/executable.rb +118 -0
  23. data/lib/cocoapods/external_sources.rb +363 -0
  24. data/lib/cocoapods/file_list.rb +36 -0
  25. data/lib/cocoapods/gem_version.rb +7 -0
  26. data/lib/cocoapods/generator/acknowledgements.rb +107 -0
  27. data/lib/cocoapods/generator/acknowledgements/markdown.rb +40 -0
  28. data/lib/cocoapods/generator/acknowledgements/plist.rb +64 -0
  29. data/lib/cocoapods/generator/bridge_support.rb +22 -0
  30. data/lib/cocoapods/generator/copy_resources_script.rb +54 -0
  31. data/lib/cocoapods/generator/dummy_source.rb +22 -0
  32. data/lib/cocoapods/generator/prefix_header.rb +82 -0
  33. data/lib/cocoapods/generator/target_environment_header.rb +86 -0
  34. data/lib/cocoapods/generator/xcconfig.rb +185 -0
  35. data/lib/cocoapods/hooks/installer_representation.rb +134 -0
  36. data/lib/cocoapods/hooks/library_representation.rb +94 -0
  37. data/lib/cocoapods/hooks/pod_representation.rb +74 -0
  38. data/lib/cocoapods/installer.rb +571 -0
  39. data/lib/cocoapods/installer/analyzer.rb +559 -0
  40. data/lib/cocoapods/installer/analyzer/sandbox_analyzer.rb +253 -0
  41. data/lib/cocoapods/installer/file_references_installer.rb +179 -0
  42. data/lib/cocoapods/installer/pod_source_installer.rb +248 -0
  43. data/lib/cocoapods/installer/target_installer.rb +379 -0
  44. data/lib/cocoapods/installer/user_project_integrator.rb +180 -0
  45. data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +224 -0
  46. data/lib/cocoapods/library.rb +202 -0
  47. data/lib/cocoapods/open_uri.rb +24 -0
  48. data/lib/cocoapods/project.rb +209 -0
  49. data/lib/cocoapods/resolver.rb +212 -0
  50. data/lib/cocoapods/sandbox.rb +343 -0
  51. data/lib/cocoapods/sandbox/file_accessor.rb +217 -0
  52. data/lib/cocoapods/sandbox/headers_store.rb +96 -0
  53. data/lib/cocoapods/sandbox/path_list.rb +208 -0
  54. data/lib/cocoapods/sources_manager.rb +276 -0
  55. data/lib/cocoapods/user_interface.rb +304 -0
  56. data/lib/cocoapods/user_interface/error_report.rb +101 -0
  57. data/lib/cocoapods/validator.rb +350 -0
  58. metadata +238 -0
@@ -0,0 +1,185 @@
1
+ module Pod
2
+ module Generator
3
+
4
+ # Generates an xcconfig file for each target of the Pods project. The
5
+ # configuration file should be used by the user target as well.
6
+ #
7
+ class XCConfig
8
+
9
+ # @return [Sandbox] the sandbox where the Pods project is installed.
10
+ #
11
+ attr_reader :sandbox
12
+
13
+ # @return [Array<Specification::Consumer>] the consumers for the
14
+ # specifications of the library which needs the xcconfig.
15
+ #
16
+ attr_reader :spec_consumers
17
+
18
+ # @return [String] the relative path of the Pods root respect the user
19
+ # project that should be integrated by this library.
20
+ #
21
+ attr_reader :relative_pods_root
22
+
23
+ # @param [Sandbox] sandbox @see sandbox
24
+ # @param [Array<LocalPod>] pods @see pods
25
+ # @param [String] relative_pods_root @see relative_pods_root
26
+ #
27
+ def initialize(sandbox, spec_consumers, relative_pods_root)
28
+ @sandbox = sandbox
29
+ @spec_consumers = spec_consumers
30
+ @relative_pods_root = relative_pods_root
31
+ end
32
+
33
+ # @return [Bool] whether the Podfile specifies to add the `-fobjc-arc`
34
+ # flag for compatibility.
35
+ #
36
+ attr_accessor :set_arc_compatibility_flag
37
+
38
+ #-----------------------------------------------------------------------#
39
+
40
+ # Generates the xcconfig for the library.
41
+ #
42
+ # @return [Xcodeproj::Config]
43
+ #
44
+ # @note The value `PODS_HEADERS_SEARCH_PATHS` is used to store the headers
45
+ # so xcconfig can reference the variable.
46
+ #
47
+ def generate
48
+ ld_flags = '-ObjC'
49
+ if set_arc_compatibility_flag && spec_consumers.any? { |consumer| consumer.requires_arc }
50
+ ld_flags << ' -fobjc-arc'
51
+ end
52
+
53
+ @xcconfig = Xcodeproj::Config.new({
54
+ 'ALWAYS_SEARCH_USER_PATHS' => 'YES',
55
+ 'OTHER_LDFLAGS' => ld_flags,
56
+ 'HEADER_SEARCH_PATHS' => '${PODS_HEADERS_SEARCH_PATHS}',
57
+ 'PODS_ROOT' => relative_pods_root,
58
+ 'PODS_HEADERS_SEARCH_PATHS' => '${PODS_PUBLIC_HEADERS_SEARCH_PATHS}',
59
+ 'PODS_BUILD_HEADERS_SEARCH_PATHS' => quote(sandbox.build_headers.search_paths),
60
+ 'PODS_PUBLIC_HEADERS_SEARCH_PATHS' => quote(sandbox.public_headers.search_paths),
61
+ 'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) COCOAPODS=1'
62
+ })
63
+
64
+ spec_consumers.each do |consumer|
65
+ add_spec_build_settings_to_xcconfig(consumer, @xcconfig)
66
+ end
67
+
68
+ @xcconfig
69
+ end
70
+
71
+ # @return [Xcodeproj::Config] The generated xcconfig.
72
+ #
73
+ attr_reader :xcconfig
74
+
75
+ # @return [Hash] The settings of the xcconfig that the Pods project
76
+ # needs to override.
77
+ #
78
+ def self.pods_project_settings
79
+ { 'PODS_ROOT' => '${SRCROOT}',
80
+ 'PODS_HEADERS_SEARCH_PATHS' => '${PODS_BUILD_HEADERS_SEARCH_PATHS}' }
81
+ end
82
+
83
+ # Generates and saves the xcconfig to the given path.
84
+ #
85
+ # @param [Pathname] path
86
+ # the path where the prefix header should be stored.
87
+ #
88
+ # @return [void]
89
+ #
90
+ def save_as(path)
91
+ path.open('w') { |file| file.write(generate) }
92
+ end
93
+
94
+ #-----------------------------------------------------------------------#
95
+
96
+ # @!group Private helpers.
97
+
98
+ private
99
+
100
+ # @return [String] the default linker flags. `-ObjC` is always included
101
+ # while `-fobjc-arc` is included only if requested in the
102
+ # Podfile.
103
+ #
104
+ def default_ld_flags
105
+ flags = %w[ -ObjC ]
106
+ requires_arc = pods.any? { |pod| pod.requires_arc? }
107
+ if requires_arc && set_arc_compatibility_flag
108
+ flags << '-fobjc-arc'
109
+ end
110
+ flags.join(" ")
111
+ end
112
+
113
+ # Converts an array of strings to a single string where the each string
114
+ # is surrounded by double quotes and separated by a space. Used to
115
+ # represent strings in a xcconfig file.
116
+ #
117
+ # @param [Array<String>] strings
118
+ # a list of strings.
119
+ #
120
+ # @return [String] the resulting string.
121
+ #
122
+ def quote(strings)
123
+ strings.sort.map { |s| %W|"#{s}"| }.join(" ")
124
+ end
125
+
126
+ # Configures the given Xcconfig according to the build settings of the
127
+ # given Specification.
128
+ #
129
+ # @param [Specification::Consumer] consumer
130
+ # The consumer of the specification.
131
+ #
132
+ # @param [Xcodeproj::Config] xcconfig
133
+ # The xcconfig to edit.
134
+ #
135
+ # @return [void]
136
+ #
137
+ def add_spec_build_settings_to_xcconfig(consumer, xcconfig)
138
+ xcconfig.merge!(consumer.xcconfig)
139
+ xcconfig.libraries.merge(consumer.libraries)
140
+ xcconfig.frameworks.merge(consumer.frameworks)
141
+ xcconfig.weak_frameworks.merge(consumer.weak_frameworks)
142
+ add_developers_frameworks_if_needed(consumer, xcconfig)
143
+ end
144
+
145
+ # @return [Array<String>] The search paths for the developer frameworks.
146
+ #
147
+ # @todo Inheritance should be properly handled in Xcconfigs.
148
+ #
149
+ DEVELOPER_FRAMEWORKS_SEARCH_PATHS = [
150
+ '$(inherited)',
151
+ '"$(SDKROOT)/Developer/Library/Frameworks"',
152
+ '"$(DEVELOPER_LIBRARY_DIR)/Frameworks"'
153
+ ]
154
+
155
+ # Adds the search paths of the developer frameworks to the specification
156
+ # if needed. This is done because the `SenTestingKit` requires them and
157
+ # adding them to each specification which requires it is repetitive and
158
+ # error prone.
159
+ #
160
+ # @param [Specification::Consumer] consumer
161
+ # The consumer of the specification.
162
+ #
163
+ # @param [Xcodeproj::Config] xcconfig
164
+ # The xcconfig to edit.
165
+ #
166
+ # @return [void]
167
+ #
168
+ def add_developers_frameworks_if_needed(consumer, xcconfig)
169
+ if xcconfig.frameworks.include?('SenTestingKit')
170
+ search_paths = xcconfig.attributes['FRAMEWORK_SEARCH_PATHS'] ||= ''
171
+ DEVELOPER_FRAMEWORKS_SEARCH_PATHS.each do |search_path|
172
+ unless search_paths.include?(search_path)
173
+ search_paths << ' ' unless search_paths.empty?
174
+ search_paths << search_path
175
+ end
176
+ end
177
+ end
178
+ end
179
+
180
+ #-----------------------------------------------------------------------#
181
+
182
+ end
183
+ end
184
+ end
185
+
@@ -0,0 +1,134 @@
1
+ module Pod
2
+
3
+ class Podfile
4
+ def config
5
+ UI.warn "Podfile#config is deprecated. The config is accessible from " \
6
+ "the parameter passed to the hooks"
7
+ Config.instance
8
+ end
9
+ end
10
+
11
+ class Podfile::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
18
+ end
19
+
20
+ module Hooks
21
+
22
+ # The installer representation to pass to the hooks.
23
+ #
24
+ class InstallerRepresentation
25
+
26
+ public
27
+
28
+ # @!group Public Hooks API
29
+
30
+ # @return [Pathname] The root of the sandbox.
31
+ #
32
+ def sandbox_root
33
+ installer.sandbox.root
34
+ end
35
+
36
+ # @return [Pod::Project] the `Pods/Pods.xcodeproj` project.
37
+ #
38
+ # @note This value is not yet set in the pre install callbacks.
39
+ #
40
+ def project
41
+ installer.pods_project
42
+ end
43
+
44
+ # @return [Array<PodRepresentation>] The representation of the Pods.
45
+ #
46
+ def pods
47
+ installer.pod_reps
48
+ end
49
+
50
+ # @return [Array<LibraryRepresentation>] The representation of the
51
+ # libraries.
52
+ #
53
+ def libraries
54
+ installer.library_reps
55
+ end
56
+
57
+ # @return [Hash{LibraryRepresentation => Array<Specification>}] The
58
+ # specifications grouped by target definition.
59
+ #
60
+ def specs_by_lib
61
+ result = {}
62
+ installer.libraries.each do |lib|
63
+ result[installer.library_rep(lib)] = lib.specs
64
+ end
65
+ result
66
+ end
67
+
68
+ # @return [Hash{LibraryRepresentation => Array<PodRepresentation>}] The
69
+ # local pod instances grouped by target.
70
+ #
71
+ def pods_by_lib
72
+ result = {}
73
+ installer.libraries.each do |lib|
74
+ pod_names = lib.specs.map { |spec| spec.root.name }.uniq
75
+ pod_reps = pods.select { |rep| pod_names.include?(rep.name) }
76
+ result[lib.target_definition] = pod_reps
77
+ end
78
+ result
79
+ end
80
+
81
+ #-----------------------------------------------------------------------#
82
+ public
83
+
84
+ # @!group Compatibility
85
+ #
86
+ # The following aliases provides compatibility with CP < 0.17
87
+
88
+ alias :target_installers :libraries
89
+ alias :specs_by_target :specs_by_lib
90
+ alias :local_pods_by_target :pods_by_lib
91
+
92
+ #-----------------------------------------------------------------------#
93
+
94
+ public
95
+
96
+ # @!group Unsafe Hooks API
97
+ #
98
+ # The interface of the following objects might change at any time.
99
+ # If there some information which is needed, please open an issue.
100
+
101
+ # @return [Sandbox] sandbox the sandbox where the support files should
102
+ # be generated.
103
+ #
104
+ def sandbox
105
+ installer.sandbox
106
+ end
107
+
108
+ # @return [Config] The config singleton used for the installation.
109
+ #
110
+ def config
111
+ Config.instance
112
+ end
113
+
114
+ # @return [Installer] The installer described by this instance.
115
+ #
116
+ attr_reader :installer
117
+
118
+ #-----------------------------------------------------------------------#
119
+
120
+ # @!group Private implementation
121
+
122
+ # @param [Installer] installer @see installer
123
+ #
124
+ def initialize(installer)
125
+ @installer = installer
126
+ end
127
+
128
+ #-----------------------------------------------------------------------#
129
+
130
+ end
131
+ end
132
+ end
133
+
134
+
@@ -0,0 +1,94 @@
1
+ module Pod
2
+ module Hooks
3
+ class LibraryRepresentation
4
+
5
+ # Stores the information of the target installer
6
+
7
+ #-----------------------------------------------------------------------#
8
+
9
+ # @return [String] The name of the Pods library.
10
+ #
11
+ def name
12
+ library.name
13
+ end
14
+
15
+ # @return [Array<Dependency>] The dependencies of this library.
16
+ #
17
+ def dependencies
18
+ target_definition.dependencies
19
+ end
20
+
21
+ # @return [Pathname] The path of the Pods dir.
22
+ #
23
+ def sandbox_dir
24
+ sandbox.root
25
+ end
26
+
27
+ # @return [Pathname] The path of the prefix_header
28
+ #
29
+ def prefix_header_path
30
+ UI.warn "LibraryRepresentation#prefix_header_path is deprecated. " \
31
+ "Use the specification `prefix_header_contents` attribute."
32
+ library.prefix_header_path
33
+ end
34
+ alias :prefix_header_filename :prefix_header_path
35
+
36
+ # @return [Pathname] The path of the script used to copy the resources.
37
+ #
38
+ def copy_resources_script_path
39
+ library.copy_resources_script_path
40
+ end
41
+
42
+ # @return [Project] The Pods project of the sandbox.
43
+ #
44
+ def project
45
+ sandbox.project
46
+ end
47
+
48
+ # @return [TargetDefinition] The target definition of the library.
49
+ #
50
+ def target_definition
51
+ library.target_definition
52
+ end
53
+
54
+ #-----------------------------------------------------------------------#
55
+
56
+ public
57
+
58
+ # @!group Unsafe Hooks API
59
+
60
+ # @return [Sandbox] sandbox the sandbox where the support files should
61
+ # be generated.
62
+ #
63
+ attr_reader :sandbox
64
+
65
+ # @return [Library] The library whose target needs to be generated.
66
+ #
67
+ attr_reader :library
68
+
69
+ # @return [PBXNativeTarget] The target generated by the installation
70
+ # process.
71
+ #
72
+ def target
73
+ library.target
74
+ end
75
+
76
+ #-----------------------------------------------------------------------#
77
+
78
+ # @!group Private implementation
79
+
80
+ # @param [Sandbox] sandbox @see sandbox
81
+ # @param [Library] library @see library
82
+ #
83
+ def initialize(sandbox, library)
84
+ @sandbox = sandbox
85
+ @library = library
86
+ end
87
+
88
+ #-----------------------------------------------------------------------#
89
+
90
+ end
91
+ end
92
+ end
93
+
94
+
@@ -0,0 +1,74 @@
1
+ module Pod
2
+
3
+ class Specification
4
+ def config
5
+ UI.warn "[#{name}] Specification#config is deprecated. The config is accessible from " \
6
+ "the parameter passed to the hooks"
7
+ Config.instance
8
+ end
9
+ end
10
+
11
+ module Hooks
12
+
13
+ # Stores the information of the Installer for the hooks
14
+ #
15
+ class PodRepresentation
16
+
17
+ # @return [String]
18
+ #
19
+ attr_accessor :name
20
+
21
+ # @return [Version]
22
+ #
23
+ def version
24
+ root_spec.version
25
+ end
26
+
27
+ # @return [Specification]
28
+ #
29
+ def root_spec
30
+ file_accessors.first.spec.root
31
+ end
32
+
33
+ # @return [Array<Specification>]
34
+ #
35
+ def specs
36
+ file_accessors.map(&:spec).uniq
37
+ end
38
+
39
+ # @return [Pathname]
40
+ #
41
+ def root
42
+ file_accessors.first.path_list.root
43
+ end
44
+
45
+ # @return [Array<Pathname>]
46
+ #
47
+ def source_files
48
+ file_accessors.map(&:source_files).flatten.uniq
49
+ end
50
+
51
+ #-----------------------------------------------------------------------#
52
+
53
+ # @!group Private implementation
54
+
55
+ # @param [Installer] installer @see installer
56
+ #
57
+ def initialize(name, file_accessors)
58
+ @name = name
59
+ @file_accessors = file_accessors
60
+ end
61
+
62
+ def to_s
63
+ root_spec.to_s
64
+ end
65
+
66
+ private
67
+
68
+ attr_reader :file_accessors
69
+
70
+ #-----------------------------------------------------------------------#
71
+
72
+ end
73
+ end
74
+ end