class AppParser::Ipa
Attributes
ipad_icons[R]
iphone_icons[R]
Public Class Methods
new(file_name)
click to toggle source
# File lib/app_parser/ipa.rb, line 13 def initialize(file_name) @zip_file = Zip::File.new(file_name) @iphone_icons = search_icons @ipad_icons = search_icons(ipad: true) end
Public Instance Methods
bundle_id()
click to toggle source
# File lib/app_parser/ipa.rb, line 35 def bundle_id info_plist["CFBundleIdentifier"] end
display_name()
click to toggle source
# File lib/app_parser/ipa.rb, line 31 def display_name info_plist["CFBundleDisplayName"] || info_plist["CFBundleName"] end
icon_data(file_name)
click to toggle source
# File lib/app_parser/ipa.rb, line 52 def icon_data(file_name) Dir.mktmpdir do |tmp_dir| src_file = "#{tmp_dir}/src" dest_file = "#{tmp_dir}/dest" find_entry(file_name).extract(src_file) Pngdefry.defry(src_file, dest_file) File.binread(dest_file) end end
icons()
click to toggle source
# File lib/app_parser/ipa.rb, line 48 def icons @iphone_icons + @ipad_icons end
info_plist()
click to toggle source
# File lib/app_parser/ipa.rb, line 62 def info_plist @info_plist ||= CFPropertyList.native_types( CFPropertyList::List.new(data: read_file("Info.plist"), format: CFPropertyList::List::FORMAT_AUTO).value ) end
mobileprovision()
click to toggle source
# File lib/app_parser/ipa.rb, line 68 def mobileprovision @mobileprovision ||= CFPropertyList.native_types( CFPropertyList::List.new(data: read_file("embedded.mobileprovision").match(%r{<\?xml.*</plist>}m)[0], format: CFPropertyList::List::FORMAT_AUTO).value ) end
os()
click to toggle source
# File lib/app_parser/ipa.rb, line 19 def os "ios" end
provisioned_devices()
click to toggle source
# File lib/app_parser/ipa.rb, line 39 def provisioned_devices mobileprovision["ProvisionedDevices"] end
provisions_all_devices()
click to toggle source
true if In-House
# File lib/app_parser/ipa.rb, line 44 def provisions_all_devices mobileprovision["ProvisionsAllDevices"] || false end
version()
click to toggle source
# File lib/app_parser/ipa.rb, line 23 def version info_plist["CFBundleVersion"] end
version_string()
click to toggle source
# File lib/app_parser/ipa.rb, line 27 def version_string info_plist["CFBundleShortVersionString"] end
Private Instance Methods
find_entries(path)
click to toggle source
# File lib/app_parser/ipa.rb, line 76 def find_entries(path) @zip_file.glob("Payload/*.app/#{path}") end
find_entry(path)
click to toggle source
# File lib/app_parser/ipa.rb, line 80 def find_entry(path) find_entries(path).first end
read_file(path)
click to toggle source
# File lib/app_parser/ipa.rb, line 84 def read_file(path) entry = find_entry(path) entry.get_input_stream.read unless entry.nil? end
search_icons(ipad: false)
click to toggle source
# File lib/app_parser/ipa.rb, line 89 def search_icons(ipad: false) Dir.mktmpdir do |tmp_dir| info_plist.try(:[], "CFBundleIcons#{'~ipad' if ipad}").try(:[], "CFBundlePrimaryIcon").try(:[], "CFBundleIconFiles").each_with_object([]) do |icons, obj| find_entries(icons + "*").find_all { |entry| entry.name.index("~ipad").nil? != ipad }.each do |entry| tmp_file_name = "#{tmp_dir}/#{File.basename(entry.name)}" entry.extract(tmp_file_name) obj << { dimensions: Pngdefry.dimensions(tmp_file_name), file_name: File.basename(entry.name) } end end end end