iOSアプリ開発に必要な証明書をXcodeから自動で作成してみた

By | 2014年12月10日

Request Certificates with Xcode

Xcode is the easiest way to request certificates. Connect your device to your Mac and click Use for Development in Xcode's Organizer window. Sign in with the Apple ID associated with your iOS Developer Program membership and Xcode will automatically generate your certificates.

とあるので、手動では何度かやってるので Xcode から証明書を自動で作成してみました。

手動のやり方は「よく分かる!iOS アプリ開発に必要な証明書ファイルの作成方法 | アドカレ2013 : SP #4」をみると分かりやすいかと思います。

iOS Developer Program に加入し、Activate までは済ませた状態とします。

Development 証明書

General > Identity > Team を設定すれば iOS Development:~ が作成された。

※ もしかしたら Team の下にある Fix-issue を押す必要があるかもしれません。

Production 証明書

Archive を実行し、その後に Validation を実行すれば iOS Distribution:~ が作成された。

※ もしからしたら Archive だけで作成されているのかもしれません。

昔、証明書を作ったときは iPhone Development:~ みたいな名前になって気がするけど、時がたって変わったのかそれとも Xcode から作成したため名前が変わったのかは分からないんです。。。

まとめ

端末をつなげて実行すれば自動で Devices の登録もしてくれるので、 Activate さえ済ましていれば Xcode から離れずに実機で動かすまでが簡単にできるようになっていましたとさ。

とりあえず試したいって人にはいいかも

横浜へなちょこiOS勉強会で「iOS エンジニアのための LLVM Optimiazation」について発表してきました

By | 2014年11月30日

先日いいお肉の日に「横浜へなちょこiOS勉強会#34.1」で発表させていただきました。

当日の資料です

話す内容を前日に変えたんで急ピッチでつくりました。
やるもんじゃないですねw

各Pass が何をしているかまで調べたかったんですけど、時間がなくて断念。
モチベーションがもてば近々どっかでまとめます。

他の発表者の内容もとても楽しかったです。
@kitasuke さんの Watchkit の devforum の話はとても参考になり質疑応答の時間がとても濃くてよかった。
@es_kumagai さんの発表は「Swift – 値付き enum 入門 〜 そして伝説へ 〜」ということもあり本当にやばかったです。
Swift のふわふわしていた Optional がわかった気がする。近々資料が公開されるみたいなので、それが待ち遠しいですね。

ということなので「第59回 Cocoa勉強会関西 – iOS/Macアプリ開発勉強会」に行けば、伝説の講義が聞けるみたいです。

主催者の @haranicle さん、おつかれさまでした。

懇親会(一心)の馬肉がうますぎてやばかったので、またいきたい。

ではでは

Posted in ios | Tagged

プロジェクト毎に Xcode のバージョンを指定する方法

By | 2014年11月6日

ソースコードに書く方法でもいいんですけど、他にうまいことできないかなと思って少し調べてみました。
どうやら Run Script でも同じようなことができそうです。

Xcode Run Script Build Phase debugging」をみて知ったのですが、echo "error: ***" とするとビルドを失敗させることができるみたいです。
ほかにも warnings や note といったものがあるようです。

ただ shell や bash だと意図した挙動になるのですが、他の言語だとビルドエラーにならないです。

ここで重要になってくるのが Run Script の実行する順番です。
Compile Sources の前に実行するようにしないと、一度目のビルドは通ってしまうので気をつけないといけません。

gist にサンプルがあるのでどうぞ。

Crashlytics から Bugsnag へ移行したお話

logo

Bugsnag という Crash レポート解析サービスがあるんですが、最近 Crashlytics から乗り換えたので、なぜ変えたのかをツラツラと書いていこうかなと思います。
実際 Bugsnag じゃなくてもこのような機能があるサービスの方が個人的には使い勝手がいいかなと思います。

Bugsnag は$29/monthかかります

なぜ Crashlytics から移行しようとしたのか

Crashlytics は便利なんでずっと使ってるんですけど、 Crash した場合にしかレポートを送信することができないのが一番の不満(※Fabric で改善されているかもしれません)

このあとに言及しますが、Social.framework 等を利用した場合のエラーを集めたかったんですけど、そのために Crash しないといけないとか、ありえませんし。なのでそれを取得するために自分でエラー情報を集めようとして、API を用意したりしてたんですけどアプリが増えると管理も億劫になるし、なにより情報が分散してしまうせいで管理にしづらいので乗り換えることにしました。

なぜ Bugsnag に移行したのか

任意のタイミングでレポートを送信できる

さきほど少しふれましたがこれが一番重要な機能です。なぜなら端末側の設定や状況によるエラーを取得したいからです。

例えばアプリのサインインに SNS(Twitter, Facebook等) を認証に利用している場合や IAP (In-App Purchase)など、エラーの原因が端末側でしか分からない場合があります。画面には「失敗しました」などのエラー文言を表示して終わっていることが大半だと思います。

この場合、端末やユーザーの状態に依存した場合もあるし、何が原因で起きたのかが判断できないケースが多いのでデバッグするのは正直不可能です。エラー情報(NSError や NSException や API のレスポンス)があるかないかで全然違うので取得しておきたかったわけです。

Xcode 上でビルドする際にソフトウェアをインストール、設定する必要がない

Bugsnag の場合、dSYM の送信等は Run Script Phase で行っています。

デバッグしようとして気軽に試そうとしたら、Crashlytics のソフトウェアをインストールし設定しておかないとビルドできません。まぁソフトウェアの方が Crashlytics が柔軟にメンテナンスできたりするのも分かるんですけど、とはいえ初期セットアップの工程を減らしたい思いもあります。

Bugnag SDK が Github 上で公開されている

なんだかんだでソースコードが公開されてることがとてもよかったです。意図した挙動をしない時などソースコードみればどうとなりますし、バグをふんでも自分でなおして PR おくればいいので、これは本当によかったです。

あって便利だなと思ったもの

CocoaPods で SDK を管理できる

リポジトリに入れて管理するわけではないので、バージョン管理がしやすい。

iOS のみでなく Application や他のプラットフォームのエラーレポートを一元管理できる

API や Android のレポートを同じサービスで集約して管理できるのは便利ですね

Github に issue をおこせる

ボタンひとつで issue を作成することができます。これがとても便利!
issue を close すると Bugsnag へも連携して…とかはできませんが、ただ作るだけでも相当便利です。

Adhoc や Release など Build Configuration によって分けられる

あるにこしたことがないですけど、この機能がなくても Adhoc 配布の場合は拙作の dealforest/DFTDebugScreenshot をつかえば、気軽に Adhock で配布した際の情報をを集めることができます。

Adhock 配布時の効率的なデバッグについて考えてみた」辺りが参考になります。

まとめ

今のところ Bugsnag で満足しています。Bugsnag 以外でも他に良さそうなサービスがあったら教えてください。
ではでは。

Posted in ios | Tagged

iPhone Simulator で zoom モードを再現するまでの過程

By | 2014年10月9日

「Xcode 6 時代のマルチデバイス対応 ~Size Classとベクター画像~」を参考にしながら 6/6 Plus に最適化させようとしていたのですが、iOS 8 から追加された zoom/standard モードを iPhone Simulator でデバッグするにはどうすればいいのかを調べていてカオスってたのでメモ。
そもそも iPhone Simulator で zoom/standard モードの切り替えができないのがどうかと思うけど。。。

先にまとめだけいうと、zoom モードにした実機でするのが一番確実

さて 6/6 Plus の解像度に対応しようとすると zoom/standard モードのサイズを考慮する必要があります。
サイズは 6 Plus の UIScreen の bounds です。
* zoom モード(375×667)
* standard モード(414×736)
* 解像度を対応させない(320×568)

6/6 Plus の解像度に対応させる方法

「Xcode 6 時代のマルチデバイス対応 ~Size Classとベクター画像~」より引用

* Launch 画像を登録する
* Launch Screen Fileを指定する

対応表

zoom/standard モードで解像度を対応している/いないかで [UIScreen mainScreen].bounds.size, [UIScreen mainScreen].scale, [UIScreen mainScreen].nativeBounds.size, [UIScreen mainScreen].nativeScale のそれぞれ値を取得してみました。

iPhone 6 Plus

bounds scale nativeBounds nativeScale
zoom – 非対応 320×568 2.000000 921.60004×1635.8401 2.880000
zoom – 対応 375×667 3.000000 1080×1920.9601 2.880000
standard – 非対応 320×568 2.000000 834.78265×1481.7391 2.608696
standard – 対応 414×736 3.000000 1080×1920.0001 2.608696

iPhone 6 Plus Simulator

iPhone 6 Plus Simulator では standard モードのみ実行可能。

bounds scale nativeBounds nativeScale
standard – 非対応 320×568 2.000000 960×1704 3.000000
standard – 対応 414×736 3.000000 1242×2208 3.000000

そこで zoom モードの解像度を再現するために Resizable Simulator を使えば可能なのでは?!と思いたって試してみました。

Resizable Simulator

起動後に w375 x h667 に変更して試してみました。

bounds scale nativeBounds nativeScale
非対応 768×1024 2.000000 1536×2048 2.000000
対応 768×1024 2.000000 1536×2048 2.000000

Simulator のサイズは変わってるけど、UIScreen の bounds が。。。
おそらくバグだと思われるけど UIScreen でほしいサイズはは Resize した後のサイズなのに。。。
UIScreen の bounds を元にしてコード上で自分でレイアウトしている場合はこれだと再現できないですね。

まとめ

AutoLayout のレイアウト確認くらいだと Resizable Simulator で確認できる。
とはいえ scale が 2 になっているためおそらく @2x を使いそうなので、その辺りの動作確認は zoom モードにした実機で確認するのが一番確実だと思います。
自力でレイアウトしている場合は何も考えずに実機でやりましょう。

あと Storyboard の preview も standasrd/zoom の切り替えはサポートしてないみたいですね。

何かいい方法があったりしたら教えてください。