【書評】『軽量・高速モバイルデータベースRealm入門』

著者の菅原さんから『軽量・高速モバイルデータベースRealm入門』を献本いただきました。
表紙に書いてある通りSwift 3でのiOSアプリ開発を前提とした本になります。
ちなみに、世界初のRealmの書籍だそうです。


Realmは2014年リリースのモバイルファーストのデータベースで、最近は使っているアプリもかなり増えてきています。
自分も一昨年から使っていますが、CoreDataよりも使いやすくて気に入っています。


Realmの公式ドキュメントは結構しっかりしていて、しかも日本語版も充実しているので、アプリに組み込んで利用するハードルは決して高くありません。
しかし、本書を読むと「こんな楽な方法があったのか」とか「ここに注意点があったのか」という発見がかなりありました。


『軽量・高速モバイルデータベースRealm入門』は以下のような構成になっています。

  • Part1:入門編
  • Part2:基礎編
  • Part3:活用編
  • Part4:実装編~ Twitter クライアント作る
  • Appendix A:API リファレンス


「Part2:基礎編」で紹介されているRealmの基本的な仕様や使い方の範囲は公式ドキュメントとほぼ同じだと思いますが、公式ドキュメントでは必要最小限のコード例しかないのに対して、本書では前後のコードを含めた具体的なコード例が多数掲載されているのでより理解しやすくなっていました。


「 Part3:活用編」では、知らなかったら開発中に長時間ハマってしまいそうな注意点などがまとまっていて、一度目を通しておくと後で困った時に役立ちそうです。


「Part4:実装編」はTwitterクライアントを作るという実践的な内容ですが、著者の菅原さんはAplosというTwitterクライアントをリリースしている方なので、サンプルコードは簡潔ながらもかなり本気な実装になっていると思われます。


iOSアプリ開発でのRealm利用に特化しているだけあって、データベースとしての仕様解説というよりは実際の開発時に役立てられる知識を網羅していて、iOSでRealmを使ったアプリを作る人は持っておいて損はない本だと思いました。

15 inch MacBook Pro (Late 2016)ではデフォルトのディスプレイ解像度がドットバイドットではなくなった

15 inchのMacBook Proの内蔵ディスプレイの解像度は2880 × 1800で、これはRetina化されたMid 2012モデルから最新のLate 2016モデルまで変更されていません。

MacRetinaディスプレイでは2 × 2の4ピクセルを使って1ポイントを表現するので、2880 × 1800をそのままドットバイドットで使うと擬似解像度が1440 × 900となります。

15inchのMacBook Pro

  • 1024 × 640
  • 1280 × 800
  • 1440 × 900
  • 1680 × 1050
  • 1920 × 1200

の5種類の疑似解像度を設定できますが、今までデフォルトの疑似解像度はドットバイドットで表示できる1440 × 900でした。

しかし最新のMacBook Pro (Late 2016)からはデフォルト設定が1段階広い1680 × 1050に変更されています。
f:id:frnk:20170117094103p:plain
つまり、解像度2880 × 1800のディスプレイに3360ピクセル × 2100ピクセルの画面を縮小表示する設定がデフォルトとなったことになります。

2014年にiPhone 6 Plus(解像度1,080 × 1920のディスプレイに1242ピクセル × 2208ピクセルの画面を縮小表示)が出た時点で、Appleピクセル密度が高いRetinaディスプレイではドットバイドット表示にこだわらず必要に応じて縮小表示を選ぶ方向になっていました。
iPhoneに比べてピクセル密度が低いMacBook ProRetinaディスプレイでも同様の方針をとるようになったことになります。

実際、縮小表示でも表示クオリティがそんなに下がらないので、作業効率の良い広めの疑似解像度をデフォルトにするのは正しい変更ではないでしょうか。

ちなみに自分はMid 2012モデルを買った時からずっと1920 × 1200の最大疑似解像度を愛用しています。

TouchBar付き15 inch MacBook Pro をしばらく使った感想

実は15 inch MacBook Pro(Late 2016)を購入してまして、使用開始して3週間くらい経ったので現時点での感想を書いておこうと思います。

TouchBar

今のところそんなに便利という感じはしないです。
ただ、デフォルトで一番右側の押しやすいところにSiriボタンが設定されているので、Siriを活用してみようという気になります。
主に以下のような感じでApple Musicの音楽を適当に流してもらうために使っています。
f:id:frnk:20170120124559p:plain
f:id:frnk:20170120124608p:plain

TouchID

もうTouch IDなしのMacは使いたくないレベルで便利です。
Macのログイン時だけでなく、1Passwordでパスワード入力するときにも使えます。
https://itunes.apple.com/jp/app/1password/id443987910?mt=12&uo=4&at=11ldBU

薄いキーボード

ストロークが浅すぎて打ちにくいという声を結構聞きますが、自分は全く問題なく打てます。
むしろ今までのMacBook Proのキーボードを触ると深く感じるくらいです。
若干タイプミスが増えた気もしますが、おそらくこれは巨大化したトラックパッドを手が無意識に避けていてホームポジションが変わったせいでしょう。
もともと自己流ブラインドタッチなので、これはそのうち慣れるんじゃないかと思っています。

巨大トラックパッド

広くてどこでもクリックできるため、デフォルトのクリックして引きずるドラッグ操作で使ってもそこそこ使えます。
ジェスチャーも大きくできるのも良いです。
Taptic Engineの疑似クリック感がよくできているので、設定はデフォルトのまま「タップでクリック」をオフにして使っています。

ただ、Mission Controlのスペースを移動しようとして3本指スワイプをしたら、2本指スワイプに誤判定されてウインドウ内の横スクロールやページ戻りが発動してしまうことが多々あるので、ソフトウェアの方の最適化がまだまだなのかなという感じがしています。

USB-C

外部接続がUSB-Cのみで、充電もこれで賄うという割り切った仕様については、作業用のデスクで使うぶんには大きな不便を感じていません。というのも、もともと使っていたUSBハブにUSB-C - USBアダプタを組み合わせても問題なく使えたためです。おかげでアダプタを付けっ放しにしたハブをつなぐだけでLightning・Dock・micro USBのケーブルに同時に接続可能にできています。

しかし、デスク以外の場所でiOSアプリ開発の作業するときには、LightningケーブルにUSB-C - USBアダプタを繋げる必要があったりするのがちょっと不便です。
同様に、USBメモリや外付けHDDを使ったりするときに若干のめんどくささはあります。

変換アダプタ

USB変換アダプタは純正のUSB-C - USBアダプタを2個を買いました。
純正ではなく以下のような直接コンパクトに変換するタイプも安いしいいかなと思ったんですが、隣接するUSB-Cポートと干渉してしまうというレビューを見たので素直に純正にしました。
[asin:B012FUO62U:detail]

他にはプロジェクター接続用にHDMI変換アダプタも買いました。純正のものは充電ポートがあったりUSB-Aの変換機能があったりしてProじゃないMacBookで使うのには良さそうな仕様ですが、USB-Cが4ポートあるMacBook Proにはそこまでいらないので単機能でコンパクトなAnkerのHDMI変換アダプタにしました。
[asin:B01N0O7NAT:detail]

電源

電源がMagSafe 2からUSB-Cに変わってしまったことで電源ケーブルの付け外しの気楽さはなくなったものの、自分の現在の作業場所は右側に電源があるためケーブルの取り回しが良くなったため一長一短といったところです。

総評

今回は移行アシスタントを使わずにゼロから設定したこともあり、新鮮な気持ちで使えています。
以前のMacBook Pro 15 inch(2012年モデル)と比べて重たいと感じることがほとんどなくなりました。メモリの増加やSSDの速度向上が効いているんでしょう。
しかし、モデルチェンジ初代機ということもあって上記のトラックパッドジェスチャ誤判定など細かな不具合がちらほらあります。先日も音量が一定以上大きくならなくなり、接続していたiPhoneを外すとなぜか直るという謎現象がありました。とはいえ、買った当初には多発していたソフトの強制終了は先日の10.12.3アップデート以降かなり減ってきていたりするので、macOSのアップデートで細かい問題は次第に直っていくんじゃないかと思っています。

1月28日(土)に「iPhone Dev Sapporo勉強会」と「みんなで Swift 復習会 GO! in 札幌」が開催されます。 #devsap #minna_de_swift

1月28日(土)に札幌のiOSアプリ開発者コミュニティ・iPhone Dev Sapporo主催の勉強会と新年会をおこないます。
devsap.connpass.com
devsap.connpass.com

今回は横浜の @es_kumagaiさんが来札され、勉強会当日の午前中に「みんなで Swift 復習会 GO! in 札幌」を開催される予定です。

cswift.connpass.com


iOSアプリ開発者にとって盛りだくさんの1日になりそうです。ぜひご参加下さい。

XcodeでArchiveするたびにBuild番号を自動更新する方法

前々からやろうやろうと思っていたアーカイブ時のビルド番号の自動更新。
ようやく重い腰を上げてやってみました。
多分これが最もシンプルな方法です。


1. XcodeのBuild PhaseにRun Scriptを追加する。

2. 以下のコードをコピペする。内容はInfoPlistファイルからビルド番号を取得して+1して元のファイルに書き込んでいるだけ。

infoPlistFile="${SRCROOT}/${INFOPLIST_FILE}"
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${infoPlistFile}")
buildNumber=$((${buildNumber%%.*} + 1))
/usr/libexec/PlistBuddy -c "Set:CFBundleVersion $buildNumber" "${infoPlistFile}"

3. Run script only when installingにチェックを入れる。ここにチェックを入れることでアーカイブ時にのみScriptが実行されるようになる。

4. Run Scriptを出来るだけ上の方にドラッグする。実行する順番を早くするため。

5. ターゲットが複数ある場合はそれぞれに同様にRun Scriptを追加する。


以上でアーカイブするたびにビルド番号が自動で1ずつ増加するようになります。


初めはもっとシンプルにagvtool next-version -allをRun Scriptで実行しようとしたのですが、それだとアーカイブが必ずキャンセルされてしまいました。
色々調べていたところ上記のやり方に至りましたが、その中で見つけた@es_kumagaiさんの記事が詳しくて参考になりました。ありがとうございます。
program.station.ez-net.jp

FastEver 2のブラックフライデーセールを開催中です。

2016年は日本でもブラックフライデーのセールをするお店が増えているそうですね。
その流れに乗ったというわけでもないですが、本日からブラックフライデーセールとしてFastEver 2を50% OFFで販売しています。


FastEver 2はEvernoteに素早く簡単にメモを保存するためのアプリです。
アプリを起動するとすぐに入力画面になるので、アイデアメモや備忘録などに最適です。
オフライン時に保存したメモも、オンラインになったあとで自動的にバックグラウンド送信されます。


ぜひこの機会にお買い求めください!


https://itunes.apple.com/jp/app/fastever-2-su-zaoku-jian-dannimemo/id1039596715?mt=8&uo=4&at=11ldBU