class StructCore::Processor::TargetReferencesComponent

Public Class Methods

new( structure, working_directory, system_ref_component = nil, system_lib_ref_component = nil, local_ref_component = nil, local_lib_ref_component = nil, subproj_ref_component = nil, target_ref_component = nil, platform_component = nil ) click to toggle source
# File lib/spec/processor/target_references.rb, line 14
def initialize(
        structure,
        working_directory,
        system_ref_component = nil,
        system_lib_ref_component = nil,
        local_ref_component = nil,
        local_lib_ref_component = nil,
        subproj_ref_component = nil,
        target_ref_component = nil,
        platform_component = nil
)
        super(structure, working_directory)
        @system_ref_component = system_ref_component
        @system_lib_ref_component = system_lib_ref_component
        @local_ref_component = local_ref_component
        @local_lib_ref_component = local_lib_ref_component
        @subproj_ref_component = subproj_ref_component
        @target_ref_component = target_ref_component
        @platform_component = platform_component

        @system_ref_component ||= TargetSystemFrameworkReferenceComponent.new(@structure, @working_directory)
        @system_lib_ref_component ||= TargetSystemLibraryReferenceComponent.new(@structure, @working_directory)
        @local_ref_component ||= TargetLocalFrameworkReferenceComponent.new(@structure, @working_directory)
        @local_lib_ref_component ||= TargetLocalLibraryReferenceComponent.new(@structure, @working_directory)
        @subproj_ref_component ||= TargetFrameworkReferenceComponent.new(@structure, @working_directory)
        @target_ref_component ||= TargetTargetReferenceComponent.new(@structure, @working_directory)
        @platform_component ||= TargetPlatformComponent.new(@structure, @working_directory)
end

Public Instance Methods

process(target, target_dsl = nil, dsl = nil) click to toggle source
# File lib/spec/processor/target_references.rb, line 43
def process(target, target_dsl = nil, dsl = nil)
        output = []

        output = process_xc_refs target if structure == :spec
        output = process_spec_refs target, target_dsl, dsl if structure == :xcodeproj && !target_dsl.nil? && !dsl.nil?

        output
end
process_spec_refs(target, target_dsl, dsl) click to toggle source

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

# File lib/spec/processor/target_references.rb, line 79
def process_spec_refs(target, target_dsl, dsl)
        framework_group = dsl.frameworks_group.groups.find { |group| group.display_name == '$local' }
        framework_group = dsl.frameworks_group.new_group '$local', nil, '<group>' if framework_group.nil?

        # The 'Embed Frameworks' phase is missing by default from the Xcodeproj template, so we have to add it.
        embed_phase = target_dsl.build_phases.find { |b| b.is_a?(Xcodeproj::Project::Object::PBXCopyFilesBuildPhase) && b.name == 'Embed Frameworks' }
        if embed_phase.nil?
                embed_phase = dsl.new(Xcodeproj::Project::Object::PBXCopyFilesBuildPhase)
                embed_phase.name = 'Embed Frameworks'
                embed_phase.symbol_dst_subfolder_spec = :frameworks
                target_dsl.build_phases.insert(target_dsl.build_phases.count, embed_phase)
        end

        core_framework = StructCore::XC_PLATFORM_CORE_SYSTEM_FRAMEWORK_MAP[@platform_component.process_spec_target(target)]
        target_dsl.add_system_framework(core_framework) unless core_framework.nil?

        target.references.each { |ref|
                @system_ref_component.process ref, target_dsl, dsl.frameworks_group if ref.is_a?(StructCore::Specfile::Target::SystemFrameworkReference)
                @system_lib_ref_component.process ref, target_dsl, dsl.frameworks_group if ref.is_a?(StructCore::Specfile::Target::SystemLibraryReference)
                @local_ref_component.process ref, target_dsl, framework_group, embed_phase if ref.is_a?(StructCore::Specfile::Target::LocalFrameworkReference)
                @local_lib_ref_component.process ref, target_dsl, framework_group if ref.is_a?(StructCore::Specfile::Target::LocalLibraryReference)
                @subproj_ref_component.process ref, target, target_dsl, framework_group if ref.is_a?(StructCore::Specfile::Target::FrameworkReference)
                @target_ref_component.process ref, target_dsl, dsl, dsl.frameworks_group, embed_phase if ref.is_a?(StructCore::Specfile::Target::TargetReference)
        }
end
process_xc_refs(target) click to toggle source

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

# File lib/spec/processor/target_references.rb, line 53
def process_xc_refs(target)
        refs = target.frameworks_build_phase.files.map { |f|
                if f.file_ref.source_tree == 'SDKROOT' || f.file_ref.source_tree == 'DEVELOPER_DIR'
                        if f.file_ref.path.include? 'System/Library/Frameworks'
                                @system_ref_component.process f.file_ref
                        elsif f.file_ref.path.include? 'usr/lib'
                                @system_lib_ref_component.process f.file_ref
                        else
                                next nil
                        end
                elsif f.file_ref.path.end_with? '.framework'
                        @local_ref_component.process f.file_ref
                else
                        @local_lib_ref_component.process f.file_ref
                end
        }.compact

        refs.unshift(*target.dependencies.map { |d|
                next nil if d.target.nil?
                @target_ref_component.process d.target
        }.compact)
end