class StructCore::Processor::TargetSourceComponent

Public Class Methods

new(structure, working_directory) click to toggle source
# File lib/spec/processor/target_source.rb, line 9
def initialize(structure, working_directory)
        super(structure, working_directory)
end

Public Instance Methods

add_source_reference(file, target_dsl) click to toggle source
# File lib/spec/processor/target_source.rb, line 56
def add_source_reference(file, target_dsl)
        if file.end_with? '.framework'
                framework_group = target_dsl.project.frameworks_group.groups.find { |group| group.display_name == '$local' }
                framework_group = target_dsl.project.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 = target_dsl.project.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

                framework = framework_group.new_file file
                (embed_phase.add_file_reference framework).settings = { 'ATTRIBUTES' => %w(CodeSignOnCopy RemoveHeadersOnCopy) }
                target_dsl.frameworks_build_phase.add_file_reference framework
        elsif file.end_with? '.a'
                target_dsl.frameworks_build_phase.add_file_reference file
        end

        nil
end
process(source, target_dsl = nil, group_dsl = nil, sources_cache = nil) click to toggle source
# File lib/spec/processor/target_source.rb, line 13
def process(source, target_dsl = nil, group_dsl = nil, sources_cache = nil)
        output = nil

        output = process_xc_source source if structure == :spec
        output = process_spec_source source, target_dsl, group_dsl, sources_cache || TargetSourcesCache.new if structure == :xcodeproj && !target_dsl.nil? && !group_dsl.nil?

        output
end
process_spec_source(source, target_dsl, group_dsl, sources_cache) click to toggle source

@param source [String] @param target_dsl [Xcodeproj::Project::Object::PBXNativeTarget] @param group_dsl [Xcodeproj::Project::Object::PBXGroup]

# File lib/spec/processor/target_source.rb, line 33
def process_spec_source(source, target_dsl, group_dsl, sources_cache)
        file = source.sub(@working_directory, '')
        file = file.slice(1, file.length) if file.start_with? '/'

        return add_source_reference(file, target_dsl) if file.end_with?('.framework', '.a')
        native_file = sources_cache.ref source, file, group_dsl

        build_file = nil
        if file.end_with? '.swift', '.m', '.mm', '.c', '.cpp', '.cxx'
                target_dsl.source_build_phase.files_references << native_file
                build_file = target_dsl.add_file_references([native_file]).first
        elsif target_dsl.product_reference.path.end_with?('.framework') && file.end_with?('.h')
                header = target_dsl.headers_build_phase.add_file_reference native_file, true
                header.settings = { 'ATTRIBUTES' => %w(Public) }
        elsif file.end_with? '.entitlements'
                return
        else
                target_dsl.add_resources [native_file]
        end

        build_file || native_file
end
process_xc_source(source) click to toggle source

@param source [Xcodeproj::Project::Object::PBXFileReference]

# File lib/spec/processor/target_source.rb, line 23
def process_xc_source(source)
        path = source.real_path.to_s.sub(@working_directory, '')
        path = path.slice(1, path.length) if path.start_with? '/'

        path
end