class XcodeprojUtils::Project

Public Class Methods

new(proj_name, target_name) click to toggle source
# File lib/xcodeproj_utils.rb, line 6
def initialize(proj_name, target_name)
  @proj = Xcodeproj::Project::open(proj_name)
  @target = @proj.targets.select {|target| target.name == target_name}
  raise ArgumentError, "#{target_name} is not found in #{proj_name}" if @target.empty?
  @target = @target.first
end

Public Instance Methods

search_unused_images() click to toggle source
# File lib/xcodeproj_utils.rb, line 66
def search_unused_images
  sources = ""
  for file in @target.source_build_phase.files_references
    sources += File.read file.real_path
  end
  for file in @proj.files
    if file.path.end_with? ".h"
      sources += File.read file.real_path
    end
  end
  for file in @target.resources_build_phase.files_references
    type = file.last_known_file_type
    next unless type
    if type == 'file.xib' or type == 'text.plist.xml'
      sources += File.read file.real_path
    end
  end

  images = []
  for file in @target.resources_build_phase.files_references
    type = file.last_known_file_type
    if not type or not type.match /^image/
      next
    end

    name = File.basename(file.display_name, '.*')
    name = name.split('@').first.strip

    if name == 'Default' or name == 'Default-568h'
      next
    end

    if sources.scan(name).count == 0
      images << file
    end
  end

  images.sort {|x,y| x.display_name <=> y.display_name}
end
show(kind, fullpath=false) click to toggle source
# File lib/xcodeproj_utils.rb, line 45
def show(kind, fullpath=false)
  if kind == 'resource'
    files = @target.resources_build_phase.files_references
  elsif kind == 'source'
    files = @target.source_build_phase.files_references
  end

  if files
    for file in files
      next if file.class != Xcodeproj::Project::Object::PBXFileReference
      
      if fullpath
        puts file.real_path
      else
        puts file.path
      end
    end
  end
  return nil
end
wc(header_only=false, source_only=false) click to toggle source
# File lib/xcodeproj_utils.rb, line 13
def wc(header_only=false, source_only=false)
  all = !(header_only || source_only) # default is all
  count_source = lambda do
    sources = []
    for file in @target.source_build_phase.files_references
      if file.last_known_file_type and file.last_known_file_type.include? "sourcecode"
        sources.push("'#{file.real_path}'")
      end
    end
    file_params = sources.join(' ')
    source_total = %x{wc -l #{file_params}}
    return source_total.lines[-1].split.first.to_i
  end

  count_header = lambda do
    headers = []
    for file in @proj.files
      if file.path.end_with? ".h"
        headers.push("'#{file.real_path}'")
      end
    end
    file_params = headers.join(' ')
    header_total = %x{wc -l #{file_params}}
    return header_total.lines[-1].split.first.to_i
  end

  source_total = header_total = 0
  source_total = count_source.call if all or source_only
  header_total = count_header.call if all or header_only
  source_total + header_total
end