xcocoapods 1.5.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 +6303 -0
- data/LICENSE +28 -0
- data/README.md +80 -0
- data/bin/pod +56 -0
- data/bin/sandbox-pod +168 -0
- data/lib/cocoapods.rb +73 -0
- data/lib/cocoapods/command.rb +175 -0
- data/lib/cocoapods/command/cache.rb +28 -0
- data/lib/cocoapods/command/cache/clean.rb +90 -0
- data/lib/cocoapods/command/cache/list.rb +69 -0
- data/lib/cocoapods/command/env.rb +66 -0
- data/lib/cocoapods/command/init.rb +128 -0
- data/lib/cocoapods/command/install.rb +45 -0
- data/lib/cocoapods/command/ipc.rb +19 -0
- data/lib/cocoapods/command/ipc/list.rb +40 -0
- data/lib/cocoapods/command/ipc/podfile.rb +31 -0
- data/lib/cocoapods/command/ipc/podfile_json.rb +30 -0
- data/lib/cocoapods/command/ipc/repl.rb +51 -0
- data/lib/cocoapods/command/ipc/spec.rb +29 -0
- data/lib/cocoapods/command/ipc/update_search_index.rb +24 -0
- data/lib/cocoapods/command/lib.rb +11 -0
- data/lib/cocoapods/command/lib/create.rb +105 -0
- data/lib/cocoapods/command/lib/lint.rb +121 -0
- data/lib/cocoapods/command/list.rb +39 -0
- data/lib/cocoapods/command/options/project_directory.rb +36 -0
- data/lib/cocoapods/command/options/repo_update.rb +34 -0
- data/lib/cocoapods/command/outdated.rb +140 -0
- data/lib/cocoapods/command/repo.rb +29 -0
- data/lib/cocoapods/command/repo/add.rb +103 -0
- data/lib/cocoapods/command/repo/lint.rb +82 -0
- data/lib/cocoapods/command/repo/list.rb +93 -0
- data/lib/cocoapods/command/repo/push.rb +281 -0
- data/lib/cocoapods/command/repo/remove.rb +36 -0
- data/lib/cocoapods/command/repo/update.rb +28 -0
- data/lib/cocoapods/command/setup.rb +103 -0
- data/lib/cocoapods/command/spec.rb +112 -0
- data/lib/cocoapods/command/spec/cat.rb +51 -0
- data/lib/cocoapods/command/spec/create.rb +283 -0
- data/lib/cocoapods/command/spec/edit.rb +87 -0
- data/lib/cocoapods/command/spec/env_spec.rb +53 -0
- data/lib/cocoapods/command/spec/lint.rb +137 -0
- data/lib/cocoapods/command/spec/which.rb +43 -0
- data/lib/cocoapods/command/update.rb +101 -0
- data/lib/cocoapods/config.rb +347 -0
- data/lib/cocoapods/core_overrides.rb +1 -0
- data/lib/cocoapods/downloader.rb +190 -0
- data/lib/cocoapods/downloader/cache.rb +233 -0
- data/lib/cocoapods/downloader/request.rb +86 -0
- data/lib/cocoapods/downloader/response.rb +16 -0
- data/lib/cocoapods/executable.rb +222 -0
- data/lib/cocoapods/external_sources.rb +57 -0
- data/lib/cocoapods/external_sources/abstract_external_source.rb +205 -0
- data/lib/cocoapods/external_sources/downloader_source.rb +30 -0
- data/lib/cocoapods/external_sources/path_source.rb +55 -0
- data/lib/cocoapods/external_sources/podspec_source.rb +54 -0
- data/lib/cocoapods/gem_version.rb +5 -0
- data/lib/cocoapods/generator/acknowledgements.rb +107 -0
- data/lib/cocoapods/generator/acknowledgements/markdown.rb +44 -0
- data/lib/cocoapods/generator/acknowledgements/plist.rb +94 -0
- data/lib/cocoapods/generator/app_target_helper.rb +244 -0
- data/lib/cocoapods/generator/bridge_support.rb +22 -0
- data/lib/cocoapods/generator/constant.rb +19 -0
- data/lib/cocoapods/generator/copy_resources_script.rb +230 -0
- data/lib/cocoapods/generator/dummy_source.rb +31 -0
- data/lib/cocoapods/generator/embed_frameworks_script.rb +215 -0
- data/lib/cocoapods/generator/header.rb +103 -0
- data/lib/cocoapods/generator/info_plist_file.rb +116 -0
- data/lib/cocoapods/generator/module_map.rb +99 -0
- data/lib/cocoapods/generator/prefix_header.rb +60 -0
- data/lib/cocoapods/generator/umbrella_header.rb +46 -0
- data/lib/cocoapods/hooks_manager.rb +132 -0
- data/lib/cocoapods/installer.rb +703 -0
- data/lib/cocoapods/installer/analyzer.rb +972 -0
- data/lib/cocoapods/installer/analyzer/analysis_result.rb +87 -0
- data/lib/cocoapods/installer/analyzer/locking_dependency_analyzer.rb +98 -0
- data/lib/cocoapods/installer/analyzer/pod_variant.rb +67 -0
- data/lib/cocoapods/installer/analyzer/pod_variant_set.rb +157 -0
- data/lib/cocoapods/installer/analyzer/podfile_dependency_cache.rb +54 -0
- data/lib/cocoapods/installer/analyzer/sandbox_analyzer.rb +240 -0
- data/lib/cocoapods/installer/analyzer/specs_state.rb +84 -0
- data/lib/cocoapods/installer/analyzer/target_inspection_result.rb +53 -0
- data/lib/cocoapods/installer/analyzer/target_inspector.rb +260 -0
- data/lib/cocoapods/installer/installation_options.rb +158 -0
- data/lib/cocoapods/installer/pod_source_installer.rb +202 -0
- data/lib/cocoapods/installer/pod_source_preparer.rb +77 -0
- data/lib/cocoapods/installer/podfile_validator.rb +139 -0
- data/lib/cocoapods/installer/post_install_hooks_context.rb +132 -0
- data/lib/cocoapods/installer/pre_install_hooks_context.rb +51 -0
- data/lib/cocoapods/installer/source_provider_hooks_context.rb +34 -0
- data/lib/cocoapods/installer/user_project_integrator.rb +250 -0
- data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +463 -0
- data/lib/cocoapods/installer/user_project_integrator/target_integrator/xcconfig_integrator.rb +146 -0
- data/lib/cocoapods/installer/xcode.rb +8 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator.rb +416 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/aggregate_target_installer.rb +181 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/app_host_installer.rb +84 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/file_references_installer.rb +334 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb +777 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_integrator.rb +116 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installation_result.rb +86 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer.rb +256 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer_helper.rb +68 -0
- data/lib/cocoapods/installer/xcode/target_validator.rb +147 -0
- data/lib/cocoapods/open-uri.rb +33 -0
- data/lib/cocoapods/project.rb +414 -0
- data/lib/cocoapods/resolver.rb +585 -0
- data/lib/cocoapods/resolver/lazy_specification.rb +79 -0
- data/lib/cocoapods/sandbox.rb +404 -0
- data/lib/cocoapods/sandbox/file_accessor.rb +444 -0
- data/lib/cocoapods/sandbox/headers_store.rb +146 -0
- data/lib/cocoapods/sandbox/path_list.rb +220 -0
- data/lib/cocoapods/sandbox/pod_dir_cleaner.rb +85 -0
- data/lib/cocoapods/sandbox/podspec_finder.rb +23 -0
- data/lib/cocoapods/sources_manager.rb +157 -0
- data/lib/cocoapods/target.rb +261 -0
- data/lib/cocoapods/target/aggregate_target.rb +338 -0
- data/lib/cocoapods/target/build_settings.rb +1075 -0
- data/lib/cocoapods/target/pod_target.rb +559 -0
- data/lib/cocoapods/user_interface.rb +459 -0
- data/lib/cocoapods/user_interface/error_report.rb +187 -0
- data/lib/cocoapods/user_interface/inspector_reporter.rb +109 -0
- data/lib/cocoapods/validator.rb +981 -0
- metadata +533 -0
data/LICENSE
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
This project is licensed under the MIT license.
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2011 - 2017 Eloy Durán <eloy.de.enige@gmail.com>,
|
|
4
|
+
Fabio Pelosin <fabiopelosin@gmail.com>,
|
|
5
|
+
Samuel Giddins <segiddins@segiddins.me>,
|
|
6
|
+
Marius Rackwitz <git@mariusrackwitz.de>,
|
|
7
|
+
Kyle Fuller <kyle@fuller.li>,
|
|
8
|
+
Boris Bügling <boris@buegling.com>,
|
|
9
|
+
Orta Therox <orta.therox@gmail.com>, and
|
|
10
|
+
Olivier Halligon <olivier@halligon.net>.
|
|
11
|
+
|
|
12
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
13
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
14
|
+
in the Software without restriction, including without limitation the rights
|
|
15
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
16
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
17
|
+
furnished to do so, subject to the following conditions:
|
|
18
|
+
|
|
19
|
+
The above copyright notice and this permission notice shall be included in
|
|
20
|
+
all copies or substantial portions of the Software.
|
|
21
|
+
|
|
22
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
23
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
24
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
25
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
26
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
27
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
28
|
+
THE SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+

|
|
2
|
+
|
|
3
|
+
### CocoaPods: The Cocoa dependency manager
|
|
4
|
+
|
|
5
|
+
[](https://travis-ci.org/CocoaPods/CocoaPods)
|
|
6
|
+
[](http://badge.fury.io/rb/cocoapods)
|
|
7
|
+
[](https://codeclimate.com/github/CocoaPods/CocoaPods)
|
|
8
|
+
|
|
9
|
+
CocoaPods manages dependencies for your Xcode projects.
|
|
10
|
+
|
|
11
|
+
You specify the dependencies for your project in a simple text file: your `Podfile`.
|
|
12
|
+
CocoaPods recursively resolves dependencies between libraries, fetches
|
|
13
|
+
source code for all dependencies, and creates and maintains an Xcode
|
|
14
|
+
workspace to build your project.
|
|
15
|
+
|
|
16
|
+
Installing and updating CocoaPods is very easy. Don't miss the [Installation
|
|
17
|
+
guide](http://guides.cocoapods.org/using/getting-started.html#installation) and the
|
|
18
|
+
[Getting Started guide](https://guides.cocoapods.org/using/getting-started.html).
|
|
19
|
+
|
|
20
|
+
## Project Goals
|
|
21
|
+
|
|
22
|
+
CocoaPods aims to improve the engagement with, and discoverability
|
|
23
|
+
of, third party open-source Cocoa libraries. These
|
|
24
|
+
project goals influence and drive the design of CocoaPods:
|
|
25
|
+
|
|
26
|
+
- Create and share libraries, and use them in your own projects,
|
|
27
|
+
without creating extra work for library authors. Integrate
|
|
28
|
+
non-CocoaPods libraries and hack on your own fork of any
|
|
29
|
+
CocoaPods library with a simple transparent `Podspec` standard.
|
|
30
|
+
- Allow library authors to structure their libraries however they like.
|
|
31
|
+
- Save time for library authors by automating a lot of Xcode work not
|
|
32
|
+
related to their libraries' functionality.
|
|
33
|
+
- Support any source management system. (Currently supported are `git`,
|
|
34
|
+
`svn`, `mercurial`, `bazaar`, and various types of archives downloaded over HTTP.)
|
|
35
|
+
- Promote a culture of distributed collaboration on pods, but also provide
|
|
36
|
+
features only possible with a centralised solution to foster a community.
|
|
37
|
+
- Build tools on top of the core Cocoa development system, including those
|
|
38
|
+
typically deployed to other operating systems, such as web-services.
|
|
39
|
+
- Provide opinionated and automated integration, but make it completely
|
|
40
|
+
optional. You may manually integrate your CocoaPods dependencies
|
|
41
|
+
into your Xcode project as you see fit, with or without a workspace.
|
|
42
|
+
- Solve everyday problems for Cocoa and Xcode developers.
|
|
43
|
+
|
|
44
|
+
## Sponsors
|
|
45
|
+
|
|
46
|
+
Lovingly sponsored by a collection of companies, see the footer of [CocoaPods.org](https://cocoapods.org) for an up-to-date list.
|
|
47
|
+
|
|
48
|
+
## Collaborate
|
|
49
|
+
|
|
50
|
+
All CocoaPods development happens on GitHub. Contributions make for good karma and
|
|
51
|
+
we [welcome new](https://blog.cocoapods.org/starting-open-source/) contributors with joy. We take contributors seriously, and thus have a
|
|
52
|
+
contributor [code of conduct](CODE_OF_CONDUCT.md).
|
|
53
|
+
|
|
54
|
+
## Links
|
|
55
|
+
|
|
56
|
+
| Link | Description |
|
|
57
|
+
| :----- | :------ |
|
|
58
|
+
[CocoaPods.org](https://cocoapods.org/) | Homepage and search for Pods.
|
|
59
|
+
[@CocoaPods](https://twitter.com/CocoaPods) | Follow CocoaPods on Twitter to stay up to date.
|
|
60
|
+
[Blog](https://blog.cocoapods.org) | The CocoaPods blog.
|
|
61
|
+
[Mailing List](http://groups.google.com/group/cocoapods) | Feel free to ask any kind of question.
|
|
62
|
+
[Guides](https://guides.cocoapods.org) | Everything you want to know about CocoaPods.
|
|
63
|
+
[Changelog](https://github.com/CocoaPods/CocoaPods/blob/master/CHANGELOG.md) | See the changes introduced in each CocoaPods version.
|
|
64
|
+
[New Pods RSS](https://feeds.cocoapods.org/new-pods.rss) | Don't miss any new Pods.
|
|
65
|
+
[Code of Conduct](CODE_OF_CONDUCT.md) | Find out the standards we hold ourselves to.
|
|
66
|
+
|
|
67
|
+
## Projects
|
|
68
|
+
|
|
69
|
+
CocoaPods is composed of the following projects:
|
|
70
|
+
|
|
71
|
+
| Status | Project | Description | Info |
|
|
72
|
+
| :----- | :------ | :--- | :--- |
|
|
73
|
+
| [](http://travis-ci.org/CocoaPods/CocoaPods) | [CocoaPods](https://github.com/CocoaPods/CocoaPods) | The CocoaPods command line tool. | [guides](https://guides.cocoapods.org)
|
|
74
|
+
| [](http://travis-ci.org/CocoaPods/Core) | [CocoaPods Core](https://github.com/CocoaPods/Core) | Support for working with specifications and podfiles. | [docs](https://guides.cocoapods.org/contributing/components.html)
|
|
75
|
+
| [](http://travis-ci.org/CocoaPods/cocoapods-downloader) |[CocoaPods Downloader](https://github.com/CocoaPods/cocoapods-downloader) | Downloaders for various source types. | [docs](http://docs.cocoapods.org/cocoapods_downloader/index.html)
|
|
76
|
+
| [](https://travis-ci.org/CocoaPods/Xcodeproj) | [Xcodeproj](https://github.com/CocoaPods/Xcodeproj) | Create and modify Xcode projects from Ruby. | [docs](http://docs.cocoapods.org/xcodeproj/index.html)
|
|
77
|
+
| [](https://travis-ci.org/CocoaPods/CLAide) | [CLAide](https://github.com/CocoaPods/CLAide) | A small command-line interface framework. | [docs](http://docs.cocoapods.org/claide/index.html)
|
|
78
|
+
| [](https://travis-ci.org/CocoaPods/Molinillo) | [Molinillo](https://github.com/CocoaPods/Molinillo) | A powerful generic dependency resolver. | [docs](http://www.rubydoc.info/gems/molinillo)
|
|
79
|
+
| [](https://travis-ci.org/CocoaPods/CocoaPods-app) | [CocoaPods.app](https://github.com/CocoaPods/CocoaPods-app) | A full-featured and standalone installation of CocoaPods. | [info](https://cocoapods.org/app)
|
|
80
|
+
| | [Master Repo ](https://github.com/CocoaPods/Specs) | Master repository of specifications. | [guides](http://docs.cocoapods.org/guides/contributing_to_the_master_repo.html)
|
data/bin/pod
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
if Encoding.default_external != Encoding::UTF_8
|
|
4
|
+
|
|
5
|
+
if ARGV.include? '--no-ansi'
|
|
6
|
+
STDERR.puts <<-DOC
|
|
7
|
+
WARNING: CocoaPods requires your terminal to be using UTF-8 encoding.
|
|
8
|
+
Consider adding the following to ~/.profile:
|
|
9
|
+
|
|
10
|
+
export LANG=en_US.UTF-8
|
|
11
|
+
DOC
|
|
12
|
+
else
|
|
13
|
+
STDERR.puts <<-DOC
|
|
14
|
+
\e[33mWARNING: CocoaPods requires your terminal to be using UTF-8 encoding.
|
|
15
|
+
Consider adding the following to ~/.profile:
|
|
16
|
+
|
|
17
|
+
export LANG=en_US.UTF-8
|
|
18
|
+
\e[0m
|
|
19
|
+
DOC
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
if $PROGRAM_NAME == __FILE__ && !ENV['COCOAPODS_NO_BUNDLER']
|
|
25
|
+
ENV['BUNDLE_GEMFILE'] = File.expand_path('../../Gemfile', __FILE__)
|
|
26
|
+
require 'rubygems'
|
|
27
|
+
require 'bundler/setup'
|
|
28
|
+
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
|
29
|
+
elsif ENV['COCOAPODS_NO_BUNDLER']
|
|
30
|
+
require 'rubygems'
|
|
31
|
+
gem 'cocoapods'
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
STDOUT.sync = true if ENV['CP_STDOUT_SYNC'] == 'TRUE'
|
|
35
|
+
|
|
36
|
+
require 'cocoapods'
|
|
37
|
+
|
|
38
|
+
if profile_filename = ENV['PROFILE']
|
|
39
|
+
require 'ruby-prof'
|
|
40
|
+
reporter =
|
|
41
|
+
case (profile_extname = File.extname(profile_filename))
|
|
42
|
+
when '.txt'
|
|
43
|
+
RubyProf::FlatPrinterWithLineNumbers
|
|
44
|
+
when '.html'
|
|
45
|
+
RubyProf::GraphHtmlPrinter
|
|
46
|
+
when '.callgrind'
|
|
47
|
+
RubyProf::CallTreePrinter
|
|
48
|
+
else
|
|
49
|
+
raise "Unknown profiler format indicated by extension: #{profile_extname}"
|
|
50
|
+
end
|
|
51
|
+
File.open(profile_filename, 'w') do |io|
|
|
52
|
+
reporter.new(RubyProf.profile { Pod::Command.run(ARGV) }).print(io)
|
|
53
|
+
end
|
|
54
|
+
else
|
|
55
|
+
Pod::Command.run(ARGV)
|
|
56
|
+
end
|
data/bin/sandbox-pod
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# encoding: utf-8
|
|
3
|
+
|
|
4
|
+
# This bin wrapper runs the `pod` command in a OS X sandbox. The reason for this
|
|
5
|
+
# is to ensure that people can’t use malicious code from pod specifications.
|
|
6
|
+
#
|
|
7
|
+
# It does this by creating a ‘seatbelt’ profile on the fly and executing the
|
|
8
|
+
# given command through `/usr/bin/sandbox-exec`. This profile format is an
|
|
9
|
+
# undocumented format, which uses TinyScheme to implement its DSL.
|
|
10
|
+
#
|
|
11
|
+
# Even though it uses a undocumented format, it’s actually very self-explanatory.
|
|
12
|
+
# Because we use a whitelist approach, `(deny default)`, any action that is
|
|
13
|
+
# denied is logged to `/var/log/system.log`. So tailing that should provide
|
|
14
|
+
# enough information on steps that need to be take to get something to work.
|
|
15
|
+
#
|
|
16
|
+
# For more information see:
|
|
17
|
+
#
|
|
18
|
+
# * https://github.com/CocoaPods/CocoaPods/issues/939
|
|
19
|
+
# * http://reverse.put.as/wp-content/uploads/2011/08/The-Apple-Sandbox-BHDC2011-Slides.pdf
|
|
20
|
+
# * http://reverse.put.as/wp-content/uploads/2011/08/The-Apple-Sandbox-BHDC2011-Paper.pdf
|
|
21
|
+
# * https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles
|
|
22
|
+
# * `$ man sandbox-exec`
|
|
23
|
+
# * `$ ls /usr/share/sandbox`
|
|
24
|
+
|
|
25
|
+
if $0 == __FILE__
|
|
26
|
+
$:.unshift File.expand_path('../../lib', __FILE__)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
require 'pathname'
|
|
30
|
+
require 'cocoapods/config'
|
|
31
|
+
require 'rbconfig'
|
|
32
|
+
require 'erb'
|
|
33
|
+
|
|
34
|
+
PROFILE_ERB_TEMPLATE = <<-EOS
|
|
35
|
+
(version 1)
|
|
36
|
+
(debug allow)
|
|
37
|
+
|
|
38
|
+
(import "mDNSResponder.sb")
|
|
39
|
+
|
|
40
|
+
(allow file-ioctl)
|
|
41
|
+
(allow sysctl-read)
|
|
42
|
+
(allow mach-lookup)
|
|
43
|
+
(allow ipc-posix-shm)
|
|
44
|
+
(allow process-fork)
|
|
45
|
+
(allow system-socket)
|
|
46
|
+
|
|
47
|
+
; TODO make this stricter if possible
|
|
48
|
+
(allow network-outbound)
|
|
49
|
+
|
|
50
|
+
(allow process-exec
|
|
51
|
+
(literal
|
|
52
|
+
"<%= pod_bin %>"
|
|
53
|
+
"<%= ruby_bin %>"
|
|
54
|
+
)
|
|
55
|
+
(regex
|
|
56
|
+
<% prefixes.each do |prefix| %>
|
|
57
|
+
#"^<%= prefix %>/*"
|
|
58
|
+
<% end %>
|
|
59
|
+
)
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
(allow file-read-metadata)
|
|
63
|
+
(allow file-read*
|
|
64
|
+
; This is currenly only added because using `xcodebuild` to build a resource
|
|
65
|
+
; bundle target starts a FSEvents stream on `/`. No idea why that would be
|
|
66
|
+
; needed, but for now it doesn’t seem like a real problem.
|
|
67
|
+
(literal "/")
|
|
68
|
+
(regex
|
|
69
|
+
; TODO see if we can restrict this more, but it's going to be hard
|
|
70
|
+
#"^/Users/[^.]+/*"
|
|
71
|
+
;#"^/Users/[^.]+/.netrc"
|
|
72
|
+
;#"^/Users/[^.]+/.gemrc"
|
|
73
|
+
;#"^/Users/[^.]+/.gem/*"
|
|
74
|
+
;#"^/Users/[^.]+/Library/.*"
|
|
75
|
+
#"^/Library/*"
|
|
76
|
+
#"^/System/Library/*"
|
|
77
|
+
#"^/usr/lib/*"
|
|
78
|
+
#"^/usr/share/*"
|
|
79
|
+
#"^/private/*"
|
|
80
|
+
#"^/dev/*"
|
|
81
|
+
#"^<%= ruby_prefix %>"
|
|
82
|
+
#"^<%= pod_prefix %>"
|
|
83
|
+
#"^<%= xcode_app_path %>"
|
|
84
|
+
#"^<%= Pod::Config.instance.repos_dir %>"
|
|
85
|
+
<% prefixes.each do |prefix| %>
|
|
86
|
+
#"^<%= prefix %>/*"
|
|
87
|
+
<% end %>
|
|
88
|
+
)
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
(allow file-write*
|
|
92
|
+
(literal
|
|
93
|
+
"/dev/dtracehelper"
|
|
94
|
+
"/dev/null"
|
|
95
|
+
)
|
|
96
|
+
(regex
|
|
97
|
+
#"^<%= Pod::Config.instance.project_root %>"
|
|
98
|
+
#"^<%= Pod::Config.instance.repos_dir %>"
|
|
99
|
+
#"^/Users/[^.]+/Library/Caches/CocoaPods/*"
|
|
100
|
+
#"^/dev/tty"
|
|
101
|
+
#"^/private/var"
|
|
102
|
+
)
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
(deny default)
|
|
106
|
+
EOS
|
|
107
|
+
|
|
108
|
+
class Profile
|
|
109
|
+
def pod_bin
|
|
110
|
+
File.expand_path('../pod', __FILE__)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def pod_prefix
|
|
114
|
+
File.expand_path('../..', pod_bin)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def ruby_bin
|
|
118
|
+
File.join(RbConfig::CONFIG['bindir'], RbConfig::CONFIG['ruby_install_name'])
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def ruby_prefix
|
|
122
|
+
RbConfig::CONFIG['prefix']
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def prefix_from_bin(bin_name)
|
|
126
|
+
unless (path = `which #{bin_name}`.strip).empty?
|
|
127
|
+
File.dirname(File.dirname(path))
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def prefixes
|
|
132
|
+
prefixes = ['/bin', '/usr/bin', '/usr/libexec', xcode_app_path]
|
|
133
|
+
prefixes << `brew --prefix`.strip unless `which brew`.strip.empty?
|
|
134
|
+
|
|
135
|
+
# From asking people, it seems MacPorts does not have a `prefix` command, like
|
|
136
|
+
# Homebrew does, so make an educated guess:
|
|
137
|
+
if port_prefix = prefix_from_bin('port')
|
|
138
|
+
prefixes << port_prefix
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
if rbenv_prefix = prefix_from_bin('rbenv')
|
|
142
|
+
prefixes << rbenv_prefix
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
prefixes
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def developer_prefix
|
|
149
|
+
`xcode-select --print-path`.strip
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def xcode_app_path
|
|
153
|
+
File.expand_path('../..', developer_prefix)
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# TODO: raise SAFE level (0) to 4 if possible.
|
|
157
|
+
def generate
|
|
158
|
+
ERB.new(PROFILE_ERB_TEMPLATE, 0, '>').result(binding)
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# Ensure the `pod` bin doesn’t think it needs to use Bundler.
|
|
163
|
+
ENV['COCOAPODS_NO_BUNDLER'] = '1'
|
|
164
|
+
|
|
165
|
+
profile = Profile.new
|
|
166
|
+
# puts profile.generate
|
|
167
|
+
command = ['/usr/bin/sandbox-exec', '-p', profile.generate, profile.pod_bin, *ARGV]
|
|
168
|
+
exec(*command)
|
data/lib/cocoapods.rb
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'xcodeproj'
|
|
3
|
+
|
|
4
|
+
# It is very likely that we'll need these and as some of those paths will atm
|
|
5
|
+
# result in a I18n deprecation warning, we load those here now so that we can
|
|
6
|
+
# get rid of that warning.
|
|
7
|
+
require 'active_support/core_ext/string/strip'
|
|
8
|
+
require 'active_support/core_ext/string/inflections'
|
|
9
|
+
require 'active_support/core_ext/array/conversions'
|
|
10
|
+
# TODO: check what this actually does by the time we're going to add support for
|
|
11
|
+
# other locales.
|
|
12
|
+
require 'i18n'
|
|
13
|
+
if I18n.respond_to?(:enforce_available_locales=)
|
|
14
|
+
I18n.enforce_available_locales = false
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
module Pod
|
|
18
|
+
require 'pathname'
|
|
19
|
+
require 'tmpdir'
|
|
20
|
+
|
|
21
|
+
require 'cocoapods/gem_version'
|
|
22
|
+
require 'cocoapods-core'
|
|
23
|
+
require 'cocoapods/config'
|
|
24
|
+
require 'cocoapods/downloader'
|
|
25
|
+
|
|
26
|
+
# Loaded immediately after dependencies to ensure proper override of their
|
|
27
|
+
# UI methods.
|
|
28
|
+
#
|
|
29
|
+
require 'cocoapods/user_interface'
|
|
30
|
+
|
|
31
|
+
# Indicates an user error. This is defined in cocoapods-core.
|
|
32
|
+
#
|
|
33
|
+
class Informative < PlainInformative
|
|
34
|
+
def message
|
|
35
|
+
"[!] #{super}".red
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
Xcodeproj::PlainInformative.send(:include, CLAide::InformativeError)
|
|
40
|
+
|
|
41
|
+
autoload :AggregateTarget, 'cocoapods/target/aggregate_target'
|
|
42
|
+
autoload :Command, 'cocoapods/command'
|
|
43
|
+
autoload :Deintegrator, 'cocoapods_deintegrate'
|
|
44
|
+
autoload :Executable, 'cocoapods/executable'
|
|
45
|
+
autoload :ExternalSources, 'cocoapods/external_sources'
|
|
46
|
+
autoload :Installer, 'cocoapods/installer'
|
|
47
|
+
autoload :HooksManager, 'cocoapods/hooks_manager'
|
|
48
|
+
autoload :PodTarget, 'cocoapods/target/pod_target'
|
|
49
|
+
autoload :Project, 'cocoapods/project'
|
|
50
|
+
autoload :Resolver, 'cocoapods/resolver'
|
|
51
|
+
autoload :Sandbox, 'cocoapods/sandbox'
|
|
52
|
+
autoload :Target, 'cocoapods/target'
|
|
53
|
+
autoload :Validator, 'cocoapods/validator'
|
|
54
|
+
|
|
55
|
+
module Generator
|
|
56
|
+
autoload :Acknowledgements, 'cocoapods/generator/acknowledgements'
|
|
57
|
+
autoload :Markdown, 'cocoapods/generator/acknowledgements/markdown'
|
|
58
|
+
autoload :Plist, 'cocoapods/generator/acknowledgements/plist'
|
|
59
|
+
autoload :BridgeSupport, 'cocoapods/generator/bridge_support'
|
|
60
|
+
autoload :Constant, 'cocoapods/generator/constant'
|
|
61
|
+
autoload :CopyResourcesScript, 'cocoapods/generator/copy_resources_script'
|
|
62
|
+
autoload :DummySource, 'cocoapods/generator/dummy_source'
|
|
63
|
+
autoload :EmbedFrameworksScript, 'cocoapods/generator/embed_frameworks_script'
|
|
64
|
+
autoload :Header, 'cocoapods/generator/header'
|
|
65
|
+
autoload :InfoPlistFile, 'cocoapods/generator/info_plist_file'
|
|
66
|
+
autoload :ModuleMap, 'cocoapods/generator/module_map'
|
|
67
|
+
autoload :PrefixHeader, 'cocoapods/generator/prefix_header'
|
|
68
|
+
autoload :UmbrellaHeader, 'cocoapods/generator/umbrella_header'
|
|
69
|
+
autoload :AppTargetHelper, 'cocoapods/generator/app_target_helper'
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
require 'cocoapods/core_overrides'
|
|
73
|
+
end
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
require 'colored2'
|
|
2
|
+
require 'claide'
|
|
3
|
+
require 'molinillo/errors'
|
|
4
|
+
|
|
5
|
+
module Molinillo
|
|
6
|
+
class ResolverError
|
|
7
|
+
include CLAide::InformativeError
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
module Pod
|
|
12
|
+
class PlainInformative
|
|
13
|
+
include CLAide::InformativeError
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
class Command < CLAide::Command
|
|
17
|
+
require 'cocoapods/command/options/repo_update'
|
|
18
|
+
require 'cocoapods/command/options/project_directory'
|
|
19
|
+
include Options
|
|
20
|
+
|
|
21
|
+
require 'cocoapods/command/cache'
|
|
22
|
+
require 'cocoapods/command/env'
|
|
23
|
+
require 'cocoapods/command/init'
|
|
24
|
+
require 'cocoapods/command/install'
|
|
25
|
+
require 'cocoapods/command/ipc'
|
|
26
|
+
require 'cocoapods/command/lib'
|
|
27
|
+
require 'cocoapods/command/list'
|
|
28
|
+
require 'cocoapods/command/outdated'
|
|
29
|
+
require 'cocoapods/command/repo'
|
|
30
|
+
require 'cocoapods/command/setup'
|
|
31
|
+
require 'cocoapods/command/spec'
|
|
32
|
+
require 'cocoapods/command/update'
|
|
33
|
+
|
|
34
|
+
self.abstract_command = true
|
|
35
|
+
self.command = 'pod'
|
|
36
|
+
self.version = VERSION
|
|
37
|
+
self.description = 'CocoaPods, the Cocoa library package manager.'
|
|
38
|
+
self.plugin_prefixes = %w(claide cocoapods)
|
|
39
|
+
|
|
40
|
+
def self.options
|
|
41
|
+
[
|
|
42
|
+
['--silent', 'Show nothing'],
|
|
43
|
+
].concat(super)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def self.run(argv)
|
|
47
|
+
help! 'You cannot run CocoaPods as root.' if Process.uid == 0
|
|
48
|
+
|
|
49
|
+
verify_minimum_git_version!
|
|
50
|
+
verify_xcode_license_approved!
|
|
51
|
+
|
|
52
|
+
super(argv)
|
|
53
|
+
ensure
|
|
54
|
+
UI.print_warnings
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def self.report_error(exception)
|
|
58
|
+
case exception
|
|
59
|
+
when Interrupt
|
|
60
|
+
puts '[!] Cancelled'.red
|
|
61
|
+
Config.instance.verbose? ? raise : exit(1)
|
|
62
|
+
when SystemExit
|
|
63
|
+
raise
|
|
64
|
+
else
|
|
65
|
+
if ENV['COCOA_PODS_ENV'] != 'development'
|
|
66
|
+
puts UI::ErrorReport.report(exception)
|
|
67
|
+
UI::ErrorReport.search_for_exceptions(exception)
|
|
68
|
+
exit 1
|
|
69
|
+
else
|
|
70
|
+
raise exception
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# @todo If a command is run inside another one some settings which where
|
|
76
|
+
# true might return false.
|
|
77
|
+
#
|
|
78
|
+
# @todo We should probably not even load colored unless needed.
|
|
79
|
+
#
|
|
80
|
+
# @todo Move silent flag to CLAide.
|
|
81
|
+
#
|
|
82
|
+
# @note It is important that the commands don't override the default
|
|
83
|
+
# settings if their flag is missing (i.e. their value is nil)
|
|
84
|
+
#
|
|
85
|
+
def initialize(argv)
|
|
86
|
+
super
|
|
87
|
+
config.silent = argv.flag?('silent', config.silent)
|
|
88
|
+
config.verbose = self.verbose? unless verbose.nil?
|
|
89
|
+
unless self.ansi_output?
|
|
90
|
+
Colored2.disable!
|
|
91
|
+
String.send(:define_method, :colorize) { |string, _| string }
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# Ensure that the master spec repo exists
|
|
96
|
+
#
|
|
97
|
+
# @return [void]
|
|
98
|
+
#
|
|
99
|
+
def ensure_master_spec_repo_exists!
|
|
100
|
+
unless config.sources_manager.master_repo_functional?
|
|
101
|
+
Setup.new(CLAide::ARGV.new([])).run
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
#-------------------------------------------------------------------------#
|
|
106
|
+
|
|
107
|
+
include Config::Mixin
|
|
108
|
+
|
|
109
|
+
private
|
|
110
|
+
|
|
111
|
+
# Returns a new {Gem::Version} based on the systems `git` version.
|
|
112
|
+
#
|
|
113
|
+
# @return [Gem::Version]
|
|
114
|
+
#
|
|
115
|
+
def self.git_version
|
|
116
|
+
raw_version = Executable.capture_command('git', ['--version']).first
|
|
117
|
+
unless match = raw_version.scan(/\d+\.\d+\.\d+/).first
|
|
118
|
+
raise "Failed to extract git version from `git --version` (#{raw_version.inspect})"
|
|
119
|
+
end
|
|
120
|
+
Gem::Version.new(match)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# Checks that the git version is at least 1.8.5
|
|
124
|
+
#
|
|
125
|
+
# @raise If the git version is older than 1.8.5
|
|
126
|
+
#
|
|
127
|
+
# @return [void]
|
|
128
|
+
#
|
|
129
|
+
def self.verify_minimum_git_version!
|
|
130
|
+
if git_version < Gem::Version.new('1.8.5')
|
|
131
|
+
raise Informative, 'You need at least git version 1.8.5 to use CocoaPods'
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# Returns a new {Installer} parametrized from the {Config}.
|
|
136
|
+
#
|
|
137
|
+
# @return [Installer]
|
|
138
|
+
#
|
|
139
|
+
def installer_for_config
|
|
140
|
+
Installer.new(config.sandbox, config.podfile, config.lockfile)
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# Checks that the podfile exists.
|
|
144
|
+
#
|
|
145
|
+
# @raise If the podfile does not exists.
|
|
146
|
+
#
|
|
147
|
+
# @return [void]
|
|
148
|
+
#
|
|
149
|
+
def verify_podfile_exists!
|
|
150
|
+
unless config.podfile
|
|
151
|
+
raise Informative, "No `Podfile' found in the project directory."
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
# Checks that the lockfile exists.
|
|
156
|
+
#
|
|
157
|
+
# @raise If the lockfile does not exists.
|
|
158
|
+
#
|
|
159
|
+
# @return [void]
|
|
160
|
+
#
|
|
161
|
+
def verify_lockfile_exists!
|
|
162
|
+
unless config.lockfile
|
|
163
|
+
raise Informative, "No `Podfile.lock' found in the project directory, run `pod install'."
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def self.verify_xcode_license_approved!
|
|
168
|
+
if `/usr/bin/xcrun clang 2>&1` =~ /license/ && !$?.success?
|
|
169
|
+
raise Informative, 'You have not agreed to the Xcode license, which ' \
|
|
170
|
+
'you must do to use CocoaPods. Agree to the license by running: ' \
|
|
171
|
+
'`xcodebuild -license`.'
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
end
|