All Downloads are FREE. Search and download functionalities are using the official Maven repository.

otlinxcodesync.0.2.source-code.projimport.rb Maven / Gradle / Ivy

require 'xcodeproj'

project_file = ARGV[0]
targetName = ARGV[1]
groupName = ARGV[2]

project = Xcodeproj::Project.open(project_file)

target = project.targets.find {|target| target.name == targetName}

if target == nil
  puts "target #{targetName} not found"
  exit(false)
end

kot_group = project.groups.find do |group|
  group.name == groupName
end

if kot_group == nil
  kot_group = project.new_group(groupName)
end

kt_files = kot_group.recursive_children.select do |elem|
  elem.kind_of? Xcodeproj::Project::Object::PBXFileReference
end.map do |file_ref|
  file_ref.real_path.to_s
end.select do |path|
  path.end_with?(".kt") and File.exists?(path)
end

group_index = {}

def dlog(str)
  if false
    puts str
  end
end

def walkGroups (group_index, pathBase, groups)
  groups.each do |group|
    if group.name != nil
      groupPathName = pathBase + '/' + group.name
      group_index[groupPathName] = group
      walkGroups(group_index, groupPathName, group.groups)
    end
  end
end

walkGroups(group_index, "", kot_group.groups)

def addfiles (existingFiles, group_index, direc, pathBase, current_group, main_target)

    Dir.glob(direc).sort.each do |item|
        next if item == '.' or item == '.DS_Store'
        new_folder = File.basename(item)

        if File.directory?(item)

          groupPathName = pathBase + '/' + new_folder
          foundGroup = group_index[groupPathName]
          if foundGroup == nil
            foundGroup = current_group.new_group(new_folder)
            group_index[groupPathName] = foundGroup
            dlog "creating #{groupPathName}"
          else
            dlog "existing #{groupPathName}"
          end
          addfiles(existingFiles, group_index, "#{item}/*", groupPathName, foundGroup, main_target)
        else

          if item.end_with? ".kt"
            projectPath = "#{pathBase}/#{new_folder}"
            fileFound = existingFiles.any? { |path|
              path.end_with? projectPath
            }
            if fileFound
              dlog "File #{projectPath} exists"
            else
              dlog "File #{projectPath} created"
              current_group.new_file(item)
            end
          end
        end
    end
end

srcDirIndex = 3

while srcDirIndex < ARGV.length do
  importPath = ARGV[srcDirIndex]
  addfiles(kt_files, group_index, "#{importPath}/*", "", kot_group, target)
  srcDirIndex +=1
end

project.save(project_file)




© 2015 - 2024 Weber Informatics LLC | Privacy Policy