class AirbrakeSymbolicate::DsymFinder

Public Class Methods

dsym_for_error(error) click to toggle source
# File lib/airbrake_symbolicate.rb, line 7
def dsym_for_error(error)
  find_dsyms  unless @@dsyms

  @@dsyms[error.app_version]
end

Private Class Methods

find_dsyms() click to toggle source

use spotlight to find all the xcode archives then use the Info.plist inside those archives to try and look up a git commit hash

# File lib/airbrake_symbolicate.rb, line 17
def find_dsyms
  @@dsyms = {}

  files = `mdfind -name ".xcarchive"`.split("\n")
  files.each do |f|
    info = `find '#{f}/Products' -name Info.plist`.chomp

    short_version = plist_val(info, 'CFBundleShortVersionString')
    long_version = plist_val(info, 'CFBundleVersion')
    version = if short_version
      "#{short_version} (#{long_version})"
    else
      long_version
    end

    if bin_file = Dir[File.join(f, '/dSYMs/*.dSYM/**/DWARF/*')].first
      @@dsyms[version] = bin_file
    end

  end
end
plist_val(plist, key) click to toggle source
# File lib/airbrake_symbolicate.rb, line 39
def plist_val(plist, key)
  `/usr/libexec/PlistBuddy -c 'Print :#{key}' '#{plist}' 2>/dev/null`.chomp
end