class XCApp::ProjectCreator

Constants

SUPPORTED_LANGUAGES
TEMPLATES_DIR_NAME

Public Class Methods

new() click to toggle source
# File lib/xcapp/project_creator.rb, line 19
def initialize
        @templates_folder = File.expand_path('../../' + TEMPLATES_DIR_NAME, __FILE__)
end

Public Instance Methods

add_folder_files_to_project_group(folder, group) click to toggle source
# File lib/xcapp/project_creator.rb, line 80
def add_folder_files_to_project_group folder, group
        Dir.entries(folder).select { |file| !(['.', '..'].include? file) }.map { |file| group.new_file file }
end
add_references_to_project_group(project_folder, project_group) click to toggle source
# File lib/xcapp/project_creator.rb, line 76
def add_references_to_project_group project_folder, project_group
        add_folder_files_to_project_group project_folder, project_group
end
copy_template_app_files_to_project(project, project_name, path, language) click to toggle source
# File lib/xcapp/project_creator.rb, line 44
def copy_template_app_files_to_project project, project_name, path, language
        app_group  = project.new_group project_name, project_name
        dest_folder = File.join(path, project_name)

        copy_template_files_to_project :common, :app, dest_folder
        copy_template_files_to_project language, :app, dest_folder

        add_references_to_project_group dest_folder, app_group
end
copy_template_files(template_source_folder, dest_folder) click to toggle source
# File lib/xcapp/project_creator.rb, line 72
def copy_template_files template_source_folder, dest_folder
        FileUtils.copy_entry template_source_folder, dest_folder, false, false, true
end
copy_template_files_to_project(language, type, dest_folder) click to toggle source
# File lib/xcapp/project_creator.rb, line 64
def copy_template_files_to_project language, type, dest_folder
        raise 'Type is not valid. Available types: :app, :tests.' unless [:app, :tests].include? type
        raise 'Language must be :objc or :swift' unless [:common, :objc, :swift].include? language

        source_folder = "#{@templates_folder}/#{language.to_s}/#{type.to_s}"
        copy_template_files source_folder, dest_folder
end
copy_template_tests_files_to_project(project, project_name, path, language) click to toggle source
# File lib/xcapp/project_creator.rb, line 54
def copy_template_tests_files_to_project project, project_name, path, language
        tests_group = project.new_group "#{project_name}Tests", "#{project_name}Tests"
        dest_folder = File.join(path, "#{project_name}Tests")

        copy_template_files_to_project :common, :tests, dest_folder
        copy_template_files_to_project language, :tests, dest_folder

        add_references_to_project_group dest_folder, tests_group
end
create_app_target(project, project_name, language, files) click to toggle source
# File lib/xcapp/project_creator.rb, line 84
def create_app_target project, project_name, language, files
        files = files.reject { |file| file.path == "Info.plist" } # Skips Info.plist
        create_project_target project, project_name, :application, language, files
end
create_default_build_configurations(project) click to toggle source
# File lib/xcapp/project_creator.rb, line 100
def create_default_build_configurations project
        project.add_build_configuration 'Staging', :release
end
create_default_scheme(project_path, project_name, app_target, test_target) click to toggle source
# File lib/xcapp/project_creator.rb, line 112
def create_default_scheme project_path, project_name, app_target, test_target
        default_scheme = Xcodeproj::XCScheme.new

        default_scheme.add_build_target  app_target
        default_scheme.add_test_target   test_target
        default_scheme.set_launch_target app_target

        default_scheme.save_as project_path, project_name
end
create_project(name, path, bundle_identifier, language) click to toggle source
# File lib/xcapp/project_creator.rb, line 23
def create_project name, path, bundle_identifier, language
        raise 'Language must be :objc or :swift' unless ProjectCreator::SUPPORTED_LANGUAGES.include? language

        project_path = File.join(path, "#{name}.xcodeproj")
        project = Xcodeproj::Project.new     project_path

        app_files   = copy_template_app_files_to_project   project, name, path, language
        tests_files = copy_template_tests_files_to_project project, name, path, language

        app_target  = create_app_target  project, name, language, app_files
        test_target = create_test_target project, name, language, tests_files

        create_default_build_configurations project

        set_default_build_settings project, name, bundle_identifier

        project.save

        create_default_scheme project_path, name, app_target, test_target
end
create_project_target(project, target_name, target_type, language, files) click to toggle source
# File lib/xcapp/project_creator.rb, line 93
def create_project_target project, target_name, target_type, language, files
        target = project.new_target target_type, target_name, :ios, nil, nil, language
        target.add_file_references files

        target
end
create_test_target(project, project_name, language, files) click to toggle source
# File lib/xcapp/project_creator.rb, line 89
def create_test_target project, project_name, language, files
        create_project_target project, "#{project_name}Tests", :unit_test_bundle, language, files
end
set_default_build_settings(project, project_name, bundle_identifier) click to toggle source
# File lib/xcapp/project_creator.rb, line 104
def set_default_build_settings project, project_name, bundle_identifier
        project.set_common_build_setting 'PRODUCT_BUNDLE_IDENTIFIER', bundle_identifier
        project.set_common_build_setting 'EXECUTABLE_NAME', project_name
        project.set_common_build_setting 'VERSIONING_SYSTEM', 'apple-generic'
        project.set_common_build_setting 'CURRENT_PROJECT_VERSION', '1'
        project.set_common_build_setting 'INFOPLIST_FILE', "$(SRCROOT)/#{project_name}/Info.plist";
end