cocoapods 0.23.0 → 0.24.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a84359c5124c149ebe91ff9dfc1c13365810c69f
4
- data.tar.gz: c6603183ff3a4ff61f66adf32555d2eb031d4d0f
3
+ metadata.gz: 715b8dbbcd30e102cab744b29a1c7d2de026fdf5
4
+ data.tar.gz: f047dae069b1bc0cf5e8112f829e1e50b9f0e957
5
5
  SHA512:
6
- metadata.gz: e94d2d8af92dc3cde69a47ad25243848c55d5a5f5bd37d30dd75a302a1c6952110b8a4bb504cefba6662893f44a5633bc44a7c45a42c68e171e0fa1ce8e2a16c
7
- data.tar.gz: e4b4ff2b5023866af419cf77ddef26fef893b5cdc4652d112d4903d98dee98b532275d49ea4207cfb3284eab5e149eaa41b6d801bad2a806d5b004a15dac834f
6
+ metadata.gz: b07a220e098bd9f7a9f8a73b672dacdbef5ea867602ba5fb234c02e7ae1b9b03eb25358c0fed78c8c2691fe49b4b155c788fcb62237758e7773d81f1584b65e8
7
+ data.tar.gz: eb7e3c4cb5a1bd97f0f39016ed5241f14743dec70fa5a6bcbeb8748a63094e3ef02a22d7eb1a94750a9f4ced3ee279ef3a0bc9854b8512fb53e6bae038904d56
@@ -4,8 +4,79 @@ To install or update CocoaPods see this [guide](http://docs.cocoapods.org/guides
4
4
 
5
5
  ## Master
6
6
 
7
+
8
+ ## 0.24.0
9
+
10
+ ###### Enhancements
11
+ [CocoaPods](https://github.com/CocoaPods/CocoaPods/compare/0.22.3...0.23.0.rc1)
12
+ • [cocoapods-core](https://github.com/CocoaPods/Core/compare/0.22.3...0.23.0.rc1)
13
+ • [Xcodeproj](https://github.com/CocoaPods/Xcodeproj/compare/0.8.1...0.9.0)
14
+ • [cocoapods-downloader](https://github.com/CocoaPods/cocoapods-downloader/compare/0.1.1...0.1.2)
15
+
16
+
17
+ ###### Enhancements
18
+
19
+ * Added `pod init` command which generates a Podfile according to the
20
+ targets of the project stored in the working directory and to the templates
21
+ stored in the `~/.cocoapods/templates` folder. Tow templates are supported:
22
+ - the `Podfile.default` template for regular targets.
23
+ - and the `Podfile.test` template for test targets.
24
+
25
+ [Ian Ynda-Hummel](https://github.com/ianyh)
26
+ [#1106](https://github.com/CocoaPods/CocoaPods/issues/1106)
27
+ [#1045](https://github.com/CocoaPods/CocoaPods/issues/1045)
28
+
29
+ * CocoaPods will now leverage the [xcproj](https://github.com/0xced/xcproj)
30
+ command line tool if available in the path of the user to touch saved
31
+ projects. This will result in projects being serialized in the exact format
32
+ used by Xcode eliminating merge conflicts and other related issues. To learn
33
+ more about how to install xcproj see its
34
+ [readme](https://github.com/0xced/xcproj).
35
+ [Cédric Luthi](https://github.com/0xced)
36
+ [#1275](https://github.com/CocoaPods/CocoaPods/issues/1275)
37
+
38
+ * Rationalized and cleaned up Pods project group structure and path specification.
39
+
40
+ * Create all necessary build configurations for *Pods.xcodeproj* at the project level. If the user’s project has more than just *Debug* and *Release* build configurations, they may be explicitly specified in the Podfile:
41
+ `xcodeproj 'MyApp', 'App Store' => :release, 'Debug' => :debug, 'Release' => :release`
42
+ If build configurations aren’t specified in the Podfile then they will be automatically picked from the user’s project in *Release* mode.
43
+ These changes will ensure that the `libPods.a` static library is not stripped for all configurations, as explained in [#1217](https://github.com/CocoaPods/CocoaPods/pull/1217).
44
+ [Cédric Luthi](https://github.com/0xced)
45
+ [#1294](https://github.com/CocoaPods/CocoaPods/issues/1294)
46
+
47
+ * Added basic support for Bazaar repositories.
48
+ [Fred McCann](https://github.com/fmccann)
49
+ [cocoapods-downloader#4](https://github.com/CocoaPods/cocoapods-downloader/pull/4)
50
+
51
+ ###### Bug Fixes
52
+
53
+ * Fixed crash in `pod spec cat`.
54
+
55
+ * Use the `TARGET_BUILD_DIR` environment variable for installing resource bundles.
56
+ [Cédric Luthi](https://github.com/0xced)
57
+ [#1268](https://github.com/CocoaPods/CocoaPods/issues/1268)
58
+
59
+ * CoreData versioned models are now properly handled respecting the contents of
60
+ the `.xccurrentversion` file.
61
+ [#1288](https://github.com/CocoaPods/CocoaPods/issues/1288),
62
+ [Xcodeproj#83](https://github.com/CocoaPods/Xcodeproj/pull/83)
63
+ [Ashton-W](https://github.com/Ashton-W)
64
+
65
+ * OS X frameworks are now copied to the Resources folder using rsync to
66
+ properly overwrite existing files.
67
+ [Nikolaj Schumacher](https://github.com/nschum)
68
+ [#1063](https://github.com/CocoaPods/CocoaPods/issues/1063)
69
+
70
+ * User defined build configurations are now added to the resource bundle
71
+ targets.
72
+ [#1309](https://github.com/CocoaPods/CocoaPods/issues/1309),
73
+
74
+
7
75
  ## 0.23.0
8
76
 
77
+
78
+ ## 0.23.0.rc1
79
+
9
80
  ###### Enhancements
10
81
  [CocoaPods](https://github.com/CocoaPods/CocoaPods/compare/0.22.3...0.23.0.rc1)
11
82
  • [cocoapods-core](https://github.com/CocoaPods/Core/compare/0.22.3...0.23.0.rc1)
data/LICENSE CHANGED
@@ -1,3 +1,5 @@
1
+ This project is licensed under the MIT license.
2
+
1
3
  Copyright (c) 2011 - 2012 Eloy Durán <eloy.de.enige@gmail.com>
2
4
  Copyright (c) 2012 Fabio Pelosin <fabiopelosin@gmail.com>
3
5
 
@@ -1,6 +1,5 @@
1
1
  require 'rubygems'
2
-
3
- autoload :Xcodeproj, 'xcodeproj'
2
+ require 'xcodeproj'
4
3
 
5
4
  module Pod
6
5
  require 'pathname'
@@ -20,6 +20,7 @@ module Pod
20
20
  require 'cocoapods/command/search'
21
21
  require 'cocoapods/command/setup'
22
22
  require 'cocoapods/command/spec'
23
+ require 'cocoapods/command/init'
23
24
 
24
25
  self.abstract_command = true
25
26
  self.default_subcommand = 'install'
@@ -0,0 +1,90 @@
1
+ require 'xcodeproj'
2
+ require 'active_support/core_ext/string/strip'
3
+
4
+ module Pod
5
+ class Command
6
+ class Init < Command
7
+
8
+ self.summary = 'Generate a Podfile for the current directory.'
9
+ self.description = <<-DESC
10
+ Creates a Podfile for the current directory if none currently exists. If
11
+ an Xcode project file is specified or if there is only a single project
12
+ file in the current directory, targets will be automatically generated
13
+ based on targets defined in the project.
14
+
15
+ It is possible to specify a list of dependencies which will be used by
16
+ the template in the `Podfile.default` (normal targets) `Podfile.test`
17
+ (test targets) files which should be stored in the
18
+ `~/.cocoapods/templates` folder.
19
+ DESC
20
+ self.arguments = '[XCODEPROJ]'
21
+
22
+ def initialize(argv)
23
+ @podfile_path = Pathname.pwd + "Podfile"
24
+ @project_path = argv.shift_argument
25
+ @project_paths = Pathname.pwd.children.select { |pn| pn.extname == '.xcodeproj' }
26
+ super
27
+ end
28
+
29
+ def validate!
30
+ super
31
+ raise Informative, "Existing Podfile found in directory" unless config.podfile.nil?
32
+ if @project_path
33
+ help! "Xcode project at #{@project_path} does not exist" unless File.exist? @project_path
34
+ else
35
+ raise Informative, "No xcode project found, please specify one" unless @project_paths.length > 0
36
+ raise Informative, "Multiple xcode projects found, please specify one" unless @project_paths.length == 1
37
+ @project_path = @project_paths.first
38
+ end
39
+ @xcode_project = Xcodeproj::Project.open(@project_path)
40
+ end
41
+
42
+ def run
43
+ @podfile_path.open('w') { |f| f << podfile_template(@xcode_project) }
44
+ end
45
+
46
+ private
47
+
48
+ # @param [Xcodeproj::Project] project
49
+ # The xcode project to generate a podfile for.
50
+ #
51
+ # @return [String] the text of the Podfile for the provided project
52
+ #
53
+ def podfile_template(project)
54
+ podfile = <<-PLATFORM.strip_heredoc
55
+ # Uncomment this line to define a global platform for your project
56
+ # platform :ios, "6.0"
57
+ PLATFORM
58
+ for target in project.targets
59
+ podfile << target_module(target)
60
+ end
61
+ podfile << "\n"
62
+ end
63
+
64
+ # @param [Xcodeproj::PBXTarget] target
65
+ # A target to generate a Podfile target module for.
66
+ #
67
+ # @return [String] the text for the target module
68
+ #
69
+ def target_module(target)
70
+ target_module = "\ntarget \"#{target.name}\" do\n"
71
+
72
+ if target.name =~ /tests?/i
73
+ target_module << template_contents(config.default_test_podfile_path)
74
+ else
75
+ target_module << template_contents(config.default_podfile_path)
76
+ end
77
+ target_module << "\nend\n"
78
+ end
79
+
80
+
81
+ def template_contents(path)
82
+ if path.exist?
83
+ path.read.chomp.lines.map{ |line| " #{line}" }.join("\n")
84
+ else
85
+ String.new
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
@@ -6,7 +6,7 @@ module Pod
6
6
  self.summary = 'Setup the CocoaPods environment'
7
7
 
8
8
  self.description = <<-DESC
9
- Creates a directory at `~/.cocoapods` which will hold your spec-repos.
9
+ Creates a directory at `~/.cocoapods/repos` which will hold your spec-repos.
10
10
  This is where it will create a clone of the public `master` spec-repo from:
11
11
 
12
12
  https://github.com/CocoaPods/Specs
@@ -304,7 +304,7 @@ module Pod
304
304
  # @return [Pathname] the absolute path of the given spec and source
305
305
  #
306
306
  def pathname_from_spec(spec, source)
307
- Pathname.new("~/.cocoapods/#{ source }/#{ spec.name }/#{ spec.version }/#{ spec.name }.podspec").expand_path
307
+ config.repos_dir + "#{source}/#{spec.name}/#{spec.version}/#{spec.name}.podspec"
308
308
  end
309
309
 
310
310
  # @return [String] of spec paths one on each line
@@ -147,6 +147,12 @@ module Pod
147
147
 
148
148
  attr_writer :repos_dir
149
149
 
150
+ # @return [Pathname] the directory where the CocoaPods templates are stored.
151
+ #
152
+ def templates_dir
153
+ @templates_dir ||= Pathname.new(ENV['CP_TEMPLATES_DIR'] || "~/.cocoapods/templates").expand_path
154
+ end
155
+
150
156
  # @return [Pathname] the root of the CocoaPods installation where the
151
157
  # Podfile is located.
152
158
  #
@@ -223,6 +229,26 @@ module Pod
223
229
  @lockfile_path ||= installation_root + 'Podfile.lock'
224
230
  end
225
231
 
232
+ # Returns the path of the default Podfile pods.
233
+ #
234
+ # @note The file is expected to be named Podfile.default
235
+ #
236
+ # @return [Pathname]
237
+ #
238
+ def default_podfile_path
239
+ @default_podfile_path ||= templates_dir + "Podfile.default"
240
+ end
241
+
242
+ # Returns the path of the default Podfile test pods.
243
+ #
244
+ # @note The file is expected to be named Podfile.test
245
+ #
246
+ # @return [Pathname]
247
+ #
248
+ def default_test_podfile_path
249
+ @default_test_podfile_path ||= templates_dir + "Podfile.test"
250
+ end
251
+
226
252
  # @return [Pathname] The file to use a cache of the statistics provider.
227
253
  #
228
254
  def statistics_cache_file
@@ -1,6 +1,6 @@
1
1
  module Pod
2
2
  # The version of the cocoapods command line tool.
3
3
  #
4
- VERSION = '0.23.0' unless defined? Pod::VERSION
4
+ VERSION = '0.24.0' unless defined? Pod::VERSION
5
5
  end
6
6
 
@@ -98,8 +98,8 @@ install_resource()
98
98
  *.framework)
99
99
  echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
100
100
  mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
101
- echo "cp -fpR ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
102
- cp -fpR "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
101
+ echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
102
+ rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
103
103
  ;;
104
104
  *.xcdatamodel)
105
105
  echo "xcrun momc \\"${PODS_ROOT}/$1\\" \\"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\\""
@@ -285,10 +285,23 @@ module Pod
285
285
  #
286
286
  def prepare_pods_project
287
287
  UI.message "- Creating Pods project" do
288
- @pods_project = Pod::Project.new(sandbox)
288
+ @pods_project = Pod::Project.new(sandbox.project_path)
289
+
290
+ analysis_result.all_user_build_configurations.each do |name, type|
291
+ @pods_project.add_build_configuration(name, type)
292
+ end
293
+
294
+ pod_names = pod_targets.map(&:pod_name).uniq
295
+ pod_names.each do |pod_name|
296
+ path = sandbox.pod_dir(pod_name)
297
+ local = sandbox.local?(pod_name)
298
+ @pods_project.add_pod_group(pod_name, path, local)
299
+ end
300
+
289
301
  if config.podfile_path
290
302
  @pods_project.add_podfile(config.podfile_path)
291
303
  end
304
+
292
305
  sandbox.project = @pods_project
293
306
  platforms = aggregate_targets.map(&:platform)
294
307
  osx_deployment_target = platforms.select { |p| p.name == :osx }.map(&:deployment_target).min
@@ -331,6 +344,16 @@ module Pod
331
344
  target_installer = AggregateTargetInstaller.new(sandbox, target)
332
345
  target_installer.install!
333
346
  end
347
+
348
+ # TODO
349
+ # Move and add specs
350
+ pod_targets.sort_by(&:name).each do |pod_target|
351
+ pod_target.file_accessors.each do |file_accessor|
352
+ file_accessor.spec_consumer.frameworks.each do |framework|
353
+ ref = pods_project.add_system_framework(framework, pod_target.target)
354
+ end
355
+ end
356
+ end
334
357
  end
335
358
  end
336
359
 
@@ -360,10 +383,9 @@ module Pod
360
383
  #
361
384
  def link_aggregate_target
362
385
  aggregate_targets.each do |aggregate_target|
363
- native_target = pods_project.targets.select { |t| t.name == aggregate_target.name }.first
364
- products = pods_project.products_group
386
+ native_target = aggregate_target.target
365
387
  aggregate_target.pod_targets.each do |pod_target|
366
- product = products.files.select { |f| f.path == pod_target.product_name }.first
388
+ product = pod_target.target.product_reference
367
389
  native_target.frameworks_build_phase.add_file_reference(product)
368
390
  end
369
391
  end
@@ -375,9 +397,10 @@ module Pod
375
397
  #
376
398
  def write_pod_project
377
399
  UI.message "- Writing Xcode project file to #{UI.path sandbox.project_path}" do
378
- pods_project.main_group.sort_by_type!
379
- pods_project['Frameworks'].sort_by_type!
380
- pods_project.save_as(sandbox.project_path)
400
+ pods_project.pods.remove_from_project if pods_project.pods.empty?
401
+ pods_project.development_pods.remove_from_project if pods_project.development_pods.empty?
402
+ pods_project.main_group.recursively_sort_by_type
403
+ pods_project.save
381
404
  end
382
405
  end
383
406
 
@@ -169,7 +169,7 @@ module Pod
169
169
 
170
170
  if config.integrate_targets?
171
171
  project_path = compute_user_project_path(target_definition)
172
- user_project = Xcodeproj::Project.new(project_path)
172
+ user_project = Xcodeproj::Project.open(project_path)
173
173
  native_targets = compute_user_project_targets(target_definition, user_project)
174
174
 
175
175
  target.user_project_path = project_path
@@ -449,7 +449,7 @@ module Pod
449
449
  podfile.target_definition_list.each do |target_definition|
450
450
  if config.integrate_targets?
451
451
  project_path = compute_user_project_path(target_definition)
452
- user_project = Xcodeproj::Project.new(project_path)
452
+ user_project = Xcodeproj::Project.open(project_path)
453
453
  targets = compute_user_project_targets(target_definition, user_project)
454
454
  platform = compute_platform_for_target_definition(target_definition, targets)
455
455
  else
@@ -488,6 +488,16 @@ module Pod
488
488
  #
489
489
  attr_accessor :targets
490
490
 
491
+ # @return [Hash{String=>Symbol}] A hash representing all the user build
492
+ # configurations across all integration targets. Each key
493
+ # corresponds to the name of a configuration and its value to
494
+ # its type (`:debug` or `:release`).
495
+ #
496
+ def all_user_build_configurations
497
+ targets.inject({}) do |result, target|
498
+ result.merge(target.user_build_configurations)
499
+ end
500
+ end
491
501
  end
492
502
 
493
503
  #-----------------------------------------------------------------------#
@@ -65,15 +65,11 @@ module Pod
65
65
  # @note The source files are grouped by Pod and in turn by subspec
66
66
  # (recursively).
67
67
  #
68
- # @note Pods are generally added to the `Pods` group, however, if they
69
- # have a local source they are added to the
70
- # `Local Pods` group.
71
- #
72
68
  # @return [void]
73
69
  #
74
70
  def add_source_files_references
75
71
  UI.message "- Adding source files to Pods project" do
76
- add_file_acessors_paths_to_pods_group(:source_files, :source_files)
72
+ add_file_accessors_paths_to_pods_group(:source_files, :source_files)
77
73
  end
78
74
  end
79
75
 
@@ -83,7 +79,7 @@ module Pod
83
79
  #
84
80
  def add_frameworks_bundles
85
81
  UI.message "- Adding frameworks to Pods project" do
86
- add_file_acessors_paths_to_pods_group(:vendored_frameworks, :frameworks_and_libraries)
82
+ add_file_accessors_paths_to_pods_group(:vendored_frameworks, :frameworks_and_libraries)
87
83
  end
88
84
  end
89
85
 
@@ -93,7 +89,7 @@ module Pod
93
89
  #
94
90
  def add_vendored_libraries
95
91
  UI.message "- Adding frameworks to Pods project" do
96
- add_file_acessors_paths_to_pods_group(:vendored_libraries, :frameworks_and_libraries)
92
+ add_file_accessors_paths_to_pods_group(:vendored_libraries, :frameworks_and_libraries)
97
93
  end
98
94
  end
99
95
 
@@ -106,8 +102,8 @@ module Pod
106
102
  #
107
103
  def add_resources
108
104
  UI.message "- Adding resources to Pods project" do
109
- add_file_acessors_paths_to_pods_group(:resources, :resources)
110
- add_file_acessors_paths_to_pods_group(:resource_bundle_files, :resources)
105
+ add_file_accessors_paths_to_pods_group(:resources, :resources)
106
+ add_file_accessors_paths_to_pods_group(:resource_bundle_files, :resources)
111
107
  end
112
108
  end
113
109
 
@@ -160,7 +156,7 @@ module Pod
160
156
  #
161
157
  # @return [void]
162
158
  #
163
- def add_file_acessors_paths_to_pods_group(file_accessor_key, group_key)
159
+ def add_file_accessors_paths_to_pods_group(file_accessor_key, group_key)
164
160
  file_accessors.each do |file_accessor|
165
161
  paths = file_accessor.send(file_accessor_key)
166
162
  paths.each do |path|
@@ -52,13 +52,7 @@ module Pod
52
52
  @target.build_settings('Release').merge!(settings)
53
53
 
54
54
  library.user_build_configurations.each do |bc_name, type|
55
- unless @target.build_configurations.map(&:name).include?(bc_name)
56
- build_config = project.new(Xcodeproj::Project::XCBuildConfiguration)
57
- build_config.name = bc_name
58
- settings = @target.build_settings(type.to_s.capitalize).dup
59
- build_config.build_settings = settings
60
- target.build_configurations << build_config
61
- end
55
+ @target.add_build_configuration(bc_name, type)
62
56
  end
63
57
 
64
58
  library.target = @target
@@ -126,8 +120,7 @@ module Pod
126
120
  # @return [PBXFileReference] the file reference of the added file.
127
121
  #
128
122
  def add_file_to_support_group(path)
129
- relative_path = path.relative_path_from(sandbox.root)
130
- support_files_group.new_file(relative_path)
123
+ support_files_group.new_file(path)
131
124
  end
132
125
 
133
126
  #-----------------------------------------------------------------------#
@@ -90,8 +90,8 @@ module Pod
90
90
  path = library.copy_resources_script_path
91
91
  UI.message "- Generating copy resources script at #{UI.path(path)}" do
92
92
  file_accessors = library.pod_targets.map(&:file_accessors).flatten
93
- resource_paths = file_accessors.map { |accessor| accessor.resources.flatten.map {|res| project.relativize(res)} }.flatten
94
- resource_bundles = file_accessors.map { |accessor| accessor.resource_bundles.keys.map {|name| "${BUILD_DIR}/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}/#{name}.bundle" } }.flatten
93
+ resource_paths = file_accessors.map { |accessor| accessor.resources.flatten.map { |res| res.relative_path_from(project.path.dirname) }}.flatten
94
+ resource_bundles = file_accessors.map { |accessor| accessor.resource_bundles.keys.map {|name| "${TARGET_BUILD_DIR}/#{name}.bundle" } }.flatten
95
95
  resources = []
96
96
  resources.concat(resource_paths)
97
97
  resources.concat(resource_bundles)
@@ -13,9 +13,10 @@ module Pod
13
13
  def install!
14
14
  UI.message "- Installing target `#{library.name}` #{library.platform}" do
15
15
  add_target
16
+ move_target_product_file_reference
16
17
  add_files_to_build_phases
17
18
  add_resources_bundle_targets
18
- create_suport_files_group
19
+ # create_suport_files_group
19
20
  create_xcconfig_file
20
21
  create_prefix_header
21
22
  create_dummy_source
@@ -40,16 +41,19 @@ module Pod
40
41
  consumer = file_accessor.spec_consumer
41
42
  flags = compiler_flags_for_consumer(consumer)
42
43
  source_files = file_accessor.source_files
43
- file_refs = source_files.map { |sf| project.file_reference(sf) }
44
+ file_refs = source_files.map { |sf| project.reference_for_path(sf) }
44
45
  target.add_file_references(file_refs, flags)
45
46
 
46
- file_accessor.spec_consumer.frameworks.each do |framework|
47
- project.add_system_framework(framework, target)
48
- end
49
47
  end
50
48
  end
51
49
  end
52
50
 
51
+ def move_target_product_file_reference
52
+ pod_name = library.pod_name
53
+ group = project.group_for_spec(pod_name, :products)
54
+ target.product_reference.move(group)
55
+ end
56
+
53
57
  # Adds the resources of the Pods to the Pods project.
54
58
  #
55
59
  # @note The source files are grouped by Pod and in turn by subspec
@@ -61,12 +65,16 @@ module Pod
61
65
  UI.message "- Adding resource bundles to Pods project" do
62
66
  library.file_accessors.each do |file_accessor|
63
67
  file_accessor.resource_bundles.each do |bundle_name, paths|
64
- file_references = paths.map { |sf| project.file_reference(sf) }
65
- group = project.group_for_spec(file_accessor.spec.name, :resources)
68
+ file_references = paths.map { |sf| project.reference_for_path(sf) }
69
+ group = project.group_for_spec(file_accessor.spec.name, :products)
66
70
  product_group = project.group_for_spec(file_accessor.spec.name, :resources)
67
71
  bundle_target = project.new_resources_bundle(bundle_name, file_accessor.spec_consumer.platform_name, product_group)
68
72
  bundle_target.add_resources(file_references)
69
73
 
74
+ library.user_build_configurations.each do |bc_name, type|
75
+ bundle_target.add_build_configuration(bc_name, type)
76
+ end
77
+
70
78
  target.add_dependency(bundle_target)
71
79
  end
72
80
  end
@@ -179,6 +187,19 @@ module Pod
179
187
  flags * " "
180
188
  end
181
189
 
190
+ # Adds a reference to the given file in the support group of this target.
191
+ #
192
+ # @param [Pathname] path
193
+ # The path of the file to which the reference should be added.
194
+ #
195
+ # @return [PBXFileReference] the file reference of the added file.
196
+ #
197
+ def add_file_to_support_group(path)
198
+ pod_name = library.pod_name
199
+ group = project.group_for_spec(pod_name, :support_files)
200
+ group.new_file(path)
201
+ end
202
+
182
203
  #-----------------------------------------------------------------------#
183
204
 
184
205
  end
@@ -32,7 +32,7 @@ module Pod
32
32
  add_pods_library
33
33
  add_copy_resources_script_phase
34
34
  add_check_manifest_lock_script_phase
35
- save_user_project
35
+ user_project.save
36
36
  end
37
37
  end
38
38
 
@@ -66,14 +66,14 @@ module Pod
66
66
  # other TargetIntegrators might have modified it.
67
67
  #
68
68
  def user_project
69
- @user_project ||= Xcodeproj::Project.new(target.user_project_path)
69
+ @user_project ||= Xcodeproj::Project.open(target.user_project_path)
70
70
  end
71
71
 
72
72
  # Read the pods project from the disk to ensure that it is up to date as
73
73
  # other TargetIntegrators might have modified it.
74
74
  #
75
75
  def pods_project
76
- @pods_project ||= Xcodeproj::Project.new(target.sandbox.project_path)
76
+ @pods_project ||= Xcodeproj::Project.open(target.sandbox.project_path)
77
77
  end
78
78
 
79
79
  # @return [String] a string representation suitable for debugging.
@@ -182,14 +182,6 @@ module Pod
182
182
  end
183
183
  end
184
184
 
185
- # Saves the changes to the user project to the disk.
186
- #
187
- # @return [void]
188
- #
189
- def save_user_project
190
- user_project.save_as(target.user_project_path)
191
- end
192
-
193
185
  #---------------------------------------------------------------------#
194
186
 
195
187
  # @!group Private helpers.
@@ -9,230 +9,202 @@ module Pod
9
9
  #
10
10
  class Project < Xcodeproj::Project
11
11
 
12
-
13
- # @return [Sandbox] the sandbox which returns the information about which
14
- # Pods are local.
15
- #
16
- attr_reader :sandbox
17
-
18
- # @param [Sandbox] sandbox @see #sandbox
12
+ # @param [Pathname, String] path @see path
13
+ # @param [Bool] skip_initialization
14
+ # Wether the project should be initialized from scratch.
19
15
  #
20
- def initialize(sandbox)
21
- super(nil) # Recreate the project from scratch for now.
22
- # TODO
23
- raise unless sandbox.is_a?(Sandbox)
24
- @sandbox = sandbox
25
- @path = sandbox.project_path
16
+ def initialize(path, skip_initialization = false)
17
+ super(path, skip_initialization)
26
18
  @support_files_group = new_group('Targets Support Files')
27
-
28
19
  @refs_by_absolute_path = {}
20
+ @pods = new_group('Pods')
21
+ @development_pods = new_group('Development Pods')
29
22
  end
30
23
 
31
- # @return [Pathname] the path of the xcodeproj file which stores the
32
- # project.
24
+ # @return [PBXGroup] The group for the support files of the aggregate
25
+ # targets.
33
26
  #
34
- attr_reader :path
27
+ attr_reader :support_files_group
35
28
 
36
- # @return [Pathname] the directory where the project is stored.
29
+ # @return [PBXGroup] The group for the Pods.
37
30
  #
38
- def root
39
- @root ||= path.dirname
40
- end
31
+ attr_reader :pods
41
32
 
42
- # @return [Pathname] Returns the relative path from the project root.
33
+ # @return [PBXGroup] The group for Development Pods.
43
34
  #
44
- # @param [Pathname] path
45
- # The path that needs to be converted to the relative format.
35
+ attr_reader :development_pods
36
+
37
+
38
+ public
39
+
40
+ # @!group Pod Groups
41
+ #-------------------------------------------------------------------------#
42
+
43
+ # Creates a new group for the Pod with the given name and configures its
44
+ # path.
46
45
  #
47
- # @note If the two absolute paths don't share the same root directory an
48
- # extra `../` is added to the result of
49
- # {Pathname#relative_path_from}.
46
+ # @param [String] pod_name
47
+ # The name of the Pod.
50
48
  #
51
- # @example
49
+ # @param [#to_s] path
50
+ # The path to the root of the Pod.
52
51
  #
53
- # path = Pathname.new('/Users/dir')
54
- # @sandbox.root #=> Pathname('/tmp/CocoaPods/Lint/Pods')
52
+ # @param [Bool] development
53
+ # Wether the group should be added to the Development Pods group.
55
54
  #
56
- # @sandbox.relativize(path) #=> '../../../../Users/dir'
57
- # @sandbox.relativize(path) #=> '../../../../../Users/dir'
55
+ # @param [Bool] absolute
56
+ # Wether the path of the group should be set as absolute.
58
57
  #
59
- def relativize(path)
60
- unless path.absolute?
61
- raise StandardError, "[Bug] Attempt to add relative path `#{path}` to the Pods project"
62
- end
58
+ # @return [PBXGroup] The new group.
59
+ #
60
+ def add_pod_group(pod_name, path, development = false, absolute = false)
61
+ raise "[BUG]" if pod_group(pod_name)
63
62
 
64
- result = path.relative_path_from(root)
65
- unless root.to_s.split('/')[1] == path.to_s.split('/')[1]
66
- result = Pathname.new('../') + result
67
- end
68
- result
63
+ parent_group = development ? development_pods : pods
64
+ source_tree = absolute ? :absolute : :group
65
+ group = parent_group.new_group(pod_name, path, source_tree)
66
+ support_files_group = group.new_group(SPEC_SUBGROUPS[:support_files])
67
+ support_files_group.source_tree = 'SOURCE_ROOT'
68
+ group
69
69
  end
70
70
 
71
- # @return [String] a string representation suited for debugging.
71
+ # @return [Array<PBXGroup>] Returns all the group of the Pods.
72
72
  #
73
- def inspect
74
- "#<#{self.class}> path:#{path}"
73
+ def pod_groups
74
+ pods.children.objects + development_pods.children.objects
75
75
  end
76
76
 
77
- #-------------------------------------------------------------------------#
78
-
79
- public
80
-
81
- # @!group Groups
82
-
83
- # @return [PBXGroup] the group where the support files for the Pod
84
- # libraries should be added.
77
+ # Returns the group for the Pod with the given name.
85
78
  #
86
- attr_reader :support_files_group
87
-
88
- # Returns the `Pods` group, creating it if needed.
79
+ # @param [String] pod_name
80
+ # The name of the Pod.
89
81
  #
90
- # @return [PBXGroup] the group.
82
+ # @return [PBXGroup] The group.
91
83
  #
92
- def pods
93
- @pods ||= new_group('Pods')
84
+ def pod_group(pod_name)
85
+ pod_groups.find { |group| group.name == pod_name }
94
86
  end
95
87
 
96
- # Returns the `Local Pods` group, creating it if needed. This group is used
97
- # to contain locally sourced pods.
88
+ # @return [Hash] The names of the specification subgroups by key.
98
89
  #
99
- # @return [PBXGroup] the group.
100
- #
101
- def local_pods
102
- @local_pods ||= new_group('Local Pods')
103
- end
90
+ SPEC_SUBGROUPS = {
91
+ :source_files => 'Source Files',
92
+ :resources => 'Resources',
93
+ :frameworks_and_libraries => 'Frameworks & Libraries',
94
+ :support_files => 'Support Files',
95
+ :subspecs => 'Subspecs',
96
+ :products => 'Products',
97
+ }
104
98
 
105
- # Returns the `Local Pods` group, creating it if needed. This group is used
106
- # to contain locally sourced pods.
99
+ # Returns the group for the specification with the give name creating it if
100
+ # needed.
107
101
  #
108
- # @return [PBXGroup] the group.
102
+ # @param [String] spec_name
103
+ # The full name of the specification.
109
104
  #
110
- def resources
111
- @resources ||= new_group('Resources')
112
- end
113
-
114
-
115
- # @return [PBXGroup] the group for the spec with the given name.
105
+ # @param [Symbol] subgroup_key
106
+ # The optional key of the subgroup (@see #{SPEC_SUBGROUPS})
116
107
  #
117
- def group_for_spec(spec_name, type = nil)
118
- local = sandbox.local?(spec_name)
119
- parent_group = local ? local_pods : pods
120
- spec_group = add_spec_group(spec_name, parent_group)
121
- if type
122
- case type
123
- when :source_files then sub_group = 'Source Files'
124
- when :resources then sub_group = 'Resources'
125
- when :frameworks_and_libraries then sub_group = 'Frameworks & Libraries'
126
- when :support_files then sub_group = 'Support Files'
127
- else raise "[BUG]"
128
- end
129
- spec_group.find_subpath(sub_group, true)
108
+ # @return [PBXGroup] The group.
109
+ #
110
+ def group_for_spec(spec_name, subgroup_key = nil)
111
+ spec_group = spec_group(spec_name)
112
+ if subgroup_key
113
+ subgroup = SPEC_SUBGROUPS[subgroup_key]
114
+ raise ArgumentError, "Unrecognized subgroup `#{subgroup_key}`" unless subgroup
115
+ spec_group.find_subpath(subgroup, true)
130
116
  else
131
117
  spec_group
132
118
  end
133
119
  end
134
120
 
135
- #-------------------------------------------------------------------------#
136
121
 
137
122
  public
138
123
 
139
124
  # @!group File references
125
+ #-------------------------------------------------------------------------#
140
126
 
141
- # Adds a file reference for each one of the given files in the specified
142
- # group, namespaced by specification unless a file reference for the given
143
- # path already exits.
127
+ # Adds a file reference to given path as a child of the given group.
144
128
  #
145
- # @note With this set-up different subspecs might not reference the same
146
- # file (i.e. the first will win). Not sure thought if this is a
147
- # limitation or a feature.
129
+ # @param [Array<Pathname,String>] absolute_path
130
+ # The path of the file.
148
131
  #
149
- # @param [Array<Pathname,String>] paths
150
- # The files for which the file reference is needed.
132
+ # @param [PBXGroup] group
133
+ # The group for the new file reference.
151
134
  #
152
- # @param [String] spec_name
153
- # The full name of the specification.
154
- #
155
- # @param [PBXGroup] parent_group
156
- # The group where the file references should be added.
135
+ # @return [PBXFileReference] The new file reference.
157
136
  #
158
- # @return [void]
159
- #
160
- def add_file_references(absolute_path, spec_name, parent_group)
161
- group = group_for_spec(spec_name, :source_files)
162
- absolute_path.each do |file|
163
- existing = file_reference(file)
164
- unless existing
165
- file = Pathname.new(file)
166
- ref = group.new_file(relativize(file))
167
- @refs_by_absolute_path[file] = ref
168
- end
137
+ def add_file_reference(absolute_path, group)
138
+ unless Pathname.new(absolute_path).absolute?
139
+ raise ArgumentError, "Paths must be absolute #{absolute_path}"
169
140
  end
170
- end
171
141
 
172
- # TODO: missing customization for file reference
173
- #
174
- def add_file_reference(absolute_path, group)
175
- ref = group.new_file(relativize(absolute_path))
176
- @refs_by_absolute_path[absolute_path] = ref
142
+ if ref = reference_for_path(absolute_path)
143
+ ref
144
+ else
145
+ ref = group.new_file(absolute_path)
146
+ @refs_by_absolute_path[absolute_path.to_s] = ref
147
+ end
177
148
  end
178
149
 
179
- # Returns the file reference for the given absolute file path.
150
+ # Returns the file reference for the given absolute path.
180
151
  #
181
- # @param [Pathname,String] absolute_path
152
+ # @param [#to_s] absolute_path
182
153
  # The absolute path of the file whose reference is needed.
183
154
  #
184
155
  # @return [PBXFileReference] The file reference.
185
156
  # @return [Nil] If no file reference could be found.
186
157
  #
187
- def file_reference(absolute_path)
188
- absolute_path = Pathname.new(absolute_path)
189
- refs_by_absolute_path[absolute_path]
158
+ def reference_for_path(absolute_path)
159
+ unless Pathname.new(absolute_path).absolute?
160
+ raise ArgumentError, "Paths must be absolute #{absolute_path}"
161
+ end
162
+
163
+ refs_by_absolute_path[absolute_path.to_s]
190
164
  end
191
165
 
192
- # Adds a file reference to the podfile.
166
+ # Adds a file reference to the Podfile.
193
167
  #
194
- # @param [Pathname,String] podfile_path
195
- # the path of the podfile
168
+ # @param [#to_s] podfile_path
169
+ # The path of the Podfile.
196
170
  #
197
- # @return [PBXFileReference] the file reference.
171
+ # @return [PBXFileReference] The new file reference.
198
172
  #
199
173
  def add_podfile(podfile_path)
200
- podfile_path = Pathname.new(podfile_path)
201
- podfile_ref = new_file(relativize(podfile_path))
174
+ podfile_ref = new_file(podfile_path, :project)
202
175
  podfile_ref.xc_language_specification_identifier = 'xcode.lang.ruby'
203
176
  podfile_ref.last_known_file_type = 'text'
204
177
  podfile_ref
205
178
  end
206
179
 
207
- #-------------------------------------------------------------------------#
208
180
 
209
181
  private
210
182
 
211
183
  # @!group Private helpers
184
+ #-------------------------------------------------------------------------#
212
185
 
213
- # @return [Hash{Pathname => PBXFileReference}] The file references grouped
186
+ # @return [Hash{String => PBXFileReference}] The file references grouped
214
187
  # by absolute path.
215
188
  #
216
189
  attr_reader :refs_by_absolute_path
217
190
 
218
- # Returns a subgroup of the give group for the given spec creating it if
219
- # needed.
191
+ # Returns the group for the given specification creating it if needed.
220
192
  #
221
193
  # @param [String] spec_name
222
194
  # The full name of the specification.
223
195
  #
224
- # @param [PBXGroup] root_group
225
- # The group where to add the specification. Either `Pods` or `Local
226
- # Pods`.
227
- #
228
- # @return [PBXGroup] the group for the spec with the given name.
229
- #
230
- def add_spec_group(spec_name, root_group)
231
- current_group = root_group
232
- group = nil
233
- spec_name.split('/').each do |name|
234
- group = current_group[name] || current_group.new_group(name)
235
- current_group = group
196
+ # @return [PBXGroup] The group for the spec with the given name.
197
+ #
198
+ def spec_group(spec_name)
199
+ pod_name = Specification.root_name(spec_name)
200
+ group = pod_group(pod_name)
201
+ raise "[Bug] Unable to locate group for Pod named `#{pod_name}`" unless group
202
+ if spec_name != pod_name
203
+ subspecs_names = spec_name.gsub(pod_name + '/', '').split('/')
204
+ subspecs_names.each do |name|
205
+ subspecs_group = group[SPEC_SUBGROUPS[:subspecs]] || group.new_group(SPEC_SUBGROUPS[:subspecs])
206
+ group = subspecs_group[name] || subspecs_group.new_group(name)
207
+ end
236
208
  end
237
209
  group
238
210
  end
@@ -67,7 +67,7 @@ module Pod
67
67
  @predownloaded_pods = []
68
68
  @head_pods = []
69
69
  @checkout_sources = {}
70
- @local_pods = {}
70
+ @development_pods = {}
71
71
  FileUtils.mkdir_p(@root)
72
72
  end
73
73
 
@@ -152,7 +152,7 @@ module Pod
152
152
  def pod_dir(name)
153
153
  root_name = Specification.root_name(name)
154
154
  if local?(root_name)
155
- Pathname.new(local_pods[root_name])
155
+ Pathname.new(development_pods[root_name])
156
156
  else
157
157
  # root + "Sources/#{name}"
158
158
  root + root_name
@@ -342,7 +342,7 @@ module Pod
342
342
  #
343
343
  def store_local_path(name, path)
344
344
  root_name = Specification.root_name(name)
345
- local_pods[root_name] = path.to_s
345
+ development_pods[root_name] = path.to_s
346
346
  end
347
347
 
348
348
  # @return [Hash{String=>String}] The path of the Pods with a local source
@@ -350,7 +350,7 @@ module Pod
350
350
  #
351
351
  # @todo Rename (e.g. `pods_with_local_path`)
352
352
  #
353
- attr_reader :local_pods
353
+ attr_reader :development_pods
354
354
 
355
355
  # Checks if a Pod is locally sourced?
356
356
  #
@@ -361,7 +361,7 @@ module Pod
361
361
  #
362
362
  def local?(name)
363
363
  root_name = Specification.root_name(name)
364
- !local_pods[root_name].nil?
364
+ !development_pods[root_name].nil?
365
365
  end
366
366
 
367
367
  #-------------------------------------------------------------------------#
@@ -283,23 +283,41 @@ module Pod
283
283
  end
284
284
  UI = UserInterface
285
285
 
286
+ #---------------------------------------------------------------------------#
287
+
286
288
  # Redirects cocoapods-core UI.
287
289
  #
288
290
  module CoreUI
289
291
 
290
292
  class << self
291
293
 
292
- # @todo enable in CocoaPods 0.17.0 release
293
- #
294
294
  def puts(message)
295
- # UI.puts message
295
+ UI.puts message
296
296
  end
297
297
 
298
- # @todo enable in CocoaPods 0.17.0 release
299
- #
300
298
  def warn(message)
301
- # UI.warn message
299
+ UI.warn message
302
300
  end
303
301
  end
304
302
  end
305
303
  end
304
+
305
+ #---------------------------------------------------------------------------#
306
+
307
+ module Xcodeproj
308
+
309
+ # Redirects xcodeproj UI.
310
+ #
311
+ module UserInterface
312
+
313
+ def self.puts(message)
314
+ ::Pod::UI.puts message
315
+ end
316
+
317
+ def self.warn(message)
318
+ ::Pod::UI.warn message
319
+ end
320
+
321
+ end
322
+ end
323
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoapods
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.23.0
4
+ version: 0.24.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eloy Duran
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-08-08 00:00:00.000000000 Z
12
+ date: 2013-09-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cocoapods-core
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - '='
19
19
  - !ruby/object:Gem::Version
20
- version: 0.23.0
20
+ version: 0.24.0
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - '='
26
26
  - !ruby/object:Gem::Version
27
- version: 0.23.0
27
+ version: 0.24.0
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: claide
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -45,28 +45,28 @@ dependencies:
45
45
  requirements:
46
46
  - - ~>
47
47
  - !ruby/object:Gem::Version
48
- version: 0.1.2
48
+ version: 0.2.0
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - ~>
54
54
  - !ruby/object:Gem::Version
55
- version: 0.1.2
55
+ version: 0.2.0
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: xcodeproj
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - ~>
61
61
  - !ruby/object:Gem::Version
62
- version: 0.9.0
62
+ version: 0.10.0
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - ~>
68
68
  - !ruby/object:Gem::Version
69
- version: 0.9.0
69
+ version: 0.10.0
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: colored
72
72
  requirement: !ruby/object:Gem::Requirement
@@ -101,42 +101,42 @@ dependencies:
101
101
  requirements:
102
102
  - - ~>
103
103
  - !ruby/object:Gem::Version
104
- version: 1.8.0
104
+ version: '1.8'
105
105
  type: :runtime
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
108
  requirements:
109
109
  - - ~>
110
110
  - !ruby/object:Gem::Version
111
- version: 1.8.0
111
+ version: '1.8'
112
112
  - !ruby/object:Gem::Dependency
113
113
  name: open4
114
114
  requirement: !ruby/object:Gem::Requirement
115
115
  requirements:
116
116
  - - ~>
117
117
  - !ruby/object:Gem::Version
118
- version: 1.3.0
118
+ version: '1.3'
119
119
  type: :runtime
120
120
  prerelease: false
121
121
  version_requirements: !ruby/object:Gem::Requirement
122
122
  requirements:
123
123
  - - ~>
124
124
  - !ruby/object:Gem::Version
125
- version: 1.3.0
125
+ version: '1.3'
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: activesupport
128
128
  requirement: !ruby/object:Gem::Requirement
129
129
  requirements:
130
130
  - - ~>
131
131
  - !ruby/object:Gem::Version
132
- version: 3.2.13
132
+ version: '3.0'
133
133
  type: :runtime
134
134
  prerelease: false
135
135
  version_requirements: !ruby/object:Gem::Requirement
136
136
  requirements:
137
137
  - - ~>
138
138
  - !ruby/object:Gem::Version
139
- version: 3.2.13
139
+ version: '3.0'
140
140
  - !ruby/object:Gem::Dependency
141
141
  name: bacon
142
142
  requirement: !ruby/object:Gem::Requirement
@@ -167,6 +167,7 @@ extensions: []
167
167
  extra_rdoc_files: []
168
168
  files:
169
169
  - lib/cocoapods/command/help.rb
170
+ - lib/cocoapods/command/init.rb
170
171
  - lib/cocoapods/command/inter_process_communication.rb
171
172
  - lib/cocoapods/command/lib.rb
172
173
  - lib/cocoapods/command/list.rb
@@ -234,39 +235,42 @@ homepage: https://github.com/CocoaPods/CocoaPods
234
235
  licenses:
235
236
  - MIT
236
237
  metadata: {}
237
- post_install_message: "\nCHANGELOG:\n\n## 0.23.0\n\n###### Enhancements\n[CocoaPods](https://github.com/CocoaPods/CocoaPods/compare/0.22.3...0.23.0.rc1)\n•
238
+ post_install_message: "\nCHANGELOG:\n\n## 0.24.0\n\n###### Enhancements\n[CocoaPods](https://github.com/CocoaPods/CocoaPods/compare/0.22.3...0.23.0.rc1)\n•
238
239
  [cocoapods-core](https://github.com/CocoaPods/Core/compare/0.22.3...0.23.0.rc1)\n•
239
- [Xcodeproj](https://github.com/CocoaPods/Xcodeproj/compare/0.8.1...0.9.0)\n• [cocoapods-downloader](https://github.com/CocoaPods/cocoapods-downloader/compare/0.1.1...0.1.2)\n\n*
240
- Added `prepare_command` attribute to Specification DSL. The prepare command\n will
241
- replace the `pre_install` hook. The `post_install` hook has also been\n deprecated.\n
242
- \ [#1247](https://github.com/CocoaPods/CocoaPods/issues/1247)\n\n The reason we
243
- provided Ruby hooks at first, was because we wanted to offer\n the option to make
244
- any required configuration possible. By now, however, we\n have a pretty good idea
245
- of the use-cases and are therefore locking down the\n freedom that was once available.
246
- In turn, we’re adding attributes that can\n replace the most common use-cases.
247
- _(See the enhancements directly following\n this entry for more info)._\n\n The
248
- second reason we need to lock this down is because this is the last\n remaining
249
- obstacle to fully serialize specifications, which we need in order\n to move to
250
- a ‘spec push’ web-service in the future.\n\n* Added `resource_bundles` attribute
251
- to the Specification DSL. \n [#743](https://github.com/CocoaPods/CocoaPods/issues/743)\n
252
- \ [#1186](https://github.com/CocoaPods/CocoaPods/issues/1186)\n\n* Added `vendored_frameworks`
253
- attribute to the Specification DSL. \n [#809](https://github.com/CocoaPods/CocoaPods/issues/809)\n
254
- \ [#1075](https://github.com/CocoaPods/CocoaPods/issues/1075)\n\n* Added `vendored_libraries`
255
- attribute to the Specification DSL. \n [#809](https://github.com/CocoaPods/CocoaPods/issues/809)\n
256
- \ [#1075](https://github.com/CocoaPods/CocoaPods/issues/1075)\n\n* Restructured
257
- `.cocoapods` folder to contain repos in a subdirectory. \n [Ian Ynda-Hummel](https://github.com/ianyh)\n
258
- \ [#1150](https://github.com/CocoaPods/CocoaPods/issues/1150) \n\n* Improved `pod
259
- spec create` template. \n [#1223](https://github.com/CocoaPods/CocoaPods/issues/1223)\n\n*
260
- Added copy&paste-friendly dependency to `pod search`. \n [#1073](https://github.com/CocoaPods/CocoaPods/issues/1073)\n\n*
261
- Improved performance of the installation of Pods with git\n sources which specify
262
- a tag. \n [#1077](https://github.com/CocoaPods/CocoaPods/issues/1077)\n\n* Core
263
- Data `xcdatamodeld` files are now properly referenced from the Pods\n project.
264
- \ \n [#1155](https://github.com/CocoaPods/CocoaPods/issues/1155)\n\n* Removed punctuation
265
- check from the specification validations. \n [#1242](https://github.com/CocoaPods/CocoaPods/issues/1242)\n\n*
266
- Deprecated the `documentation` attribute of the Specification DSL. \n [Core#20](https://github.com/CocoaPods/Core/issues/20)\n\n######
267
- Bug Fixes\n\n* Fix copy resource script issue related to filenames with spaces.
268
- \ \n [Denis Hennessy](https://github.com/dhennessy)\n [#1231](https://github.com/CocoaPods/CocoaPods/issues/1231)
269
- \ \n\n\n\n"
240
+ [Xcodeproj](https://github.com/CocoaPods/Xcodeproj/compare/0.8.1...0.9.0)\n• [cocoapods-downloader](https://github.com/CocoaPods/cocoapods-downloader/compare/0.1.1...0.1.2)\n\n\n######
241
+ Enhancements\n\n* Added `pod init` command which generates a Podfile according to
242
+ the\n targets of the project stored in the working directory and to the templates\n
243
+ \ stored in the `~/.cocoapods/templates` folder. Tow templates are supported: \n
244
+ \ - the `Podfile.default` template for regular targets.\n - and the `Podfile.test`
245
+ template for test targets. \n \n [Ian Ynda-Hummel](https://github.com/ianyh)\n
246
+ \ [#1106](https://github.com/CocoaPods/CocoaPods/issues/1106) \n [#1045](https://github.com/CocoaPods/CocoaPods/issues/1045)
247
+ \ \n\n* CocoaPods will now leverage the [xcproj](https://github.com/0xced/xcproj)\n
248
+ \ command line tool if available in the path of the user to touch saved\n projects.
249
+ This will result in projects being serialized in the exact format\n used by Xcode
250
+ eliminating merge conflicts and other related issues. To learn\n more about how
251
+ to install xcproj see its\n [readme](https://github.com/0xced/xcproj). \n [Cédric
252
+ Luthi](https://github.com/0xced) \n [#1275](https://github.com/CocoaPods/CocoaPods/issues/1275)
253
+ \ \n \n* Rationalized and cleaned up Pods project group structure and path specification.\n\n*
254
+ Create all necessary build configurations for *Pods.xcodeproj* at the project level.
255
+ If the user’s project has more than just *Debug* and *Release* build configurations,
256
+ they may be explicitly specified in the Podfile: \n`xcodeproj 'MyApp', 'App Store'
257
+ => :release, 'Debug' => :debug, 'Release' => :release` \n If build configurations
258
+ aren’t specified in the Podfile then they will be automatically picked from the
259
+ user’s project in *Release* mode. \n These changes will ensure that the `libPods.a`
260
+ static library is not stripped for all configurations, as explained in [#1217](https://github.com/CocoaPods/CocoaPods/pull/1217).
261
+ \ \n [Cédric Luthi](https://github.com/0xced) \n [#1294](https://github.com/CocoaPods/CocoaPods/issues/1294)\n\n*
262
+ Added basic support for Bazaar repositories. \n [Fred McCann](https://github.com/fmccann)
263
+ \ \n [cocoapods-downloader#4](https://github.com/CocoaPods/cocoapods-downloader/pull/4)\n\n######
264
+ Bug Fixes\n\n* Fixed crash in `pod spec cat`.\n\n* Use the `TARGET_BUILD_DIR` environment
265
+ variable for installing resource bundles. \n [Cédric Luthi](https://github.com/0xced)
266
+ \ \n [#1268](https://github.com/CocoaPods/CocoaPods/issues/1268) \n\n* CoreData
267
+ versioned models are now properly handled respecting the contents of\n the `.xccurrentversion`
268
+ file. \n [#1288](https://github.com/CocoaPods/CocoaPods/issues/1288),\n [Xcodeproj#83](https://github.com/CocoaPods/Xcodeproj/pull/83)
269
+ \ \n [Ashton-W](https://github.com/Ashton-W)\n\n* OS X frameworks are now copied
270
+ to the Resources folder using rsync to\n properly overwrite existing files. \n
271
+ \ [Nikolaj Schumacher](https://github.com/nschum)\n [#1063](https://github.com/CocoaPods/CocoaPods/issues/1063)\n\n*
272
+ User defined build configurations are now added to the resource bundle\n targets.
273
+ \ \n [#1309](https://github.com/CocoaPods/CocoaPods/issues/1309),\n\n\n"
270
274
  rdoc_options: []
271
275
  require_paths:
272
276
  - lib