Class: XCApp::ProjectCreator
- Inherits:
-
Object
- Object
- XCApp::ProjectCreator
- Defined in:
- lib/xcapp/project_creator.rb
Constant Summary collapse
- SUPPORTED_LANGUAGES =
[:swift, :objc]
- TEMPLATES_DIR_NAME =
'templates'
Instance Method Summary collapse
- #add_folder_files_to_project_group(folder, group) ⇒ Object
- #add_references_to_project_group(project_folder, project_group) ⇒ Object
- #copy_template_app_files_to_project(project, project_name, path, language) ⇒ Object
- #copy_template_files(template_source_folder, dest_folder) ⇒ Object
- #copy_template_files_to_project(language, type, dest_folder) ⇒ Object
- #copy_template_tests_files_to_project(project, project_name, path, language) ⇒ Object
- #create_app_target(project, project_name, language, files) ⇒ Object
- #create_default_build_configurations(project) ⇒ Object
- #create_default_scheme(project_path, project_name, app_target, test_target) ⇒ Object
- #create_project(name, path, bundle_identifier, language) ⇒ Object
- #create_project_target(project, target_name, target_type, language, files) ⇒ Object
- #create_test_target(project, project_name, language, files) ⇒ Object
-
#initialize ⇒ ProjectCreator
constructor
A new instance of ProjectCreator.
- #set_default_build_settings(project, project_name, bundle_identifier) ⇒ Object
Constructor Details
#initialize ⇒ ProjectCreator
Returns a new instance of ProjectCreator.
19 20 21 |
# File 'lib/xcapp/project_creator.rb', line 19 def initialize @templates_folder = File.('../../' + TEMPLATES_DIR_NAME, __FILE__) end |
Instance Method Details
#add_folder_files_to_project_group(folder, group) ⇒ Object
80 81 82 |
# 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) ⇒ Object
76 77 78 |
# 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) ⇒ Object
44 45 46 47 48 49 50 51 52 |
# 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) ⇒ Object
72 73 74 |
# 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) ⇒ Object
64 65 66 67 68 69 70 |
# 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) ⇒ Object
54 55 56 57 58 59 60 61 62 |
# 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) ⇒ Object
84 85 86 87 |
# 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) ⇒ Object
100 101 102 |
# 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) ⇒ Object
112 113 114 115 116 117 118 119 120 |
# 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) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# 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) ⇒ Object
93 94 95 96 97 98 |
# 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) ⇒ Object
89 90 91 |
# 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) ⇒ Object
104 105 106 107 108 109 110 |
# 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 |