class StructCore::Processor::TargetMetadataComponent

Public Class Methods

new(structure, working_directory) click to toggle source
# File lib/spec/processor/target_metadata.rb, line 10
def initialize(structure, working_directory)
        super(structure, working_directory)
        @type_component = TargetTypeComponent.new(@structure, @working_directory)
        @platform_component = TargetPlatformComponent.new(@structure, @working_directory)
end

Public Instance Methods

process(target, dsl = nil) click to toggle source
# File lib/spec/processor/target_metadata.rb, line 16
def process(target, dsl = nil)
        output = nil
        output = process_xc_target target if structure == :spec
        output = process_spec_target target, dsl if structure == :xcodeproj

        output
end
process_spec_target(target, dsl) click to toggle source

@param target [StructCore::Specfile::Target] @param dsl [Xcodeproj::Project]

# File lib/spec/processor/target_metadata.rb, line 42
def process_spec_target(target, dsl)
        product_type = @type_component.process(target)

        # Target
        native_target = dsl.new(Xcodeproj::Project::Object::PBXNativeTarget)
        dsl.targets << native_target
        native_target.name = target.name
        native_target.product_name = target.name
        native_target.product_type = product_type
        native_target.build_configuration_list = dsl.new(Xcodeproj::Project::Object::XCConfigurationList)
        native_target.build_configuration_list.default_configuration_is_visible = '0'
        native_target.build_configuration_list.default_configuration_name = 'Release'

        # Product
        prefix = ''
        prefix = 'lib' if product_type == :static_library
        extension = StructCore::XC_PRODUCT_UTI_EXTENSIONS[product_type]
        product = Xcodeproj::Project::Object::FileReferencesFactory.new_reference(dsl.products_group, "#{prefix}#{target.name}.#{extension}", :built_products)
        product.include_in_index = '0'
        product.set_explicit_file_type
        native_target.product_reference = product

        # Build phases
        native_target.build_phases << dsl.new(Xcodeproj::Project::Object::PBXSourcesBuildPhase)
        native_target.build_phases << dsl.new(Xcodeproj::Project::Object::PBXFrameworksBuildPhase)

        xc_platform_name = @platform_component.process(target)

        # Monkeypatch Xcodeproj's broken implementations of methods
        native_target.define_singleton_method(:platform_name) do
                xc_platform_name
        end

        native_target
end
process_xc_target(target) click to toggle source

@param target [Xcodeproj::Project::PBXNativeTarget]

# File lib/spec/processor/target_metadata.rb, line 25
def process_xc_target(target)
        StructCore::Specfile::Target.new(
                target.name,
                @type_component.process(target),
                [],
                [],
                [],
                [],
                [],
                [],
                [],
                []
        )
end