Class: XcodeUtils::Command::UITest::Install
- Inherits:
-
XcodeUtils::Command::UITest
- Object
- CLAide::Command
- XcodeUtils::Command
- XcodeUtils::Command::UITest
- XcodeUtils::Command::UITest::Install
- Defined in:
- lib/xcutils/uitest.rb
Class Method Summary collapse
Instance Method Summary collapse
- #add_files(direc, current_group, main_target) ⇒ Object
- #copy_template_files ⇒ Object
- #generate_build_configuration ⇒ Object
- #generate_scheme ⇒ Object
-
#initialize(argv) ⇒ Install
constructor
A new instance of Install.
- #run ⇒ Object
- #scheme_path(name) ⇒ Object
- #set_custom_module(item) ⇒ Object
- #validate! ⇒ Object
Constructor Details
#initialize(argv) ⇒ Install
Returns a new instance of Install.
29 30 31 32 33 34 35 36 37 |
# File 'lib/xcutils/uitest.rb', line 29 def initialize(argv) @project_name = argv.option('project-name', nil) @taget_config = argv.option('target-config', nil) @target_scheme = argv.option('target-scheme', nil) @uitest_name = 'UITestRunner' @project_path = "./#{@project_name}.xcodeproj" super @additional_args = argv.remainder! end |
Class Method Details
.options ⇒ Object
21 22 23 24 25 26 27 |
# File 'lib/xcutils/uitest.rb', line 21 def self. [ ['--project-name=""', 'The name of your xcode project'], ['--target-config=""', 'The name of build configuration to be copied to uitestrunner build configuration'], ['--target-scheme=""', 'The name of build scheme to be copied to uitestrunner build scheme'], ] end |
Instance Method Details
#add_files(direc, current_group, main_target) ⇒ Object
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
# File 'lib/xcutils/uitest.rb', line 143 def add_files(direc, current_group, main_target) Dir.glob(direc) do |item| next if item == '.' or item == '.DS_Store' if File.directory?(item) group_name = File.basename(item) created_group = current_group.new_group(nil, group_name) add_files("#{item}/*", created_group, main_target) else i = current_group.new_file(File.basename(item)) if item.include? ".swift" or item.include? ".m" main_target.add_file_references([i]) end if item.include? ".storyboard" or item.include? ".xib" set_custom_module(item) main_target.add_resources([i]) end end end end |
#copy_template_files ⇒ Object
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/xcutils/uitest.rb', line 117 def copy_template_files template_path = "./#{@project_name}/#{@uitest_name}" if Dir.exist?(template_path) puts "Template files already exist in the project #{@project_name}" return end puts "Copying template files into project #{@project_name}" path = File.('../../../templates', __FILE__) FileUtils.copy_entry path, "./#{@project_name}" puts "Adding references for files and resources into project #{@project_name}" project = Xcodeproj::Project.open(@project_path) project.targets.each { |target| target_group = project.groups.select { |e| e.path == target.name }.first template_group = target_group.new_group(nil, @uitest_name) add_files("#{template_path}/*", template_group, target) } project.save() end |
#generate_build_configuration ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/xcutils/uitest.rb', line 52 def generate_build_configuration puts "Input: project_name: #{@project_name}, target_config: #{@taget_config}, target_scheme: #{@target_scheme}" project = Xcodeproj::Project.open(@project_path) configuration_list = project.root_object.build_configuration_list if configuration_list.build_settings(@uitest_name) != nil puts "uitest already install in the project #{@project_name}" return end puts "Initializing #{@uitest_name}" puts "Generating project configuration" configuration = project.new(Xcodeproj::Project::Object::XCBuildConfiguration) configuration.name = @uitest_name configuration.build_settings = configuration_list.build_settings(@taget_config) configuration_list.build_configurations << configuration project.targets.each do |target| break if target.build_configurations.select { |e| e.name == @uitest_name }.count > 0 puts "Generating build configuration #{target.name}:#{@uitest_name}" base_config = target.build_configurations.select { |e| e.name == @taget_config }.first org_main_storyboard_file = nil target.build_configurations.each { |e| path = e.build_settings['INFOPLIST_FILE'] obj = Plist.parse_xml(path) var_name = '$(MAIN_STORYBOARD_FILE)' e.build_settings['MAIN_STORYBOARD_FILE'] = obj['UIMainStoryboardFile'] != var_name ? obj['UIMainStoryboardFile'] : org_main_storyboard_file obj['UIMainStoryboardFile'] = '$(MAIN_STORYBOARD_FILE)' if org_main_storyboard_file == nil org_main_storyboard_file = e.build_settings['MAIN_STORYBOARD_FILE'] end File.write(path, obj.to_plist) } new_config = project.new(Xcodeproj::Project::Object::XCBuildConfiguration) new_config.name = @uitest_name new_config.base_configuration_reference = base_config.base_configuration_reference new_config.build_settings.update(base_config.build_settings) new_config.build_settings['MAIN_STORYBOARD_FILE'] = @uitest_name target.build_configurations << new_config puts "Generating scheme #{target.name} #{@uitest_name}" project.save() end end |
#generate_scheme ⇒ Object
107 108 109 110 111 112 113 114 115 |
# File 'lib/xcutils/uitest.rb', line 107 def generate_scheme scheme_name = "#{@project_name} #{@uitest_name}" FileUtils.copy_file(scheme_path(@target_scheme), scheme_path(scheme_name)) scheme = Xcodeproj::XCScheme.new(scheme_path(scheme_name)) scheme.launch_action.build_configuration = @uitest_name scheme.save_as(@project_path, scheme_name) end |
#run ⇒ Object
46 47 48 49 50 |
# File 'lib/xcutils/uitest.rb', line 46 def run generate_build_configuration generate_scheme copy_template_files end |
#scheme_path(name) ⇒ Object
178 179 180 |
# File 'lib/xcutils/uitest.rb', line 178 def scheme_path(name) return "#{@project_path}/xcshareddata/xcschemes/#{name}.xcscheme" end |
#set_custom_module(item) ⇒ Object
165 166 167 168 169 170 171 172 173 174 175 176 |
# File 'lib/xcutils/uitest.rb', line 165 def set_custom_module(item) doc = Nokogiri::XML(File.open(item)) nodes = doc.xpath("//viewController") nodes.each { |e| e['customModule'] = @project_name } if nodes.count > 0 File.write(item, doc.to_xml) end end |
#validate! ⇒ Object
39 40 41 42 43 44 |
# File 'lib/xcutils/uitest.rb', line 39 def validate! super help! 'Argument --project-name is required.' unless @project_name help! 'Argument --target-config is required.' unless @taget_config help! 'Argument --target-scheme is required.' unless @target_scheme end |