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

Instance Method Summary collapse

Class Method Details

.create_info_plist_file_with_sandbox(sandbox, path, native_target, version, platform, bundle_package_type = :fmwk, additional_entries: {}) ⇒ 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.


53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/cocoapods/installer/xcode/pods_project_generator/target_installer_helper.rb', line 53

def create_info_plist_file_with_sandbox(sandbox, path, native_target, version, platform,
                                        bundle_package_type = :fmwk, additional_entries: {})
  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)

    relative_path_string = path.relative_path_from(sandbox.root).to_s
    native_target.build_configurations.each do |c|
      c.build_settings['INFOPLIST_FILE'] = relative_path_string
    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


87
88
89
90
91
92
93
94
95
# File 'lib/cocoapods/installer/xcode/pods_project_generator/target_installer_helper.rb', line 87

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

Instance Method Details

#create_info_plist_file_with_sandbox(sandbox, path, native_target, version, platform, bundle_package_type = :fmwk, additional_entries: {}) ⇒ void (private)

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.


53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/cocoapods/installer/xcode/pods_project_generator/target_installer_helper.rb', line 53

def create_info_plist_file_with_sandbox(sandbox, path, native_target, version, platform,
                                        bundle_package_type = :fmwk, additional_entries: {})
  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)

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

#create_prefix_header(path, file_accessors, platform, native_target, project_directory) ⇒ void (private)

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


87
88
89
90
91
92
93
94
95
# File 'lib/cocoapods/installer/xcode/pods_project_generator/target_installer_helper.rb', line 87

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 (private)

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