cocoapodsにiosライブラリを登録する
普段cocoapodsには非常にお世話になっていて自分も何か公開したいなと思い初めてライブラリを登録した。
手順をメモしておく。
ライブラリのテンプレート作成
始めにライブラリのテンプレートを作成する。
pod lib create "pod name"
この際デモを作成する方が良い。
podspecのバリデーション
ライブラリを作成後、podspecを編集後にlintコマンドでバリデーションを行う。
pod spec lint
動作確認
ライブラリが完成したらローカルからpod installして正常に動作するか確かめる。
テスト用のプロジェクトを作成し、podfileに以下を記述する。
pod "ライブラリ名", :path => 'ライブラリのパス'
pod installを実行して動作を確認する。
開発者登録
次に開発者登録を行う。コマンドを実行後、認証メールが届く。
pod trunk register "email" "name" —description="description"
公開
最後にpushする。
pod trunk push "podspec_file"
登録するとCocoapodsのtwitterから新規登録情報がツイートされる。
これだけの作業でcocoapodsにライブラリを登録可能である。非常に便利。
iosアプリのクラッシュログを解析する
App storeに申請後、クラッシュを理由にリジェクトされたのでその際のログ解析方法のメモ。
必要なファイル
.dSYMファイル
.crashファイル
の2つ
- .dSYMファイル
/Users/[ユーザ名]/Library/Developer/Xcode/Archives/[yyyy-mm-dd]/[アプリ名].xcarchive
にアーカイブ・ファイルがある。このファイルを「パッケージの内容を表示」で開くとdSYMフォルダがあり、その中に.dSYMファイルがある。
- .crashファイル
解析方法
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)
のようにアドレスからシンボルが付与されてソースコードのどの部分でクラッシュしたかが分かるようになる。
herokuでdbを確認する
herokuのdbにアクセスする。
$ heroku pg:psql
テーブル一覧
\d
ユーザー一覧
\du
データベース一覧
\l
切断
\q
migrate
heroku run rake db:migrate --app [APP_NAME]
プロ野球の結果をスクレイピングする
スクレイピングについて勉強したいと思いプロ野球の結果を取得するコードを書いてみました。
データ取得元はこちら
スポーツナビ
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
出力
ホームチーム アウェイチーム 開始時間 球場 ホームチームの得点 アウェイチームの得点 試合のスコア 進行状況 勝利投手 セーブ投手 敗戦投手
が出力されます。