cocoapods 0.0.1
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.
- data/LICENSE +19 -0
- data/README.md +184 -0
- data/bin/pod +9 -0
- data/lib/cocoapods.rb +32 -0
- data/lib/cocoapods/command.rb +88 -0
- data/lib/cocoapods/command/install.rb +48 -0
- data/lib/cocoapods/command/repo.rb +60 -0
- data/lib/cocoapods/command/setup.rb +32 -0
- data/lib/cocoapods/command/spec.rb +28 -0
- data/lib/cocoapods/config.rb +49 -0
- data/lib/cocoapods/dependency.rb +39 -0
- data/lib/cocoapods/downloader.rb +55 -0
- data/lib/cocoapods/executable.rb +13 -0
- data/lib/cocoapods/installer.rb +62 -0
- data/lib/cocoapods/resolver.rb +24 -0
- data/lib/cocoapods/source.rb +31 -0
- data/lib/cocoapods/specification.rb +203 -0
- data/lib/cocoapods/specification/set.rb +82 -0
- data/lib/cocoapods/version.rb +9 -0
- data/lib/cocoapods/xcode/config.rb +33 -0
- data/lib/cocoapods/xcode/project.rb +132 -0
- data/xcode-project-templates/cocoa-touch-static-library/Pods-Prefix.pch +7 -0
- data/xcode-project-templates/cocoa-touch-static-library/Pods.xcconfig +1 -0
- data/xcode-project-templates/cocoa-touch-static-library/Pods.xcodeproj/project.pbxproj +232 -0
- metadata +90 -0
data/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Copyright (c) 2011 Eloy Durán <eloy.de.enige@gmail.com>
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
5
|
+
in the Software without restriction, including without limitation the rights
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
11
|
+
all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,184 @@
|
|
1
|
+
CocoaPods
|
2
|
+
---------
|
3
|
+
|
4
|
+
CocoaPods is an Objective-C library package manager. It tries to take away all
|
5
|
+
hard work of maintaining your dependencies, but in a lean and flexible way.
|
6
|
+
|
7
|
+
Its goal is to create a more centralized overview of open-source libraries and
|
8
|
+
unify the way in which we deal with them.
|
9
|
+
|
10
|
+
CocoaPods will:
|
11
|
+
|
12
|
+
* Calculate the right set of versions of all of your project’s dependencies.
|
13
|
+
* Install dependencies.
|
14
|
+
* Set them up to be build as part of a ‘dependency’ static library, which your
|
15
|
+
project links against.
|
16
|
+
|
17
|
+
|
18
|
+
Installing CocoaPods
|
19
|
+
====================
|
20
|
+
|
21
|
+
You’ll need MacRuby. CocoaPods itself installs through RubyGems, the Ruby
|
22
|
+
package manager:
|
23
|
+
|
24
|
+
$ brew install macruby [TODO There's actually no MacRuby homebrew formula]
|
25
|
+
$ macgem install cocoa-pods
|
26
|
+
$ pod setup
|
27
|
+
|
28
|
+
|
29
|
+
Making a Pod
|
30
|
+
============
|
31
|
+
|
32
|
+
A manifest that describes the library and its dependencies is called a Pod.
|
33
|
+
Consider you want to create a new library that retrieves the latest price of
|
34
|
+
your favorite ice cream called IcePop.
|
35
|
+
|
36
|
+
$ pod spec create IcePop
|
37
|
+
$ cd IcePop
|
38
|
+
$ tree .
|
39
|
+
- IcePop
|
40
|
+
|- IcePop.podspec
|
41
|
+
|- LICENSE
|
42
|
+
|- README
|
43
|
+
|\ Source
|
44
|
+
| | - IcePop.h
|
45
|
+
| | - IcePop.m
|
46
|
+
|- Test
|
47
|
+
|
48
|
+
You can also initialize a Pod for an existing library, which will only create a
|
49
|
+
`.podspec` file.
|
50
|
+
|
51
|
+
$ cd IcePop
|
52
|
+
$ pod spec init IcePop
|
53
|
+
|
54
|
+
|
55
|
+
Anatomy of a PodSpec manifest
|
56
|
+
=============================
|
57
|
+
|
58
|
+
class IcePop < Pod::Spec
|
59
|
+
version '1.0.0' # 1
|
60
|
+
summary 'A library that retrieves the current price of your favorite ice cream.' # 2
|
61
|
+
author 'Eloy Durán' => 'eloy.de.enige@gmail.com' # 3
|
62
|
+
source :git => 'https://github.com/alloy/ice-pop.git' # 4
|
63
|
+
dependency 'AsyncSocket', '~> 0.6' # 5
|
64
|
+
end
|
65
|
+
|
66
|
+
1. The version of this pod.
|
67
|
+
2. A short summary of this pod’s description.
|
68
|
+
3. The author of this pod and his/her email address.
|
69
|
+
4. Where to retrieve this pod’s source.
|
70
|
+
5. Defines a dependency of the library itself, with a version requirement
|
71
|
+
of 0.6 trough 0.9.
|
72
|
+
|
73
|
+
See the [example PodSpec file][example] for a full list of the available
|
74
|
+
attributes and more detailed information.
|
75
|
+
|
76
|
+
|
77
|
+
Sharing a Pod
|
78
|
+
=============
|
79
|
+
|
80
|
+
CocoaPod uses git repositories with `.podspec` files as its database. In order
|
81
|
+
to share your pod, its `.podspec` file will have to be added to such a repo.
|
82
|
+
|
83
|
+
$ pod repo add my-spec-repo http://github.com/alloy/spec-repo.git
|
84
|
+
$ pod push my-spec-repo
|
85
|
+
|
86
|
+
This will:
|
87
|
+
|
88
|
+
1. Validate the `.podspec` file.
|
89
|
+
1. Update the clone of the local spec-repo called `my-spec-repo`.
|
90
|
+
2. Add the `.podspec` file to the spec-repo, namespaced by name and version.
|
91
|
+
3. Push the changes from the local spec-repo to its remote.
|
92
|
+
|
93
|
+
|
94
|
+
Share with everyone
|
95
|
+
===================
|
96
|
+
|
97
|
+
CocoaPods, itself, has a [spec-repo][master], called the `master` spec-repo.
|
98
|
+
This repo is meant as a central public place for any open-source pod. All
|
99
|
+
installations of CocoaPods will have a local clone of this repo.
|
100
|
+
|
101
|
+
However, normally you will have read-only access only. Thus to get a PodSpec
|
102
|
+
into the `master` spec-repo you will have to push to your own fork and send
|
103
|
+
a pull request.
|
104
|
+
|
105
|
+
Once your first PodSpec has been merged, you will be given push access to the
|
106
|
+
`master` spec-repo and are allowed to update and add `.podspec` files at your
|
107
|
+
own leisure.
|
108
|
+
|
109
|
+
Once you receive push acces, you will have to change your `master` spec-repo’s
|
110
|
+
remote URL with:
|
111
|
+
|
112
|
+
$ pod repo change master git@github.com:alloy/cocoa-pod-specs.git
|
113
|
+
|
114
|
+
|
115
|
+
Commands overview
|
116
|
+
=================
|
117
|
+
|
118
|
+
### Setup
|
119
|
+
|
120
|
+
$ pod help setup
|
121
|
+
|
122
|
+
pod setup
|
123
|
+
Creates a directory at `~/.cocoa-pods' which will hold your spec-repos.
|
124
|
+
This is where it will create a clone of the public `master' spec-repo.
|
125
|
+
|
126
|
+
### Managing PodSpec files
|
127
|
+
|
128
|
+
$ pod help spec
|
129
|
+
|
130
|
+
pod spec create NAME
|
131
|
+
Creates a directory for your new pod, named `NAME', with a default
|
132
|
+
directory structure and accompanying `NAME.podspec'.
|
133
|
+
|
134
|
+
pod spec init NAME
|
135
|
+
Creates a PodSpec, in the current working dir, called `NAME.podspec'.
|
136
|
+
Use this for existing libraries.
|
137
|
+
|
138
|
+
pod spec lint NAME
|
139
|
+
Validates `NAME.podspec' from a local spec-repo. In case `NAME' is
|
140
|
+
omitted, it defaults to the PodSpec in the current working dir.
|
141
|
+
|
142
|
+
pod spec push REMOTE
|
143
|
+
Validates `NAME.podspec' in the current working dir, copies it to the
|
144
|
+
local clone of the `REMOTE' spec-repo, and pushes it to the `REMOTE'
|
145
|
+
spec-repo. In case `REMOTE' is omitted, it defaults to `master'.
|
146
|
+
|
147
|
+
### Managing spec-repos
|
148
|
+
|
149
|
+
$ pod help repo
|
150
|
+
|
151
|
+
pod repo add NAME URL
|
152
|
+
Clones `URL' in the local spec-repos directory at `~/.cocoa-pods'. The
|
153
|
+
remote can later be referred to by `NAME'.
|
154
|
+
|
155
|
+
pod repo update NAME
|
156
|
+
Updates the local clone of the spec-repo `NAME'.
|
157
|
+
|
158
|
+
pod repo change NAME URL
|
159
|
+
Changes the git remote of local spec-repo `NAME' to `URL'.
|
160
|
+
|
161
|
+
pod repo cd NAME
|
162
|
+
Changes the current working dir to the local spec-repo `NAME'.
|
163
|
+
|
164
|
+
|
165
|
+
Contact
|
166
|
+
=======
|
167
|
+
|
168
|
+
Eloy Durán:
|
169
|
+
|
170
|
+
* http://github.com/alloy
|
171
|
+
* http://twitter.com/alloy
|
172
|
+
* eloy.de.enige@gmail.com
|
173
|
+
|
174
|
+
|
175
|
+
LICENSE
|
176
|
+
=======
|
177
|
+
|
178
|
+
These works are available under the MIT license. See the [LICENSE][license] file
|
179
|
+
for more info.
|
180
|
+
|
181
|
+
|
182
|
+
[license]: cocoa-pods/blob/master/LICENSE
|
183
|
+
[example]: cocoa-pods/blob/master/examples/PodSpec.podspec
|
184
|
+
[master]: http://github.com/alloy/cocoa-pod-specs
|
data/bin/pod
ADDED
data/lib/cocoapods.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
module Pod
|
2
|
+
VERSION = '0.0.1'
|
3
|
+
|
4
|
+
class Informative < StandardError
|
5
|
+
end
|
6
|
+
|
7
|
+
autoload :Command, 'cocoapods/command'
|
8
|
+
autoload :Config, 'cocoapods/config'
|
9
|
+
autoload :Dependency, 'cocoapods/dependency'
|
10
|
+
autoload :Downloader, 'cocoapods/downloader'
|
11
|
+
autoload :Executable, 'cocoapods/executable'
|
12
|
+
autoload :Installer, 'cocoapods/installer'
|
13
|
+
autoload :Resolver, 'cocoapods/resolver'
|
14
|
+
autoload :Source, 'cocoapods/source'
|
15
|
+
autoload :Spec, 'cocoapods/specification'
|
16
|
+
autoload :Specification, 'cocoapods/specification'
|
17
|
+
autoload :Version, 'cocoapods/version'
|
18
|
+
|
19
|
+
module Xcode
|
20
|
+
autoload :Config, 'cocoapods/xcode/config'
|
21
|
+
autoload :Project, 'cocoapods/xcode/project'
|
22
|
+
end
|
23
|
+
|
24
|
+
autoload :Pathname, 'pathname'
|
25
|
+
end
|
26
|
+
|
27
|
+
class Pathname
|
28
|
+
def glob(pattern = '')
|
29
|
+
Dir.glob((self + pattern).to_s).map { |f| Pathname.new(f) }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
@@ -0,0 +1,88 @@
|
|
1
|
+
module Pod
|
2
|
+
class Command
|
3
|
+
autoload :Install, 'cocoapods/command/install'
|
4
|
+
autoload :Repo, 'cocoapods/command/repo'
|
5
|
+
autoload :Setup, 'cocoapods/command/setup'
|
6
|
+
autoload :Spec, 'cocoapods/command/spec'
|
7
|
+
|
8
|
+
class Help < Informative
|
9
|
+
def initialize(command_class, argv)
|
10
|
+
@command_class, @argv = command_class, argv
|
11
|
+
end
|
12
|
+
|
13
|
+
def message
|
14
|
+
[
|
15
|
+
@command_class.banner,
|
16
|
+
'',
|
17
|
+
'Options',
|
18
|
+
'-------',
|
19
|
+
'',
|
20
|
+
@command_class.options
|
21
|
+
].join("\n")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class ARGV < Array
|
26
|
+
def options; select { |x| x.to_s[0,1] == '-' }; end
|
27
|
+
def arguments; self - options; end
|
28
|
+
def option(name); !!delete(name); end
|
29
|
+
def shift_argument; (arg = arguments[0]) && delete(arg); end
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.banner
|
33
|
+
"To see help for the available commands run:\n" \
|
34
|
+
"\n" \
|
35
|
+
" * $ pod setup --help\n" \
|
36
|
+
" * $ pod install --help\n" \
|
37
|
+
" * $ pod repo --help"
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.options
|
41
|
+
" --help Show help information\n" \
|
42
|
+
" --silent Print nothing\n" \
|
43
|
+
" --verbose Print more information while working\n" \
|
44
|
+
" --version Prints the version of CocoaPods"
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.run(*argv)
|
48
|
+
parse(*argv).run
|
49
|
+
rescue Exception => e
|
50
|
+
unless e.is_a?(Informative)
|
51
|
+
puts "Oh no, an error occurred. Please run with `--verbose' and report " \
|
52
|
+
"on https://github.com/alloy/cocoapods/issues."
|
53
|
+
puts ""
|
54
|
+
end
|
55
|
+
puts e.message
|
56
|
+
puts *e.backtrace if Config.instance.verbose
|
57
|
+
exit 1
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.parse(*argv)
|
61
|
+
argv = ARGV.new(argv)
|
62
|
+
raise Informative, VERSION if argv.option('--version')
|
63
|
+
|
64
|
+
show_help = argv.option('--help')
|
65
|
+
Config.instance.silent = argv.option('--silent')
|
66
|
+
Config.instance.verbose = argv.option('--verbose')
|
67
|
+
|
68
|
+
command_class = case argv.shift_argument
|
69
|
+
when 'install' then Install
|
70
|
+
when 'repo' then Repo
|
71
|
+
when 'setup' then Setup
|
72
|
+
when 'spec' then Spec
|
73
|
+
end
|
74
|
+
|
75
|
+
if show_help || command_class.nil?
|
76
|
+
raise Help.new(command_class || self, argv)
|
77
|
+
else
|
78
|
+
command_class.new(argv)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
include Config::Mixin
|
83
|
+
|
84
|
+
def initialize(argv)
|
85
|
+
raise Help.new(self.class, argv)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Pod
|
2
|
+
class Command
|
3
|
+
class Install < Command
|
4
|
+
def self.banner
|
5
|
+
%{Installing dependencies of a pod spec:
|
6
|
+
|
7
|
+
$ pod install [NAME]
|
8
|
+
|
9
|
+
Downloads all dependencies of the specified podspec file `NAME' and
|
10
|
+
creates an Xcode Pods library project in `./Pods'. In case `NAME' is
|
11
|
+
omitted it defaults to either `Podfile' or `*.podspec' in the current
|
12
|
+
working directory.
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.options
|
17
|
+
" --no-clean Leave SCM dirs like `.git' and `.svn' in tact after downloading\n" +
|
18
|
+
super
|
19
|
+
end
|
20
|
+
|
21
|
+
def initialize(argv)
|
22
|
+
config.clean = !argv.option('--no-clean')
|
23
|
+
if podspec = argv.shift_argument
|
24
|
+
@podspec = Pathname.new(podspec)
|
25
|
+
end
|
26
|
+
super unless argv.empty?
|
27
|
+
end
|
28
|
+
|
29
|
+
def run
|
30
|
+
spec = nil
|
31
|
+
if @podspec
|
32
|
+
if @podspec.exist?
|
33
|
+
spec = Specification.from_podspec(@podspec)
|
34
|
+
else
|
35
|
+
raise Help, "The specified podspec `#{@podspec}' doesn't exist."
|
36
|
+
end
|
37
|
+
else
|
38
|
+
if config.project_podfile.exist?
|
39
|
+
spec = Specification.from_podfile(config.project_podfile)
|
40
|
+
else
|
41
|
+
raise Help, "No Podfile found in current working directory."
|
42
|
+
end
|
43
|
+
end
|
44
|
+
Installer.new(spec).install!
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
module Pod
|
4
|
+
class Command
|
5
|
+
class Repo < Command
|
6
|
+
def self.banner
|
7
|
+
%{Managing spec-repos:
|
8
|
+
|
9
|
+
$ pod help repo
|
10
|
+
|
11
|
+
pod repo add NAME URL
|
12
|
+
Clones `URL' in the local spec-repos directory at `~/.cocoapods'. The
|
13
|
+
remote can later be referred to by `NAME'.
|
14
|
+
|
15
|
+
pod repo update NAME
|
16
|
+
Updates the local clone of the spec-repo `NAME'. If `NAME' is omitted
|
17
|
+
this will update all spec-repos in `~/.cocoapods'.}
|
18
|
+
end
|
19
|
+
|
20
|
+
extend Executable
|
21
|
+
executable :git
|
22
|
+
|
23
|
+
def initialize(argv)
|
24
|
+
case @action = argv.arguments[0]
|
25
|
+
when 'add'
|
26
|
+
unless (@name = argv[1]) && (@url = argv[2])
|
27
|
+
raise Help, "Adding a repo needs a `name' and a `url'."
|
28
|
+
end
|
29
|
+
when 'update'
|
30
|
+
@name = argv[1]
|
31
|
+
else
|
32
|
+
super
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def dir
|
37
|
+
config.repos_dir + @name
|
38
|
+
end
|
39
|
+
|
40
|
+
def run
|
41
|
+
send @action
|
42
|
+
end
|
43
|
+
|
44
|
+
def add
|
45
|
+
puts "==> Cloning spec repo `#{@name}' from `#{@url}'" unless config.silent?
|
46
|
+
config.repos_dir.mkpath
|
47
|
+
Dir.chdir(config.repos_dir) { git("clone #{@url} #{@name}") }
|
48
|
+
end
|
49
|
+
|
50
|
+
def update
|
51
|
+
dirs = @name ? [dir] : config.repos_dir.children
|
52
|
+
dirs.each do |dir|
|
53
|
+
puts "==> Updating spec repo `#{dir.basename}'" unless config.silent?
|
54
|
+
Dir.chdir(dir) { git("pull") }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|