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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +1296 -0
- data/LICENSE +20 -0
- data/README.md +94 -0
- data/bin/pod +16 -0
- data/bin/sandbox-pod +120 -0
- data/lib/cocoapods.rb +77 -0
- data/lib/cocoapods/command.rb +116 -0
- data/lib/cocoapods/command/help.rb +23 -0
- data/lib/cocoapods/command/inter_process_communication.rb +178 -0
- data/lib/cocoapods/command/list.rb +77 -0
- data/lib/cocoapods/command/outdated.rb +56 -0
- data/lib/cocoapods/command/podfile_info.rb +91 -0
- data/lib/cocoapods/command/project.rb +88 -0
- data/lib/cocoapods/command/push.rb +172 -0
- data/lib/cocoapods/command/repo.rb +145 -0
- data/lib/cocoapods/command/search.rb +61 -0
- data/lib/cocoapods/command/setup.rb +134 -0
- data/lib/cocoapods/command/spec.rb +590 -0
- data/lib/cocoapods/config.rb +231 -0
- data/lib/cocoapods/downloader.rb +59 -0
- data/lib/cocoapods/executable.rb +118 -0
- data/lib/cocoapods/external_sources.rb +363 -0
- data/lib/cocoapods/file_list.rb +36 -0
- data/lib/cocoapods/gem_version.rb +7 -0
- data/lib/cocoapods/generator/acknowledgements.rb +107 -0
- data/lib/cocoapods/generator/acknowledgements/markdown.rb +40 -0
- data/lib/cocoapods/generator/acknowledgements/plist.rb +64 -0
- data/lib/cocoapods/generator/bridge_support.rb +22 -0
- data/lib/cocoapods/generator/copy_resources_script.rb +54 -0
- data/lib/cocoapods/generator/dummy_source.rb +22 -0
- data/lib/cocoapods/generator/prefix_header.rb +82 -0
- data/lib/cocoapods/generator/target_environment_header.rb +86 -0
- data/lib/cocoapods/generator/xcconfig.rb +185 -0
- data/lib/cocoapods/hooks/installer_representation.rb +134 -0
- data/lib/cocoapods/hooks/library_representation.rb +94 -0
- data/lib/cocoapods/hooks/pod_representation.rb +74 -0
- data/lib/cocoapods/installer.rb +571 -0
- data/lib/cocoapods/installer/analyzer.rb +559 -0
- data/lib/cocoapods/installer/analyzer/sandbox_analyzer.rb +253 -0
- data/lib/cocoapods/installer/file_references_installer.rb +179 -0
- data/lib/cocoapods/installer/pod_source_installer.rb +248 -0
- data/lib/cocoapods/installer/target_installer.rb +379 -0
- data/lib/cocoapods/installer/user_project_integrator.rb +180 -0
- data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +224 -0
- data/lib/cocoapods/library.rb +202 -0
- data/lib/cocoapods/open_uri.rb +24 -0
- data/lib/cocoapods/project.rb +209 -0
- data/lib/cocoapods/resolver.rb +212 -0
- data/lib/cocoapods/sandbox.rb +343 -0
- data/lib/cocoapods/sandbox/file_accessor.rb +217 -0
- data/lib/cocoapods/sandbox/headers_store.rb +96 -0
- data/lib/cocoapods/sandbox/path_list.rb +208 -0
- data/lib/cocoapods/sources_manager.rb +276 -0
- data/lib/cocoapods/user_interface.rb +304 -0
- data/lib/cocoapods/user_interface/error_report.rb +101 -0
- data/lib/cocoapods/validator.rb +350 -0
- metadata +238 -0
@@ -0,0 +1,36 @@
|
|
1
|
+
if RUBY_VERSION >= "1.9"
|
2
|
+
require 'rake/file_list'
|
3
|
+
else
|
4
|
+
require 'rake'
|
5
|
+
end
|
6
|
+
|
7
|
+
# This makes Rake::FileList usable with the Specification attributes
|
8
|
+
# source_files, public_header_files, preserve_paths, and resources.
|
9
|
+
#
|
10
|
+
# @todo This needs to be deprecated as we no have the PathList List
|
11
|
+
#
|
12
|
+
module Rake
|
13
|
+
class FileList
|
14
|
+
def prepend_patterns(pathname)
|
15
|
+
@pending_add.map! { |pattern| (pathname + pattern).to_s }
|
16
|
+
end
|
17
|
+
|
18
|
+
def directory?
|
19
|
+
false
|
20
|
+
end
|
21
|
+
|
22
|
+
def glob
|
23
|
+
to_a.map { |path| Pathname.new(path) }
|
24
|
+
end
|
25
|
+
|
26
|
+
def inspect
|
27
|
+
"<##{self.class} pending_add=#{@pending_add}>"
|
28
|
+
end
|
29
|
+
alias :to_s :inspect
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# TODO Defined in CocoaPods Core
|
34
|
+
# module Pod
|
35
|
+
# FileList = Rake::FileList
|
36
|
+
# end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
module Pod
|
2
|
+
module Generator
|
3
|
+
|
4
|
+
class Acknowledgements
|
5
|
+
|
6
|
+
# @return [Array<Class>] The classes of the acknowledgements generator
|
7
|
+
# subclasses.
|
8
|
+
#
|
9
|
+
def self.generators
|
10
|
+
[Plist, Markdown]
|
11
|
+
end
|
12
|
+
|
13
|
+
# @return [Array<Sandbox::FileAccessor>] the list of the file accessors
|
14
|
+
# for the specs of the target that needs to generate the
|
15
|
+
# acknowledgements.
|
16
|
+
#
|
17
|
+
attr_reader :file_accessors
|
18
|
+
|
19
|
+
# @param [Array<Sandbox::FileAccessor>] @see file_accessors.
|
20
|
+
#
|
21
|
+
def initialize(file_accessors)
|
22
|
+
@file_accessors = file_accessors
|
23
|
+
end
|
24
|
+
|
25
|
+
#-----------------------------------------------------------------------#
|
26
|
+
|
27
|
+
# !@group Configuration
|
28
|
+
|
29
|
+
# @return [String] The title of the acknowledgements file.
|
30
|
+
#
|
31
|
+
def header_title
|
32
|
+
"Acknowledgements"
|
33
|
+
end
|
34
|
+
|
35
|
+
# @return [String] A text to present before listing the acknowledgements.
|
36
|
+
#
|
37
|
+
def header_text
|
38
|
+
"This application makes use of the following third party libraries:"
|
39
|
+
end
|
40
|
+
|
41
|
+
# @return [String] The title of the foot notes.
|
42
|
+
#
|
43
|
+
def footnote_title
|
44
|
+
""
|
45
|
+
end
|
46
|
+
|
47
|
+
# @return [String] the foot notes.
|
48
|
+
#
|
49
|
+
def footnote_text
|
50
|
+
"Generated by CocoaPods - http://cocoapods.org"
|
51
|
+
end
|
52
|
+
|
53
|
+
#-----------------------------------------------------------------------#
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
# !@group Private methods
|
58
|
+
|
59
|
+
# @return [Array<Specification>] The root specifications for which the
|
60
|
+
# acknowledgements should be generated.
|
61
|
+
#
|
62
|
+
def specs
|
63
|
+
file_accessors.map{ |accessor| accessor.spec.root }.uniq
|
64
|
+
end
|
65
|
+
|
66
|
+
# Returns the text of the license for the given spec.
|
67
|
+
#
|
68
|
+
# @param [Specification] spec
|
69
|
+
# the specification for which license is needed.
|
70
|
+
#
|
71
|
+
# @return [String] The text of the license.
|
72
|
+
# @return [Nil] If not license text could be found.
|
73
|
+
#
|
74
|
+
def license_text(spec)
|
75
|
+
return nil unless spec.license
|
76
|
+
text = spec.license[:text]
|
77
|
+
unless text
|
78
|
+
if license_file = file_accessor(spec).license
|
79
|
+
if license_file.exist?
|
80
|
+
text = IO.read(license_file)
|
81
|
+
else
|
82
|
+
UI.warn "Unable to read the license file `#{license_file }` " \
|
83
|
+
"for the spec `#{spec}`"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
text
|
88
|
+
end
|
89
|
+
|
90
|
+
protected
|
91
|
+
|
92
|
+
# Returns the file accessor for the given spec.
|
93
|
+
#
|
94
|
+
# @param [Specification] spec
|
95
|
+
# the specification for which the file accessor is needed.
|
96
|
+
#
|
97
|
+
# @return [Sandbox::FileAccessor] The file accessor.
|
98
|
+
#
|
99
|
+
def file_accessor(spec)
|
100
|
+
file_accessors.find { |accessor| accessor.spec.root == spec }
|
101
|
+
end
|
102
|
+
|
103
|
+
#-----------------------------------------------------------------------#
|
104
|
+
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Pod
|
2
|
+
module Generator
|
3
|
+
|
4
|
+
class Markdown < Acknowledgements
|
5
|
+
|
6
|
+
def self.path_from_basepath(path)
|
7
|
+
Pathname.new(path.dirname + "#{path.basename.to_s}.markdown")
|
8
|
+
end
|
9
|
+
|
10
|
+
def save_as(path)
|
11
|
+
file = File.new(path, "w")
|
12
|
+
file.write(licenses)
|
13
|
+
file.close
|
14
|
+
end
|
15
|
+
|
16
|
+
def title_from_string(string, level)
|
17
|
+
if !string.empty?
|
18
|
+
"#" * level << " #{string}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def string_for_spec(spec)
|
23
|
+
if (license_text = license_text(spec))
|
24
|
+
"\n" << title_from_string(spec.name, 2) << "\n\n" << license_text << "\n"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def licenses
|
29
|
+
licenses_string = "#{title_from_string(header_title, 1)}\n#{header_text}\n"
|
30
|
+
specs.each do |spec|
|
31
|
+
if (license = string_for_spec(spec))
|
32
|
+
license = license.force_encoding("UTF-8") if license.respond_to?(:force_encoding)
|
33
|
+
licenses_string += license
|
34
|
+
end
|
35
|
+
end
|
36
|
+
licenses_string += "#{title_from_string(footnote_title, 2)}#{footnote_text}\n"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Pod
|
2
|
+
module Generator
|
3
|
+
|
4
|
+
class Plist < Acknowledgements
|
5
|
+
require "xcodeproj/xcodeproj_ext"
|
6
|
+
|
7
|
+
def self.path_from_basepath(path)
|
8
|
+
Pathname.new(path.dirname + "#{path.basename.to_s}.plist")
|
9
|
+
end
|
10
|
+
|
11
|
+
def save_as(path)
|
12
|
+
Xcodeproj.write_plist(plist, path)
|
13
|
+
end
|
14
|
+
|
15
|
+
def plist
|
16
|
+
{
|
17
|
+
:Title => plist_title,
|
18
|
+
:StringsTable => plist_title,
|
19
|
+
:PreferenceSpecifiers => licenses
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
def plist_title
|
24
|
+
"Acknowledgements"
|
25
|
+
end
|
26
|
+
|
27
|
+
def licenses
|
28
|
+
licences_array = [header_hash]
|
29
|
+
specs.each do |spec|
|
30
|
+
if (hash = hash_for_spec(spec))
|
31
|
+
licences_array << hash
|
32
|
+
end
|
33
|
+
end
|
34
|
+
licences_array << footnote_hash
|
35
|
+
end
|
36
|
+
|
37
|
+
def hash_for_spec(spec)
|
38
|
+
if (license = license_text(spec))
|
39
|
+
{
|
40
|
+
:Type => "PSGroupSpecifier",
|
41
|
+
:Title => spec.name,
|
42
|
+
:FooterText => license
|
43
|
+
}
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def header_hash
|
48
|
+
{
|
49
|
+
:Type => "PSGroupSpecifier",
|
50
|
+
:Title => header_title,
|
51
|
+
:FooterText => header_text
|
52
|
+
}
|
53
|
+
end
|
54
|
+
|
55
|
+
def footnote_hash
|
56
|
+
{
|
57
|
+
:Type => "PSGroupSpecifier",
|
58
|
+
:Title => footnote_title,
|
59
|
+
:FooterText => footnote_text
|
60
|
+
}
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Pod
|
2
|
+
module Generator
|
3
|
+
class BridgeSupport
|
4
|
+
extend Executable
|
5
|
+
executable :gen_bridge_metadata
|
6
|
+
|
7
|
+
attr_reader :headers
|
8
|
+
|
9
|
+
def initialize(headers)
|
10
|
+
@headers = headers
|
11
|
+
end
|
12
|
+
|
13
|
+
def search_paths
|
14
|
+
@headers.map { |header| "-I '#{header.dirname}'" }.uniq
|
15
|
+
end
|
16
|
+
|
17
|
+
def save_as(pathname)
|
18
|
+
gen_bridge_metadata %{-c "#{search_paths.join(' ')}" -o '#{pathname}' '#{headers.join("' '")}'}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Pod
|
2
|
+
module Generator
|
3
|
+
class CopyResourcesScript
|
4
|
+
CONTENT = <<EOS
|
5
|
+
#!/bin/sh
|
6
|
+
|
7
|
+
install_resource()
|
8
|
+
{
|
9
|
+
case $1 in
|
10
|
+
*\.storyboard)
|
11
|
+
echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\"$1\\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}"
|
12
|
+
ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\"$1\\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}"
|
13
|
+
;;
|
14
|
+
*\.xib)
|
15
|
+
echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\"$1\\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}"
|
16
|
+
ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \\"$1\\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}"
|
17
|
+
;;
|
18
|
+
*.framework)
|
19
|
+
echo "rsync -rp ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
|
20
|
+
rsync -rp "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
|
21
|
+
;;
|
22
|
+
*.xcdatamodeld)
|
23
|
+
echo "xcrun momc ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename $1 .xcdatamodeld`.momd"
|
24
|
+
xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename $1 .xcdatamodeld`.momd"
|
25
|
+
;;
|
26
|
+
*)
|
27
|
+
echo "rsync -av --exclude '*/.svn/*' ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
|
28
|
+
rsync -av --exclude '*/.svn/*' "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
|
29
|
+
;;
|
30
|
+
esac
|
31
|
+
}
|
32
|
+
EOS
|
33
|
+
|
34
|
+
attr_reader :resources
|
35
|
+
|
36
|
+
# A list of files relative to the project pods root.
|
37
|
+
def initialize(resources = [], reference_external_strings_file = false)
|
38
|
+
@resources = resources
|
39
|
+
@reference_external_strings_file = reference_external_strings_file
|
40
|
+
end
|
41
|
+
|
42
|
+
def save_as(pathname)
|
43
|
+
pathname.open('w') do |script|
|
44
|
+
script.puts @reference_external_strings_file ? CONTENT : CONTENT.gsub(' --reference-external-strings-file', '')
|
45
|
+
@resources.each do |resource|
|
46
|
+
script.puts "install_resource '#{resource}'"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
# @todo use File api
|
50
|
+
system("chmod +x '#{pathname}'")
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Pod
|
2
|
+
module Generator
|
3
|
+
class DummySource
|
4
|
+
attr_reader :class_name
|
5
|
+
|
6
|
+
def initialize(class_name_identifier)
|
7
|
+
validated_class_name_identifier = class_name_identifier.gsub(/[^0-9a-z_]/i, '_')
|
8
|
+
@class_name = "PodsDummy_#{validated_class_name_identifier}"
|
9
|
+
end
|
10
|
+
|
11
|
+
def save_as(pathname)
|
12
|
+
pathname.open('w') do |source|
|
13
|
+
source.puts "#import <Foundation/Foundation.h>"
|
14
|
+
source.puts "@interface #{class_name} : NSObject"
|
15
|
+
source.puts "@end"
|
16
|
+
source.puts "@implementation #{class_name}"
|
17
|
+
source.puts "@end"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
module Pod
|
2
|
+
module Generator
|
3
|
+
|
4
|
+
# Generates a prefix header file for a Pods library. The prefix header is
|
5
|
+
# generated according to the platform of the target and the pods.
|
6
|
+
#
|
7
|
+
# According to the platform the prefix header imports `UIKit/UIKit.h` or
|
8
|
+
# `Cocoa/Cocoa.h`.
|
9
|
+
#
|
10
|
+
class PrefixHeader
|
11
|
+
|
12
|
+
# @return [Platform] the platform for which the prefix header will be
|
13
|
+
# generated.
|
14
|
+
#
|
15
|
+
attr_reader :file_accessors
|
16
|
+
attr_reader :platform
|
17
|
+
|
18
|
+
# @return [Array<LocalPod>] the LocalPod for the target for which the
|
19
|
+
# prefix header needs to be generated.
|
20
|
+
#
|
21
|
+
# attr_reader :consumers
|
22
|
+
|
23
|
+
# @return [Array<String>] any header to import (with quotes).
|
24
|
+
#
|
25
|
+
attr_reader :imports
|
26
|
+
|
27
|
+
# @param [Platform] platform @see platform
|
28
|
+
# @param [Array<LocalPod>] consumers @see consumers
|
29
|
+
#
|
30
|
+
def initialize(file_accessors, platform)
|
31
|
+
@file_accessors = file_accessors
|
32
|
+
@platform = platform
|
33
|
+
@imports = []
|
34
|
+
end
|
35
|
+
|
36
|
+
# Generates the contents of the prefix header according to the platform
|
37
|
+
# and the pods.
|
38
|
+
#
|
39
|
+
# @note If the platform is iOS an import call to `UIKit/UIKit.h` is
|
40
|
+
# added to the top of the prefix header. For OS X `Cocoa/Cocoa.h`
|
41
|
+
# is imported.
|
42
|
+
#
|
43
|
+
# @return [String]
|
44
|
+
#
|
45
|
+
# @todo Subspecs can specify prefix header information too.
|
46
|
+
#
|
47
|
+
def generate
|
48
|
+
result = "#ifdef __OBJC__\n"
|
49
|
+
result << "#import #{platform == :ios ? '<UIKit/UIKit.h>' : '<Cocoa/Cocoa.h>'}\n"
|
50
|
+
result << "#endif\n"
|
51
|
+
|
52
|
+
imports.each do |import|
|
53
|
+
result << %|\n#import "#{import}"|
|
54
|
+
end
|
55
|
+
|
56
|
+
file_accessors.each do |file_accessor|
|
57
|
+
result << "\n"
|
58
|
+
if prefix_header_contents = file_accessor.spec_consumer.prefix_header_contents
|
59
|
+
result << prefix_header_contents
|
60
|
+
result << "\n"
|
61
|
+
end
|
62
|
+
if prefix_header = file_accessor.prefix_header
|
63
|
+
result << Pathname(prefix_header).read
|
64
|
+
end
|
65
|
+
end
|
66
|
+
result
|
67
|
+
end
|
68
|
+
|
69
|
+
# Generates and saves the prefix header to the given path.
|
70
|
+
#
|
71
|
+
# @param [Pathname] path
|
72
|
+
# the path where the prefix header should be stored.
|
73
|
+
#
|
74
|
+
# @return [void]
|
75
|
+
#
|
76
|
+
def save_as(path)
|
77
|
+
path.open('w') { |header| header.write(generate) }
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module Pod
|
2
|
+
module Generator
|
3
|
+
|
4
|
+
# Generates a header which allows to inspect at compile time the installed
|
5
|
+
# pods and the installed specifications of a pod.
|
6
|
+
#
|
7
|
+
# Example output:
|
8
|
+
#
|
9
|
+
# #define COCOAPODS_POD_AVAILABLE_ObjectiveSugar 1
|
10
|
+
# #define COCOAPODS_VERSION_MAJOR_ObjectiveSugar 0
|
11
|
+
# #define COCOAPODS_VERSION_MINOR_ObjectiveSugar 6
|
12
|
+
# #define COCOAPODS_VERSION_PATCH_ObjectiveSugar 2
|
13
|
+
#
|
14
|
+
# Example usage:
|
15
|
+
#
|
16
|
+
# #ifdef COCOAPODS
|
17
|
+
# #ifdef COCOAPODS_POD_AVAILABLE_ObjectiveSugar
|
18
|
+
# #import "ObjectiveSugar.h"
|
19
|
+
# #endif
|
20
|
+
# #else
|
21
|
+
# // Non CocoaPods code
|
22
|
+
# #endif
|
23
|
+
#
|
24
|
+
class TargetEnvironmentHeader
|
25
|
+
|
26
|
+
# @return [Array<LocalPod>] the specifications installed for the target.
|
27
|
+
#
|
28
|
+
attr_reader :specs
|
29
|
+
|
30
|
+
# @param [Array<LocalPod>] pods @see pods
|
31
|
+
#
|
32
|
+
def initialize(specs)
|
33
|
+
@specs = specs
|
34
|
+
end
|
35
|
+
|
36
|
+
# Generates and saves the file.
|
37
|
+
#
|
38
|
+
# @param [Pathname] pathname
|
39
|
+
# The path where to save the generated file.
|
40
|
+
#
|
41
|
+
# @return [void]
|
42
|
+
#
|
43
|
+
def save_as(pathname)
|
44
|
+
pathname.open('w') do |source|
|
45
|
+
source.puts
|
46
|
+
source.puts "// To check if a library is compiled with CocoaPods you"
|
47
|
+
source.puts "// can use the `COCOAPODS` macro definition which is"
|
48
|
+
source.puts "// defined in the xcconfigs so it is available in"
|
49
|
+
source.puts "// headers also when they are imported in the client"
|
50
|
+
source.puts "// project."
|
51
|
+
source.puts
|
52
|
+
source.puts
|
53
|
+
specs.each do |spec|
|
54
|
+
spec_name = safe_spec_name(spec.name)
|
55
|
+
source.puts "// #{spec.name}"
|
56
|
+
source.puts "#define COCOAPODS_POD_AVAILABLE_#{spec_name}"
|
57
|
+
if spec.version.semantic?
|
58
|
+
source.puts "#define COCOAPODS_VERSION_MAJOR_#{spec_name} #{spec.version.major}"
|
59
|
+
source.puts "#define COCOAPODS_VERSION_MINOR_#{spec_name} #{spec.version.minor}"
|
60
|
+
source.puts "#define COCOAPODS_VERSION_PATCH_#{spec_name} #{spec.version.patch}"
|
61
|
+
else
|
62
|
+
source.puts "// This library does not follow semantic-versioning,"
|
63
|
+
source.puts "// so we were not able to define version macros."
|
64
|
+
source.puts "// Please contact the author."
|
65
|
+
source.puts "// Version: #{spec.version}."
|
66
|
+
end
|
67
|
+
source.puts
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
#-----------------------------------------------------------------------#
|
73
|
+
|
74
|
+
private
|
75
|
+
|
76
|
+
# !@group Private Helpers
|
77
|
+
|
78
|
+
def safe_spec_name(spec_name)
|
79
|
+
spec_name.gsub(/[^\w]/,'_')
|
80
|
+
end
|
81
|
+
|
82
|
+
#-----------------------------------------------------------------------#
|
83
|
+
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|