情報系人間のブログ

プログラミング、開発に関することを書いていきます。

iosアプリのクラッシュログを解析する

App storeに申請後、クラッシュを理由にリジェクトされたのでその際のログ解析方法のメモ。

必要なファイル

.dSYMファイル
.crashファイル
の2つ

  • .dSYMファイル
/Users/[ユーザ名]/Library/Developer/Xcode/Archives/[yyyy-mm-dd]/[アプリ名].xcarchive

にアーカイブ・ファイルがある。このファイルを「パッケージの内容を表示」で開くとdSYMフォルダがあり、その中に.dSYMファイルがある。

  • .crashファイル

itunes connectのマイApp内、問題解決センターからダウンロード。拡張子は.txtになっている。

解析方法

symbolicatecrashを使用してクラッシュログをシンボル付きのログに変換する。
symbolicatecrashコマンドは結構深いところにあるのでシンボリックリンクを作っておくと良い。

/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash

そして実行

symbolicatecrash  .crashファイル .dSYMファイル 

これで
変換前

0   Zn1clipboard       0x0000000100059240 0x100044000 + 86592

返還後

0   Zn1clipboard       0x0000000100059240 Zn1clipboard.Groups.load (Zn1clipboard.Groups)() -> () (Groups.swift:0)

のようにアドレスからシンボルが付与されてソースコードのどの部分でクラッシュしたかが分かるようになる。

プロ野球の結果をスクレイピングする

スクレイピングについて勉強したいと思いプロ野球の結果を取得するコードを書いてみました。
データ取得元はこちら
スポーツナビ

Rubyで書いたのですが、nokogiriというライブリが非常に便利でした。
最低限動くだけならかなり簡単に書くことができますし、かなり実用的だと思います。
ですかスクレイピングは法律関係が色々あるので実際使うとなると難しいですね。

scrape.rb

# -*- coding: utf-8 -*-
require 'mechanize'
require 'nokogiri'

date = ARGV[0]

page = Mechanize.new.get("http://baseball.yahoo.co.jp/npb/schedule/?&date=" + date)
doc = Nokogiri::HTML.parse(page.body)

doc.xpath('//table[@class="yjMS mb5"]/tr').each do |node|
  
  # team
  node.xpath('td[@class="today pl7"]/a').each do |elem|
    p elem.text
  end

  # startTime ballPark
  node.xpath('td[@class="today pl7"]/em').each do |elem|
    /(\d{2}:\d{2})(.+)/ =~ elem.text
    p $1
    p $2.gsub(" ", "")   
  end

  # score inning
  node.xpath('td[@class="today ct"]').each do |elem|
    if /(\d+) - (\d+)/ =~ elem.text
      p $1
      p $2
      p elem.text
    end

    elem.xpath('a').each do |inning|
      p inning.text
    end
  end

  # pitchers
  node.xpath('td[@class="today"]/table/tr').each do |elem|
    p elem.xpath('td[@class="w"]').text.gsub(/[[:space:]]/,"")
    p elem.xpath('td[@class="s"]').text.gsub(/S[[:space:]]/,"")
    p elem.xpath('td[@class="l"]').text.gsub(/[[:space:]]/,"")
  end
  
end

使い方
引数に日付をYYYYMMDD形式で指定します。

ruby scrape.rb 20150823

出力

ホームチーム
アウェイチーム
開始時間
球場
ホームチームの得点
アウェイチームの得点
試合のスコア
進行状況
勝利投手
セーブ投手
敗戦投手

が出力されます。

XcodeでCode Sining Error

久しぶりにXcodeでビルドしたらタイトルのエラーが出ました。

エラー全文は以下の通り。

The identity used to sign the executable is no longer valid
Please verify that your device's clock is properly set,
and that your signing certificate is not expired.

前回最後にビルドした後にdeveloperアカウントを更新したのでその為だと思います。

preferences->accounts->view details->更新としてもエラーは消えず。
preferences->accountsで一度Apple IDを削除して再び追加したらエラーは消えました。
めでたし。