Module: Pod::Installer::Xcode::PodsProjectGenerator::TargetInstallerHelper

Included in:
AppHostInstaller, TargetInstaller
Defined in:
lib/cocoapods/installer/xcode/pods_project_generator/target_installer_helper.rb

Class Method Summary collapse

Class Method Details

.create_info_plist_file_with_sandbox(sandbox, path, native_target, version, platform, bundle_package_type = :fmwk, additional_entries: {}, build_setting_value: nil) ⇒ void

This method returns an undefined value.

Creates the Info.plist file which sets public framework attributes

@param [Hash] additional_entries
       any additional entries to include in this Info.plist file.

Parameters:

  • sandbox (Sandbox)

    @see #sandbox The sandbox where the generated Info.plist file should be saved.

  • path (Pathname)

    the path to save the generated Info.plist file.

  • native_target (PBXNativeTarget)

    the native target to link the generated Info.plist file into.

  • version (String)

    the version to use for when generating this Info.plist file.

  • platform (Platform)

    the platform to use for when generating this Info.plist file.

  • bundle_package_type (Symbol) (defaults to: :fmwk)

    the CFBundlePackageType of the target this Info.plist file is for.

  • build_setting_value (String) (defaults to: nil)

    an optional value to set for the ‘INFOPLIST_FILE` build setting on the native target. If none is specified then the value is calculated from the Info.plist path relative to the sandbox root.



58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/cocoapods/installer/xcode/pods_project_generator/target_installer_helper.rb', line 58

def create_info_plist_file_with_sandbox(sandbox, path, native_target, version, platform,
                                        bundle_package_type = :fmwk, additional_entries: {},
                                        build_setting_value: nil)
  UI.message "- Generating Info.plist file at #{UI.path(path)}" do
    generator = Generator::InfoPlistFile.new(version, platform, bundle_package_type, additional_entries)
    update_changed_file(generator, path)

    build_setting_value ||= path.relative_path_from(sandbox.root).to_s
    native_target.build_configurations.each do |c|
      c.build_settings['INFOPLIST_FILE'] = build_setting_value
    end
  end
end

.create_prefix_header(path, file_accessors, platform, native_target, project_directory) ⇒ void

This method returns an undefined value.

Creates a prefix header file which imports ‘UIKit` or `Cocoa` according to the platform of the target. This file also include any prefix header content reported by the specification of the pods.

Parameters:

  • path (Pathname)

    the path to generate the prefix header for.

  • file_accessors (Array<Sandbox::FileAccessor>)

    the file accessors to use for this prefix header that point to a path of a prefix header.

  • platform (Platform)

    the platform to use for this prefix header.

  • native_target (PBXNativeTarget)

    the native target on which the prefix header should be configured for.

  • project_directory (Pathname)

    the directory containing the project of the target



93
94
95
96
97
98
99
100
101
# File 'lib/cocoapods/installer/xcode/pods_project_generator/target_installer_helper.rb', line 93

def create_prefix_header(path, file_accessors, platform, native_target, project_directory)
  generator = Generator::PrefixHeader.new(file_accessors, platform)
  update_changed_file(generator, path)

  relative_path = path.relative_path_from(project_directory).to_s
  native_target.build_configurations.each do |c|
    c.build_settings['GCC_PREFIX_HEADER'] = relative_path
  end
end

.update_changed_file(generator, path) ⇒ Object

Saves the content the provided path unless the path exists and the contents are exactly the same.

Parameters:

  • generator (Generator)

    the generator to use for generating the content.

  • path (Pathname)

    the pathname to save the content into.



14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/cocoapods/installer/xcode/pods_project_generator/target_installer_helper.rb', line 14

def update_changed_file(generator, path)
  if path.exist?
    contents = generator.generate.to_s
    content_stream = StringIO.new(contents)
    identical = File.open(path, 'rb') { |f| FileUtils.compare_stream(f, content_stream) }
    return if identical

    File.open(path, 'w') { |f| f.write(contents) }
  else
    path.dirname.mkpath
    generator.save_as(path)
  end
end