class FIR::Parser::Ipa::App

Public Class Methods

new(path, is_stored = false) click to toggle source
# File lib/fir/util/parser/ipa.rb, line 63
def initialize(path, is_stored = false)
  @path      = path
  @is_stored = is_stored
end

Public Instance Methods

basic_info() click to toggle source
# File lib/fir/util/parser/ipa.rb, line 76
def basic_info
  @basic_info ||= {
    type:              'ios',
    identifier:        identifier,
    name:              name,
    display_name:      display_name,
    build:             version.to_s,
    version:           short_version.to_s,
    devices:           devices,
    release_type:      release_type,
    distribution_name: distribution_name
  }
end
devices() click to toggle source
# File lib/fir/util/parser/ipa.rb, line 156
def devices
  mobileprovision['ProvisionedDevices'] if has_mobileprovision?
end
display_name() click to toggle source
# File lib/fir/util/parser/ipa.rb, line 103
def display_name
  info['CFBundleDisplayName']
end
distribution_name() click to toggle source
# File lib/fir/util/parser/ipa.rb, line 160
def distribution_name
  "#{mobileprovision['Name']} - #{mobileprovision['TeamName']}" if has_mobileprovision?
end
full_info(options) click to toggle source
# File lib/fir/util/parser/ipa.rb, line 68
def full_info(options)
  if options.fetch(:full_info, false)
    basic_info.merge!(icons: tmp_icons)
  end

  basic_info
end
has_mobileprovision?() click to toggle source
# File lib/fir/util/parser/ipa.rb, line 144
def has_mobileprovision?
  File.file? mobileprovision_path
end
hide_developer_certificates() click to toggle source
# File lib/fir/util/parser/ipa.rb, line 152
def hide_developer_certificates
  mobileprovision.delete('DeveloperCertificates') if has_mobileprovision?
end
icons() click to toggle source
# File lib/fir/util/parser/ipa.rb, line 119
def icons
  @icons ||= begin
    icons = []
    info['CFBundleIcons']['CFBundlePrimaryIcon']['CFBundleIconFiles'].each do |name|
      icons << get_image(name)
      icons << get_image("#{name}@2x")
    end
    icons.delete_if &:!
  rescue NoMethodError
    []
  end
end
identifier() click to toggle source
# File lib/fir/util/parser/ipa.rb, line 99
def identifier
  info['CFBundleIdentifier']
end
info() click to toggle source
# File lib/fir/util/parser/ipa.rb, line 90
def info
  @info ||= CFPropertyList.native_types(
    CFPropertyList::List.new(file: File.join(@path, 'Info.plist')).value)
end
mobileprovision() click to toggle source
# File lib/fir/util/parser/ipa.rb, line 132
def mobileprovision
  return unless has_mobileprovision?
  return @mobileprovision if @mobileprovision

  cmd = "security cms -D -i \"#{mobileprovision_path}\""
  begin
    @mobileprovision = CFPropertyList.native_types(CFPropertyList::List.new(data: `#{cmd}`).value)
  rescue CFFormatError
    @mobileprovision = {}
  end
end
mobileprovision_path() click to toggle source
# File lib/fir/util/parser/ipa.rb, line 148
def mobileprovision_path
  @mobileprovision_path ||= File.join(@path, 'embedded.mobileprovision')
end
name() click to toggle source
# File lib/fir/util/parser/ipa.rb, line 95
def name
  info['CFBundleName']
end
release_type() click to toggle source
# File lib/fir/util/parser/ipa.rb, line 164
def release_type
  if @is_stored
    'store'
  else
    if has_mobileprovision?
      if devices
        'adhoc'
      else
        'inhouse'
      end
    end
  end
end
short_version() click to toggle source
# File lib/fir/util/parser/ipa.rb, line 111
def short_version
  info['CFBundleShortVersionString']
end
tmp_icons() click to toggle source
# File lib/fir/util/parser/ipa.rb, line 115
def tmp_icons
  icons.map { |data| generate_tmp_icon(data, :ipa) }
end
version() click to toggle source
# File lib/fir/util/parser/ipa.rb, line 107
def version
  info['CFBundleVersion']
end

Private Instance Methods

get_image(name) click to toggle source
# File lib/fir/util/parser/ipa.rb, line 180
def get_image(name)
  path = File.join(@path, "#{name}.png")
  return nil unless File.exist?(path)
  path
end