Class: ApiGenHelper::GroupGenerator

Inherits:
Object
  • Object
show all
Defined in:
lib/api_gen_helper/group_generator.rb

Instance Method Summary collapse

Instance Method Details

#added_references_recursivly_for_target(target, group) ⇒ Object



46
47
48
49
50
51
52
53
54
# File 'lib/api_gen_helper/group_generator.rb', line 46

def added_references_recursivly_for_target(target, group)
  group.children.each do |child|
      if child.isa == "PBXFileReference"
        target.add_file_references([child])
      else
        added_references_recursivly_for_target(target, child)
      end
  end
end

#create_file_reference(group, path) ⇒ Xcodeproj::Project::Object::PBXFileReference

Create file reference for specific group

Parameters:

  • group (Xcodeproj::Project::Object::PBXGroup)
    • group where create file reference

  • path (String)

    path for file

Returns:

  • (Xcodeproj::Project::Object::PBXFileReference)

    file reference



99
100
101
# File 'lib/api_gen_helper/group_generator.rb', line 99

def create_file_reference(group, path)
  file_reference = Xcodeproj::Project::Object::FileReferencesFactory.new_reference(group, path, :group)
end

#create_group_from_directory(project, target, name, path) ⇒ Xcodeproj::Project::Object::PBXGroup

Create group for specific target and project

Parameters:

  • project (Xcodeproj::Project)

    The target xcodeproj file

  • target (Xcodeproj::Project::Object::PBXNativeTarget)

    The target in xcodeproj file

  • name (String)

    String name for group

  • path (String)

    path for group

Returns:

  • (Xcodeproj::Project::Object::PBXGroup)


82
83
84
# File 'lib/api_gen_helper/group_generator.rb', line 82

def create_group_from_directory(project, target, name, path)
  group = project[target].new_group(name, path, :group)
end

#generate_group(project_path, group_path, target_name) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/api_gen_helper/group_generator.rb', line 9

def generate_group(project_path, group_path, target_name)
  project = obtain_project(project_path)
  target_name = target_name
  group_path = group_path
  group_name = URI(group_path).path.split('/').last

  group = project[group_path]
  if !group.nil?
    remove_build_file_recursivly(group)
    group.clear
    group.remove_from_project
  end

  main_group = create_group_from_directory(project, target_name, group_name, group_path)

  prepare_main_group(main_group, group_path)

  project.targets.each do |proj_target|
    if proj_target.name == target_name
      added_references_recursivly_for_target(proj_target, main_group)
    end
  end
  project.save()
end

#is_bundle_resource?(resource_name) ⇒ Boolean

Returns:

  • (Boolean)


107
108
109
# File 'lib/api_gen_helper/group_generator.rb', line 107

def is_bundle_resource?(resource_name)
  File.extname(resource_name) == '.xib' || File.extname(resource_name) == '.storyboard'
end

#is_compile_source?(file_name) ⇒ Boolean

Returns:

  • (Boolean)


103
104
105
# File 'lib/api_gen_helper/group_generator.rb', line 103

def is_compile_source?(file_name)
  File.extname(file_name) == '.m' || File.extname(file_name) == '.swift' || File.extname(file_name) == '.mm'
end

#obtain_project(project_name) ⇒ Xcodeproj::Project::Object::PBXProject

Open xcodoproj file

Parameters:

  • project_name (String)

    String path for xcodeproj file

Returns:

  • (Xcodeproj::Project::Object::PBXProject)


90
91
92
# File 'lib/api_gen_helper/group_generator.rb', line 90

def obtain_project(project_name)
  Xcodeproj::Project.open(project_name)
end

#prepare_main_group(group, directory) ⇒ Object

Recursively fills the group with files and groups

Parameters:

  • group (PBXGroup)

    group to fill out

  • directory (String)

    path directory when search files and folders



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/api_gen_helper/group_generator.rb', line 59

def prepare_main_group(group, directory)
  Dir.entries(directory).each do |file_name|
    next if file_name =~ /^\./
    if File.file? File.join(directory, file_name)
      xcode_file_reference = create_file_reference(group, file_name)
      group<< xcode_file_reference
    end

    if File.directory? File.join(directory, file_name)
       sub_dir = File.join(directory, file_name)
       child_group = group.new_group(file_name, file_name)
       prepare_main_group(child_group, sub_dir)
    end
  end
end

#remove_build_file_recursivly(group) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
# File 'lib/api_gen_helper/group_generator.rb', line 34

def remove_build_file_recursivly(group)
  group.children.each do |child|
      if child.isa == "PBXFileReference"
        child.build_files.each do |build_file|
          build_file.remove_from_project
        end
      else
        remove_build_file_recursivly(child)
      end
  end
end