投稿者のアーカイブ

Updraft Betaでフィードバックしてみた

先日事前登録をしていた「Updraft」のベータ版が公開されたとのことなので、早速利用してみました。

Updraftって?

レビューからのカイゼンサイクルを超高速化できるフィードバックツールです。(http://www.getupdraft.ioより引用)

利用手順

1.UpdraftのウェブサイトまたはiOSアプリで登録作業を行います。

【ウェブサイト】http://www.getupdraft.io/
【iOSアプリ】https://itunes.apple.com/app/id1099018975

私はUpdraftのサイトで登録を行いました。
ここではGitHubのアカウントでサインアップする必要があるようです。

Screen Shot 2016-04-21 at 10.56.14

2.Updraftのウェブサイト上でプロジェクトを作成します。

プロジェクトタイプ(現在はWEBのみのようです)、Gitリポジトリ、サイト名、プロジェクトメンバーを登録します。
現時点では「Updraftへの登録が済んでいるGitHub organizationのメンバー」のみ招待可能となっているようです。

Screen Shot 2016-04-21 at 11.19.35

3.Updraftアプリから、フィードバックを行います。

UpdraftのiOSアプリでサインアップすると、参加しているプロジェクトの一覧が表示されるので「start」ボタンをタップしてレビューを開始します。
ここでフィードバックした内容はスクリーンショット付きでGitHubにissueとして投稿されるようです。
また、フィードバック内容はUpdraftのウェブサイトやiOSアプリ内でも確認できました。

IMG_1223

感想

レビュアーにとっては「スクリーンショットを撮って、チャットやメールで開発者に連絡して-」といった作業が省略されますし、開発者にとっても「フィードバックの内容をissueに登録して-」といった作業が不要になるので色々と捗るのではないかと思います。
また、今後iOSアプリやAndroidアプリについても対応する予定とのことですので期待して待ちたいと思います。

Facebooktwittergoogle_pluslinkedintumblrmail

iOSのクラッシュログにシンボル情報を追加する

Appleの審査でリジェクトされた際に、「*.clash」や「*.ips」といった形でクラッシュログが添付されていることがあります。
中身を確認すると以下のような内容になっていますが、このままだとコードのどの部分でクラッシュしたのかが分かりません。

〜一部抜粋〜
Thread 5 Crashed:
1  CoreFoundation                   0x24936b62 0x24831000 + 135152
2  Foundation                       0x255e49f5 0x25575000 + 21531
3  SampleApp                        0x000341d2 0xb000 + 55521
4  libdispatch.dylib                0x32a107b6 0x32a0f000 + 1235

そこで、「symbolicatecrash」というツールを利用してログにシンボル情報を追加することで、クラッシュ箇所を特定出来るようにします。

必要なファイル

  • クラッシュログファイル
  • appファイル
  • dSYMファイル

appファイル及びdSYMファイルはクラッシュログを出力したものと同じものを使う必要があります。
私は以下の方法で取得しました。

1. XcodeのOrganizerを開く
2. 該当ビルド上で右クリックし、「Show In Finder」を選択
3. Finderで選択されているファイル上で右クリックし、「パッケージの内容を表示」を選択
4. 「dSYMs」ディレクトリ内に「*.app.dSYM」が「Products/Applications」内に「*.app」があります

symbolicatecrashの実行

実行環境
・OS X 10.9.5
・Xcode6.1

「symbolicatecrash」は私の環境では以下のパスにありました。

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

長過ぎるのでシンボリックリンクやエイリアスを作成しておくと便利です。

あとは下記コマンドを実行する事で、クラッシュログにシンボル情報を追加したログファイルを作成できます。

    # このコマンドを実行しないと「Error: "DEVELOPER_DIR" is not defined at symbolicatecrash line 60.」といったエラーメッセージが表示されます。
    export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"

    symbolicatecrash クラッシュログファイル dSYMファイル appファイル > crash.log

作成されたcrash.logを確認してみるとシンボル情報が追加され、 SampleController.m の121行目辺りが怪しいことが分かるようになりました。

〜一部抜粋〜
Thread 5 Crashed:
1  CoreFoundation                   0x24936b62 +[NSException raise:format:] + 108
2  Foundation                       0x255e49f5 +[NSJSONSerialization JSONObjectWithData:options:error:] + 62
3  SampleApp                        0x000341d2 __35-[SampleController startSample:] (SampleController.m:121)
4  libdispatch.dylib                0x32a107b6 _dispatch_call_block_and_release + 8
Facebooktwittergoogle_pluslinkedintumblrmail

iOSでプッシュ通知時の挙動を確認したい

今回はiOSアプリを開発している際にプッシュ通知時の挙動を確認したい時に使えそうな「houston」というライブラリを紹介したいと思います。

nomad/houston

1. インストール

gem install houston

2. 送信用のrubyファイルを用意

ほぼREADMEにあったサンプルの通りのものです。
また、事前に開発用の「push_dev.pem」を同じディレクトリに置いています。

push.ruby

require 'houston'

# Environment variables are automatically read, or can be overridden by any specified options. You can also
# conveniently use `Houston::Client.development` or `Houston::Client.production`.
APN = Houston::Client.development
APN.certificate = File.read("push_dev.pem")

# An example of the token sent back when a device registers for notifications
token = "<《ここにプッシュ通知を送信したい端末のデバイストークンを指定します》>"

# Create a notification that alerts a message to the user, plays a sound, and sets the badge on the app
notification = Houston::Notification.new(device: token)
notification.alert = "ハロー, ワールド!"

# Notifications can also change the badge count, have a custom sound, have a category identifier, indicate available Newsstand content, or pass along arbitrary data.
notification.badge = 1
notification.sound = "sosumi.aiff"
notification.category = "INVITE_CATEGORY"
notification.content_available = true
notification.custom_data = {foo: "bar"}

# And... sent! That's all it takes.
APN.push(notification)

3. push通知を送信

ruby push.ruby

以上で、指定した端末にプッシュ通知が飛びます。
READMEにはデバイストークンの取得方法や証明書の作成方法なども載っておりすごく分かりやすいです。
この他にもコマンドラインからプッシュ通知を送信することが出来るようです。

apn push "<デバイストークン>" -c /path/to/apple_push_notification.pem -m "Hello from the command line!"
Facebooktwittergoogle_pluslinkedintumblrmail

一つのVagrantfileで複数VMを管理する際のメモ

下記のようなVagrantfileで複数VMを管理している際に「vagrant halt」を行うと…

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.define :first do |first|
    first.vm.box = "centos6.5.3"
    first.vm.network :forwarded_port, guest: 80, host: 8080
    first.vm.network :private_network, ip: "192.168.33.10"
  end
  
  config.vm.define :second do |second|
    second.vm.box = "centos6.5.3"
    second.vm.network :forwarded_port, guest: 80, host: 8181
    second.vm.network :private_network, ip: "192.168.33.11"
  end
end

2つとも停止します。

~/w/vagrantTest ❯❯❯ vagrant halt
 second: Attempting graceful shutdown of VM...
 first: Attempting graceful shutdown of VM...

片方だけ停止したい場合には「vagrant halt first」のように引数にマシン名を指定すれば良いのですが
停止したくないマシンまで誤って停止させるのを避けたかったので、何か良い方法はないか調べました。

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|

  if ARGV[1] == "first" # 追加
  config.vm.define :first do |first|
    first.vm.box = "centos6.5.3"
    first.vm.network :forwarded_port, guest: 80, host: 8080
    first.vm.network :private_network, ip: "192.168.33.10"
  end
  end # 追加
  if ARGV[1] == "second" # 追加
  config.vm.define :second do |second|
    second.vm.box = "centos6.5.3"
    second.vm.network :forwarded_port, guest: 80, host: 8181
    second.vm.network :private_network, ip: "192.168.33.11"
  end
  end # 追加
end

このようにすると「vagrant halt」だけでは停止しなくなり、マシン名を指定することで停止出来るようになります。

Facebooktwittergoogle_pluslinkedintumblrmail