cocoapods 1.5.3 → 1.6.0.beta.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.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +200 -0
  3. data/lib/cocoapods.rb +0 -1
  4. data/lib/cocoapods/command/init.rb +1 -1
  5. data/lib/cocoapods/command/install.rb +7 -0
  6. data/lib/cocoapods/command/lib/lint.rb +8 -1
  7. data/lib/cocoapods/command/outdated.rb +2 -7
  8. data/lib/cocoapods/command/repo/add.rb +1 -1
  9. data/lib/cocoapods/command/repo/list.rb +1 -1
  10. data/lib/cocoapods/command/repo/push.rb +17 -12
  11. data/lib/cocoapods/command/repo/remove.rb +1 -1
  12. data/lib/cocoapods/command/repo/update.rb +1 -1
  13. data/lib/cocoapods/command/setup.rb +1 -1
  14. data/lib/cocoapods/command/spec/create.rb +39 -39
  15. data/lib/cocoapods/command/spec/lint.rb +8 -1
  16. data/lib/cocoapods/config.rb +13 -2
  17. data/lib/cocoapods/downloader/cache.rb +1 -1
  18. data/lib/cocoapods/executable.rb +2 -2
  19. data/lib/cocoapods/external_sources.rb +7 -4
  20. data/lib/cocoapods/external_sources/abstract_external_source.rb +23 -13
  21. data/lib/cocoapods/gem_version.rb +1 -1
  22. data/lib/cocoapods/generator/acknowledgements/markdown.rb +6 -0
  23. data/lib/cocoapods/generator/acknowledgements/plist.rb +11 -0
  24. data/lib/cocoapods/generator/app_target_helper.rb +102 -16
  25. data/lib/cocoapods/generator/copy_resources_script.rb +6 -0
  26. data/lib/cocoapods/generator/dummy_source.rb +14 -5
  27. data/lib/cocoapods/generator/embed_frameworks_script.rb +13 -2
  28. data/lib/cocoapods/generator/header.rb +1 -1
  29. data/lib/cocoapods/generator/info_plist_file.rb +12 -4
  30. data/lib/cocoapods/generator/prefix_header.rb +2 -2
  31. data/lib/cocoapods/hooks_manager.rb +28 -17
  32. data/lib/cocoapods/installer.rb +103 -42
  33. data/lib/cocoapods/installer/analyzer.rb +362 -277
  34. data/lib/cocoapods/installer/analyzer/analysis_result.rb +52 -22
  35. data/lib/cocoapods/installer/analyzer/locking_dependency_analyzer.rb +9 -6
  36. data/lib/cocoapods/installer/analyzer/pod_variant.rb +4 -5
  37. data/lib/cocoapods/installer/analyzer/sandbox_analyzer.rb +3 -14
  38. data/lib/cocoapods/installer/analyzer/specs_state.rb +28 -4
  39. data/lib/cocoapods/installer/analyzer/target_inspection_result.rb +24 -16
  40. data/lib/cocoapods/installer/analyzer/target_inspector.rb +17 -11
  41. data/lib/cocoapods/installer/pod_source_installer.rb +31 -43
  42. data/lib/cocoapods/installer/post_install_hooks_context.rb +71 -46
  43. data/lib/cocoapods/installer/pre_install_hooks_context.rb +22 -13
  44. data/lib/cocoapods/installer/source_provider_hooks_context.rb +3 -1
  45. data/lib/cocoapods/installer/user_project_integrator.rb +0 -2
  46. data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +38 -28
  47. data/lib/cocoapods/installer/user_project_integrator/target_integrator/xcconfig_integrator.rb +44 -11
  48. data/lib/cocoapods/installer/xcode/pods_project_generator.rb +129 -119
  49. data/lib/cocoapods/installer/xcode/pods_project_generator/aggregate_target_installer.rb +25 -16
  50. data/lib/cocoapods/installer/xcode/pods_project_generator/app_host_installer.rb +95 -0
  51. data/lib/cocoapods/installer/xcode/pods_project_generator/file_references_installer.rb +12 -45
  52. data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb +277 -169
  53. data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_integrator.rb +31 -24
  54. data/lib/cocoapods/installer/xcode/pods_project_generator/target_installation_result.rb +93 -0
  55. data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer.rb +60 -69
  56. data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer_helper.rb +72 -0
  57. data/lib/cocoapods/installer/xcode/target_validator.rb +15 -9
  58. data/lib/cocoapods/project.rb +14 -14
  59. data/lib/cocoapods/resolver.rb +38 -50
  60. data/lib/cocoapods/sandbox.rb +22 -38
  61. data/lib/cocoapods/sandbox/file_accessor.rb +11 -6
  62. data/lib/cocoapods/sandbox/headers_store.rb +9 -8
  63. data/lib/cocoapods/sandbox/path_list.rb +5 -8
  64. data/lib/cocoapods/sources_manager.rb +1 -1
  65. data/lib/cocoapods/target.rb +92 -37
  66. data/lib/cocoapods/target/aggregate_target.rb +140 -84
  67. data/lib/cocoapods/target/build_settings.rb +1076 -0
  68. data/lib/cocoapods/target/pod_target.rb +198 -294
  69. data/lib/cocoapods/user_interface.rb +5 -0
  70. data/lib/cocoapods/validator.rb +133 -41
  71. metadata +18 -18
  72. data/lib/cocoapods/generator/xcconfig.rb +0 -13
  73. data/lib/cocoapods/generator/xcconfig/aggregate_xcconfig.rb +0 -260
  74. data/lib/cocoapods/generator/xcconfig/pod_xcconfig.rb +0 -87
  75. data/lib/cocoapods/generator/xcconfig/xcconfig_helper.rb +0 -558
@@ -23,9 +23,13 @@ module Pod
23
23
  ['--no-clean', 'Lint leaves the build directory intact for inspection'],
24
24
  ['--fail-fast', 'Lint stops on the first failing platform or subspec'],
25
25
  ['--use-libraries', 'Lint uses static libraries to install the spec'],
26
+ ['--use-modular-headers', 'Lint uses modular headers during installation'],
26
27
  ['--sources=https://github.com/artsy/Specs,master', 'The sources from which to pull dependent pods ' \
27
28
  '(defaults to https://github.com/CocoaPods/Specs.git). ' \
28
29
  'Multiple sources must be comma-delimited.'],
30
+ ['--platforms=ios,macos', 'Lint against specific platforms' \
31
+ '(defaults to all platforms supported by the podspec).' \
32
+ 'Multiple platforms must be comma-delimited'],
29
33
  ['--private', 'Lint skips checks that apply only to public specs'],
30
34
  ['--swift-version=VERSION', 'The SWIFT_VERSION that should be used to lint the spec. ' \
31
35
  'This takes precedence over a .swift-version file.'],
@@ -42,7 +46,9 @@ module Pod
42
46
  @subspecs = argv.flag?('subspecs', true)
43
47
  @only_subspec = argv.option('subspec')
44
48
  @use_frameworks = !argv.flag?('use-libraries')
49
+ @use_modular_headers = argv.flag?('use-modular-headers')
45
50
  @source_urls = argv.option('sources', 'https://github.com/CocoaPods/Specs.git').split(',')
51
+ @platforms = argv.option('platforms', '').split(',')
46
52
  @private = argv.flag?('private', false)
47
53
  @swift_version = argv.option('swift-version', nil)
48
54
  @skip_import_validation = argv.flag?('skip-import-validation', false)
@@ -55,7 +61,7 @@ module Pod
55
61
  UI.puts
56
62
  failure_reasons = []
57
63
  podspecs_to_lint.each do |podspec|
58
- validator = Validator.new(podspec, @source_urls)
64
+ validator = Validator.new(podspec, @source_urls, @platforms)
59
65
  validator.quick = @quick
60
66
  validator.no_clean = !@clean
61
67
  validator.fail_fast = @fail_fast
@@ -63,6 +69,7 @@ module Pod
63
69
  validator.no_subspecs = !@subspecs || @only_subspec
64
70
  validator.only_subspec = @only_subspec
65
71
  validator.use_frameworks = @use_frameworks
72
+ validator.use_modular_headers = @use_modular_headers
66
73
  validator.ignore_public_only_results = @private
67
74
  validator.swift_version = @swift_version
68
75
  validator.skip_import_validation = @skip_import_validation
@@ -100,11 +100,19 @@ module Pod
100
100
  def initialize(use_user_settings = true)
101
101
  configure_with(DEFAULTS)
102
102
 
103
+ unless ENV['CP_HOME_DIR'].nil?
104
+ @cache_root = home_dir + 'cache'
105
+ end
106
+
103
107
  if use_user_settings && user_settings_file.exist?
104
108
  require 'yaml'
105
109
  user_settings = YAML.load_file(user_settings_file)
106
110
  configure_with(user_settings)
107
111
  end
112
+
113
+ unless ENV['CP_CACHE_DIR'].nil?
114
+ @cache_root = Pathname.new(ENV['CP_CACHE_DIR']).expand_path
115
+ end
108
116
  end
109
117
 
110
118
  def verbose
@@ -127,7 +135,7 @@ module Pod
127
135
  # @return [Pathname] the directory where the CocoaPods sources are stored.
128
136
  #
129
137
  def repos_dir
130
- @repos_dir ||= Pathname.new(ENV['CP_REPOS_DIR'] || '~/.cocoapods/repos').expand_path
138
+ @repos_dir ||= Pathname.new(ENV['CP_REPOS_DIR'] || (home_dir + 'repos')).expand_path
131
139
  end
132
140
 
133
141
  attr_writer :repos_dir
@@ -140,7 +148,7 @@ module Pod
140
148
  # @return [Pathname] the directory where the CocoaPods templates are stored.
141
149
  #
142
150
  def templates_dir
143
- @templates_dir ||= Pathname.new(ENV['CP_TEMPLATES_DIR'] || '~/.cocoapods/templates').expand_path
151
+ @templates_dir ||= Pathname.new(ENV['CP_TEMPLATES_DIR'] || (home_dir + 'templates')).expand_path
144
152
  end
145
153
 
146
154
  # @return [Pathname] the root of the CocoaPods installation where the
@@ -268,6 +276,9 @@ module Pod
268
276
  def configure_with(values_by_key)
269
277
  return unless values_by_key
270
278
  values_by_key.each do |key, value|
279
+ if key == :cache_root
280
+ value = Pathname.new(value).expand_path
281
+ end
271
282
  instance_variable_set("@#{key}", value)
272
283
  end
273
284
  end
@@ -180,7 +180,7 @@ module Pod
180
180
  tmpdir = Pathname(Dir.mktmpdir)
181
181
  blk.call(tmpdir)
182
182
  ensure
183
- FileUtils.remove_entry(tmpdir) if tmpdir && tmpdir.exist?
183
+ FileUtils.remove_entry(tmpdir, :force => true) if tmpdir && tmpdir.exist?
184
184
  end
185
185
 
186
186
  # Copies the `source` directory to `destination`, cleaning the directory
@@ -191,11 +191,11 @@ module Pod
191
191
  class Indenter < ::Array
192
192
  # @return [Fixnum] The indentation level of the UI.
193
193
  #
194
- attr_accessor :indent
194
+ attr_reader :indent
195
195
 
196
196
  # @return [IO] the {IO} to which the output should be printed.
197
197
  #
198
- attr_accessor :io
198
+ attr_reader :io
199
199
 
200
200
  # Init a new Indenter
201
201
  #
@@ -16,18 +16,21 @@ module Pod
16
16
  # @param [String] podfile_path
17
17
  # @see AbstractExternalSource#podfile_path
18
18
  #
19
+ # @param [Boolean] can_cache
20
+ # @see AbstractExternalSource#can_cache
21
+ #
19
22
  # @return [AbstractExternalSource] an initialized instance of the concrete
20
23
  # external source class associated with the option specified in the
21
24
  # hash.
22
25
  #
23
- def self.from_dependency(dependency, podfile_path)
24
- from_params(dependency.external_source, dependency, podfile_path)
26
+ def self.from_dependency(dependency, podfile_path, can_cache)
27
+ from_params(dependency.external_source, dependency, podfile_path, can_cache)
25
28
  end
26
29
 
27
- def self.from_params(params, dependency, podfile_path)
30
+ def self.from_params(params, dependency, podfile_path, can_cache)
28
31
  name = dependency.root_name
29
32
  if klass = concrete_class_from_params(params)
30
- klass.new(name, params, podfile_path)
33
+ klass.new(name, params, podfile_path, can_cache)
31
34
  else
32
35
  msg = "Unknown external source parameters for `#{name}`: `#{params}`"
33
36
  raise Informative, msg
@@ -19,20 +19,21 @@ module Pod
19
19
 
20
20
  # @return [Boolean] Whether the source is allowed to touch the cache.
21
21
  #
22
- attr_accessor :can_cache
22
+ attr_reader :can_cache
23
23
  alias_method :can_cache?, :can_cache
24
24
 
25
25
  # Initialize a new instance
26
26
  #
27
- # @param [String] name @see name
28
- # @param [Hash] params @see params
29
- # @param [String] podfile_path @see podfile_path
27
+ # @param [String] name @see #name
28
+ # @param [Hash] params @see #params
29
+ # @param [String] podfile_path @see #podfile_path
30
+ # @param [Boolean] can_cache @see #can_cache
30
31
  #
31
- def initialize(name, params, podfile_path)
32
+ def initialize(name, params, podfile_path, can_cache = true)
32
33
  @name = name
33
34
  @params = params
34
35
  @podfile_path = podfile_path
35
- @can_cache = true
36
+ @can_cache = can_cache
36
37
  end
37
38
 
38
39
  # @return [Bool] whether an external source source is equal to another
@@ -115,13 +116,17 @@ module Pod
115
116
  download_result = Downloader.download(download_request, target, :can_cache => can_cache)
116
117
  rescue Pod::DSLError => e
117
118
  raise Informative, "Failed to load '#{name}' podspec: #{e.message}"
118
- rescue => _
119
- raise Informative, "Failed to download '#{name}'."
119
+ rescue => e
120
+ raise Informative, "Failed to download '#{name}': #{e.message}"
120
121
  end
121
- spec = download_result.spec
122
122
 
123
+ spec = download_result.spec
123
124
  raise Informative, "Unable to find a specification for '#{name}'." unless spec
124
125
 
126
+ # since the podspec might be cleaned, we want the checksum to refer
127
+ # to the json in the sandbox
128
+ spec.defined_in_file = nil
129
+
125
130
  store_podspec(sandbox, spec)
126
131
  sandbox.store_pre_downloaded_pod(name)
127
132
  sandbox.store_checkout_source(name, download_result.checkout_options)
@@ -160,7 +165,7 @@ module Pod
160
165
  when String
161
166
  path = "#{name}.podspec"
162
167
  path << '.json' if json
163
- Specification.from_string(spec, path)
168
+ Specification.from_string(spec, path).tap { |s| s.defined_in_file = nil }
164
169
  when Specification
165
170
  spec.dup
166
171
  else
@@ -169,12 +174,15 @@ module Pod
169
174
  rescue Pod::DSLError => e
170
175
  raise Informative, "Failed to load '#{name}' podspec: #{e.message}"
171
176
  end
172
- spec.defined_in_file = nil
177
+
173
178
  validate_podspec(spec)
174
- sandbox.store_podspec(name, spec.to_pretty_json, true, true)
179
+ sandbox.store_podspec(name, spec, true, true)
175
180
  end
176
181
 
177
182
  def validate_podspec(podspec)
183
+ defined_in_file = podspec.defined_in_file
184
+ podspec.defined_in_file = nil
185
+
178
186
  validator = validator_for_podspec(podspec)
179
187
  validator.quick = true
180
188
  validator.allow_warnings = true
@@ -185,10 +193,12 @@ module Pod
185
193
  unless validator.validated?
186
194
  raise Informative, "The `#{name}` pod failed to validate due to #{validator.failure_reason}:\n#{validator.results_message}"
187
195
  end
196
+ ensure
197
+ podspec.defined_in_file = defined_in_file
188
198
  end
189
199
 
190
200
  def validator_for_podspec(podspec)
191
- Validator.new(podspec, [])
201
+ Validator.new(podspec, [], [])
192
202
  end
193
203
  end
194
204
  end
@@ -1,5 +1,5 @@
1
1
  module Pod
2
2
  # The version of the CocoaPods command line tool.
3
3
  #
4
- VERSION = '1.5.3'.freeze unless defined? Pod::VERSION
4
+ VERSION = '1.6.0.beta.1'.freeze unless defined? Pod::VERSION
5
5
  end
@@ -11,6 +11,12 @@ module Pod
11
11
  file.close
12
12
  end
13
13
 
14
+ # @return [String] The contents of the acknowledgements in Markdown format.
15
+ #
16
+ def generate
17
+ licenses
18
+ end
19
+
14
20
  def title_from_string(string, level)
15
21
  unless string.empty?
16
22
  '#' * level << " #{string}"
@@ -1,3 +1,5 @@
1
+ require 'stringio'
2
+
1
3
  module Pod
2
4
  module Generator
3
5
  class Plist < Acknowledgements
@@ -9,6 +11,15 @@ module Pod
9
11
  Xcodeproj::Plist.write_to_path(plist, path)
10
12
  end
11
13
 
14
+ # @return [String] The contents of the plist
15
+ #
16
+ def generate
17
+ plist = Nanaimo::Plist.new(plist, :xml)
18
+ contents = StringIO.new
19
+ Nanaimo::Writer::XMLWriter.new(plist, :pretty => true, :output => contents, :strict => false).write
20
+ contents.string
21
+ end
22
+
12
23
  def plist
13
24
  {
14
25
  :Title => plist_title,
@@ -38,26 +38,46 @@ module Pod
38
38
  # @param [Symbol] platform
39
39
  # the platform of the target. Can be `:ios` or `:osx`, etc.
40
40
  #
41
- # @param [Boolean] use_frameworks
42
- # whether to use frameworks or not when generating the contents of the import file.
43
- #
44
41
  # @param [String] name
45
42
  # The name to use for the target, defaults to 'App'.
46
43
  #
47
44
  # @return [Array<PBXBuildFile>] the created build file references.
48
45
  #
49
- def self.add_app_project_import(project, target, pod_target, platform, use_frameworks, name = 'App')
50
- source_file = AppTargetHelper.create_app_import_source_file(project, pod_target, platform, use_frameworks, name)
51
- source_file_ref = project.new_group(name, name).new_file(source_file)
46
+ def self.add_app_project_import(project, target, pod_target, platform, name = 'App')
47
+ source_file = AppTargetHelper.create_app_import_source_file(project, pod_target, platform, name)
48
+ group = project[name] || project.new_group(name, name)
49
+ source_file_ref = group.new_file(source_file)
52
50
  target.add_file_references([source_file_ref])
53
51
  end
54
52
 
55
- # Creates and links a default app host 'main.m' file.
53
+ # Creates and links an empty Swift file for the given target.
56
54
  #
57
55
  # @param [Project] project
58
56
  # the Xcodeproj to generate the target into.
59
57
  #
60
58
  # @param [PBXNativeTarget] target
59
+ # the native target to link the generated import file into.
60
+ #
61
+ # @param [String] name
62
+ # The name to use for the target, defaults to 'App'.
63
+ #
64
+ # @return [Array<PBXBuildFile>] the created build file references.
65
+ #
66
+ def self.add_empty_swift_file(project, target, name = 'App')
67
+ swift_file = project.path.dirname.+("#{name}/dummy.swift")
68
+ swift_file.parent.mkpath
69
+ File.write(swift_file, '')
70
+ group = project[name] || project.new_group(name, name)
71
+ swift_file_ref = group.new_file(swift_file)
72
+ target.add_file_references([swift_file_ref])
73
+ end
74
+
75
+ # Creates and links a default app host 'main.m' file.
76
+ #
77
+ # @param [Project] project
78
+ # the Xcodeproj to generate the main file into.
79
+ #
80
+ # @param [PBXNativeTarget] target
61
81
  # the native target to link the generated main file into.
62
82
  #
63
83
  # @param [Symbol] platform
@@ -70,10 +90,34 @@ module Pod
70
90
  #
71
91
  def self.add_app_host_main_file(project, target, platform, name = 'App')
72
92
  source_file = AppTargetHelper.create_app_host_main_file(project, platform, name)
73
- source_file_ref = project.new_group(name, name).new_file(source_file)
93
+ group = project[name] || project.new_group(name, name)
94
+ source_file_ref = group.new_file(source_file)
74
95
  target.add_file_references([source_file_ref])
75
96
  end
76
97
 
98
+ # Creates a default launchscreen storyboard.
99
+ #
100
+ # @param [Project] project
101
+ # the Xcodeproj to generate the launchscreen storyboard into.
102
+ #
103
+ # @param [PBXNativeTarget] target
104
+ # the native target to link the generated launchscreen storyboard into.
105
+ #
106
+ # @param [Symbol] platform
107
+ # the platform of the target. Can be `:ios` or `:osx`, etc.
108
+ #
109
+ # @param [String] name
110
+ # The name to use for the target, defaults to 'App'.
111
+ #
112
+ # @return [PBXFileReference] the created file reference of the launchscreen storyboard.
113
+ #
114
+ def self.add_launchscreen_storyboard(project, target, name = 'App')
115
+ launch_storyboard_file = AppTargetHelper.create_launchscreen_storyboard_file(project, name)
116
+ group = project[name] || project.new_group(name, name)
117
+ launch_storyboard_ref = group.new_file(launch_storyboard_file)
118
+ target.resources_build_phase.add_file_reference(launch_storyboard_ref)
119
+ end
120
+
77
121
  # Adds the xctest framework search paths into the given target.
78
122
  #
79
123
  # @param [PBXNativeTarget] target
@@ -116,26 +160,23 @@ module Pod
116
160
  # @param [Symbol] platform
117
161
  # the platform of the target. Can be `:ios` or `:osx`, etc.
118
162
  #
119
- # @param [Boolean] use_frameworks
120
- # whether to use frameworks or not when generating the contents of the import file.
121
- #
122
163
  # @param [String] name
123
164
  # The name of the folder to use and save the generated main file.
124
165
  #
125
166
  # @return [Pathname] the new source file that was generated.
126
167
  #
127
- def self.create_app_import_source_file(project, pod_target, platform, use_frameworks, name = 'App')
168
+ def self.create_app_import_source_file(project, pod_target, platform, name = 'App')
128
169
  language = pod_target.uses_swift? ? :swift : :objc
129
170
 
130
171
  if language == :swift
131
172
  source_file = project.path.dirname.+("#{name}/main.swift")
132
173
  source_file.parent.mkpath
133
- import_statement = use_frameworks && pod_target.should_build? ? "import #{pod_target.product_module_name}\n" : ''
174
+ import_statement = pod_target.should_build? && pod_target.defines_module? ? "import #{pod_target.product_module_name}\n" : ''
134
175
  source_file.open('w') { |f| f << import_statement }
135
176
  else
136
177
  source_file = project.path.dirname.+("#{name}/main.m")
137
178
  source_file.parent.mkpath
138
- import_statement = if use_frameworks && pod_target.should_build?
179
+ import_statement = if pod_target.should_build? && pod_target.defines_module?
139
180
  "@import #{pod_target.product_module_name};\n"
140
181
  else
141
182
  header_name = "#{pod_target.product_module_name}/#{pod_target.product_module_name}.h"
@@ -155,6 +196,23 @@ module Pod
155
196
  source_file
156
197
  end
157
198
 
199
+ # Creates a default launchscreen storyboard file.
200
+ #
201
+ # @param [Project] project
202
+ # the Xcodeproj to generate the launchscreen storyboard into.
203
+ #
204
+ # @param [String] name
205
+ # The name of the folder to use and save the generated launchscreen storyboard file.
206
+ #
207
+ # @return [Pathname] the new launchscreen storyboard file that was generated.
208
+ #
209
+ def self.create_launchscreen_storyboard_file(project, name = 'App')
210
+ launch_storyboard_file = project.path.dirname.+("#{name}/LaunchScreen.storyboard")
211
+ launch_storyboard_file.parent.mkpath
212
+ File.write(launch_storyboard_file, LAUNCHSCREEN_STORYBOARD_CONTENTS)
213
+ launch_storyboard_file
214
+ end
215
+
158
216
  # Creates a default app host 'main.m' file.
159
217
  #
160
218
  # @param [Project] project
@@ -176,7 +234,7 @@ module Pod
176
234
  when :ios, :tvos
177
235
  f << IOS_APP_HOST_MAIN_CONTENTS
178
236
  when :osx
179
- f << MACOS_APP_APP_HOST_MAIN_CONTENTS
237
+ f << MACOS_APP_HOST_MAIN_CONTENTS
180
238
  end
181
239
  end
182
240
  source_file
@@ -215,13 +273,41 @@ int main(int argc, char *argv[])
215
273
  }
216
274
  EOS
217
275
 
218
- MACOS_APP_APP_HOST_MAIN_CONTENTS = <<EOS.freeze
276
+ MACOS_APP_HOST_MAIN_CONTENTS = <<EOS.freeze
219
277
  #import <Cocoa/Cocoa.h>
220
278
 
221
279
  int main(int argc, const char * argv[]) {
222
280
  return NSApplicationMain(argc, argv);
223
281
  }
224
282
  EOS
283
+
284
+ LAUNCHSCREEN_STORYBOARD_CONTENTS = <<-XML.strip_heredoc.freeze
285
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
286
+ <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" systemVersion="17A277" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
287
+ <dependencies>
288
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
289
+ <capability name="Safe area layout guides" minToolsVersion="9.0"/>
290
+ <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
291
+ </dependencies>
292
+ <scenes>
293
+ <!--View Controller-->
294
+ <scene sceneID="EHf-IW-A2E">
295
+ <objects>
296
+ <viewController id="01J-lp-oVM" sceneMemberID="viewController">
297
+ <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
298
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
299
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
300
+ <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
301
+ <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
302
+ </view>
303
+ </viewController>
304
+ <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
305
+ </objects>
306
+ <point key="canvasLocation" x="53" y="375"/>
307
+ </scene>
308
+ </scenes>
309
+ </document>
310
+ XML
225
311
  end
226
312
  end
227
313
  end