Tamablog

たまに更新するiOS/Mac系技術ブログ。

macOS native symposium #2

狂気の勉強会」と言われたmacOS native symposiumの第2回目が開催されたので行ってきました!相変わらず拘りを持つ方たちばかりで学びも多かったです。

特に面白かった点を挙げていきます。

  • 環境設定ウインドウはパネルなのでEscで閉じるべき
  • 環境設定ウインドウでは最後に表示したペインを保持する
  • ペイン切り替えの流れは、ペイン非表示→ウインドウ変形→ペイン表示&ウインドウタイトル変更
  • 英語の後に日本語が来てもスペースを空けない
  • 括弧は全角を使用。コロンは半角。スラッシュも半角。
  • macOSに恩返しをする精神でアプリを開発する
  • ダークモードではNSScroller.KnobStyle.defaultの色が変わる
  • AudioServicesPlaySystemSound()で「あの音」が鳴らせる

他にもアプリで使ってはいけない単語リストが紹介されたり、

f:id:tamadeveloper:20181226225634p:plain

NSSharingServicePickerをmouseUpで呼ぶと警告が出ることまで紹介されました。

f:id:tamadeveloper:20181226225659p:plain

今回は自分もスピーカーとして参戦しました。拙作カレンダーアプリのMac版で自作のスクロールビューを作った話をしてきました。

発表後も質問してもらったり、いろいろ話しかけて下さった方が何人もいて、Mac開発者の絆を感じました。次回は来年3月のtry! Swift前後になるそうなの楽しみです。

俺コン&リジェクトコンに行ってきた

iOSDCでリジェクトされたトークを聞きにいける俺コン&リジェクトコンに行ってきました。どちらも1日目しか行けなかったのですが、面白いトークがいくつかあったので紹介します。

f:id:tamadeveloper:20180927221347j:plain

非同期UI描画による高速なアプリケーションの実装

日経は以前から60fpsを目指したり、PWAに取り組くんだり、Webサイトを爆速化したりと、パフォーマンスに関しては妥協せずに取り組んでいるというイメージがあります。今回もTextureというフレームワークを採用して高速化を図ったというお話でした。デモビデオでは確かにiOS版アプリのカクツキがなくなっており、目で見えるくらいのスピードアップが達成されたようです。

このTextureというライブラリの仕組みが気になったので調べてみました。基本的にはオフスクリーン画像に描画してCALayerを使って表示する、という仕組みのようです。詳しくはQiitaに書いています。

ブラックボックスなコードに対して少しずつテストを書いていくためのテクニック

毎回素晴らしい内容を発表する @k_katsumi さんのセッションです。今回も相変わらずのクオリティーで、会場も仕切りをなくしてひとつの大部屋にした形で行われました。

一番強調されていたことは「まずは最初のテストを書いてCIで動かす」という事です。ひとつでもテストが動けば、テストの追加コストは低くなるので続けやすくなります。どんな簡単なテストでも良いので始めることが大切との事でした。

個人的に面白かったのはiOSSnapshotTestCaseというツールです。元はFacebookが開発し、今はUberがメンテナンスしているツールで、アプリのスクリーンショットを比較することでUIをテストすることができます。アプリのUIの部分は一番テストが難しいところなので、非常に興味深いお話でした。なお、画面に収まらない部分でもスクリーンショットを撮影することが可能との事です。

資料は加筆してから公開されるようなので乞うご期待。

Swiftをより良くする

@d_date さんがSwiftのDictionaryに新しいAPIとなるcompactMapValuesを提案し、無事Swift 5での採用が決定したというお話でした。ソースコードでrejectNilHeaders()という関数の実装を見たことがきっかけとなり、より良い実装を考えた結果、compactMapValuesのアイデアに辿り着いたとの事でした。

発案、実装、テストを経てSwift Evolutionにプロポーザルを提出し、採用されるまでの体験談はなかなか聞く事ができません。日本人でこれを話せるのはこの方だけではないでしょうか。非常に興味深いお話でした。

iOSDC 2018参加レポート

iOS開発者のお祭り的イベントであるiOSDC Japan 2018に行ってきました。前年より1日増えて計4日間のイベントで、場所は早稲田大学です。3日間参加してきました。

f:id:tamadeveloper:20180903115702j:plain

iOSDCはミニWWDCのようでした。発表内容は勉強になることが多く、またAsk The Speakerはラボみたいな感覚で気になることを質問できるので参考になることが多いです。try! Swiftの時も思ったのですがAsk The Speakerに行く人はあまり多くない印象なので、何か質問を考えて行ってみるとより多くを学べるのではと思います。

個人的に勉強になったセッションをピックアップしてみました。

iOSと(深層)強化学習

機械学習はコンピューターでやるもの、またニューロネットワークはブラックボックスみたいなもの、という自分の先入観を覆してくれたセッションです。TensorFlow LiteもCoreMLも推論しかできないので、端末側で学習できるというのは非常に新鮮に感じました。デモビデオではロボットが学習する過程を見れるようになっており、学習がどのようにロボットの行動に影響を与えるのかを視覚的に見ることができて、初めて機械学習の仕組みを理解できたような気がします。ニューロネットワークを自作してみたくなった、というツイートをいくつも見かけました。

Depth in Depth

ベストトーク賞3位に選ばれた@shu223さんの深度に関する発表です。写真の背景を飛ばして人をくり抜いたりするのに使える深度データですが、取得方法は複数あり、それぞれの使い方を解説していました。利用シーンに応じて取得方法を変える必要があるとの事です。また「具体的な事例」では、深度データで何ができて何ができないのかを分かりやすく説明してくれました。

SwiftからPythonのライブラリを使って機械学習する方法

本題に入るまでが長かったですが、個人的にはその内容がとても示唆に富んでいて面白かったです。まとめると機械学習は闇雲にデータを集めて学習させても駄目ですよ、というお話で大変参考になりました。本題のPythonをSwiftから呼び出すには、プレビュー版であるSwift 4.2の@dynamicMemberLookupと@dynamicCallableという新機能を使うとの事でした。このセッションで紹介されていたSwift for TensorFlowも面白そうです。

おまけ1

食事はこんな感じで美味しかったです。try! Swiftでは食事スペースがなくて床で食べる人も多かったのですが、iOSDCでは食堂があるので落ち着いて食べられます。

f:id:tamadeveloper:20180903115717j:plain

おまけ2

去年は台風が来ていたのでそれに比べればだいぶマシですが、今年も最終日に雨が降りました。

macOS native symposiumに行ってきた

iOSDC前日にmacOS native symposiumというイベントが開催されたので行ってきました。ちなみに2月のtry! Swiftの時も、前日にtry! macOS meet-upというイベントがありました。

主催者はCotEditorの作者の@1024jpさんで、コアメンバーが3人。どの方もすごい拘りを持つ人たちでした。ツールバーの話ではNeXTSTEPまで遡るほどです。

思わず唸ってしまうような話もたくさんありました。

  • Sketchのスクロールを爆速にするためにNSResponderのメソッドをSwizzlingするプラグインを開発。
  • Happy MacはMacOS X Jaguarから出なくなった。
  • マウスカーソルのクリック検知点は黒矢印の先である。
  • HIGではツールバーの機能はメニューでも提供すべき、とあるのに検索バーはツールバーからしかアクセスできない場合が多い。
  • Macにおけるクローズボタンは左にあるべきなのに、Chromeのタブは右で閉じる。
  • カラーボタンのアイコンのお手本はPages, Keynote, Numbersくらいしかない。

他にもツールバーのボタンを断面で見てみたり、

f:id:tamadeveloper:20180831210525j:plain

環境設定画面の「一般」用のアイコンが独自に作られすぎていることを指摘したり、

f:id:tamadeveloper:20180831210505j:plain

といったマニアックな話ばかりでした。ちなみにMacではWindowを「ウインドウ」(イは小さくしない)と書きますが、これは「基本」だそうです、、

そんな感じでまさに狂気の勉強会でした。第2回目もあるようなのでまた行きたいと思います!

MRJミュージアムに行ってきた

三菱重工が開発する50年ぶりの国産旅客機、MRJ。そのミュージアムが昨年11月にオープンしたので夏休みに行ってきました。iOS/Macとはあまり関係ありませんが*1、とても面白かったので書いてます。子供の自由研究とかにもオススメです。

f:id:tamadeveloper:20180823171013j:plain

MRJミュージアムとは、三菱重工MRJ最終組立工場内にあるミュージアムです。完全予約制で料金は大人1,000円、高校生800円、小・中学生は500円。2ヶ月先まで予約できますが、すぐに埋まってしまうので早めに予約するのが良いです。ただキャンセルもたまに出るようです。自分の場合もある日チェックしてみたら2日後に空きができていたので、すぐに予約して行くことができました。子供でも身分証明書が必要になるのでお忘れなく。

f:id:tamadeveloper:20180823171031j:plain

当日はあいち航空ミュージアムからバスで出発となります。予約の際にあいち航空ミュージアムのセット販売券が購入できるので、こちらをオススメします。あいち航空ミュージアムも昨年の11月にオープンしており、50年前の国産機YS-11の実物が見れます。YS-11はプロペラ機ということで小型機を想像していたのですが、予想以上に立派な旅客機でびっくりしました。また今後はMRJの実機も展示される予定があるとのことで、こちらも楽しみです!

f:id:tamadeveloper:20180823171047j:plain

MRJミュージアムに話を戻すと、約1時間半のツアーで実にさまざまなことを知ることができます。滑走路に書いてある数字の意味や、MRJのデザインや色の由来、また歌舞伎の一面が取り入れられていることも学べます。また機内に施された照明やシート、荷物入れにまつわる数多くの工夫を知ると、ぜひ本物に乗ってみたくなります!飛行機の先端には多くのセンサーが備え付けられていることもまったく知りませんでした。

またツアーではエンジンのメーカーのことや炭素繊維についても紹介してくれます。自分はその後エンジンメーカーを詳しく調べて、世界には航空機向けのエンジンを作っているメーカーが3つあることを知りました。そのうちのひとつは超高級車でも有名なロールスロイス!

こんな感じで航空機やMRJに関するさまざまな知識を得ることができます。まだクリアしなくてはならない課題が多く残っていますが、MRJが世界中の大空で飛べる日が来るように応援し続けたいと思います。

*1:ちなみにアップルもMRJという製品を出していたことがあります、、

iOS 12 Programming

技術書クラウドファンディングPEAKSで「iOS 12 Programming」執筆プロジェクトがスタートしました。内容はiOS 12だけでなく、最新のmacOSやtvOSまで網羅しています。

peaks.cc

今回、macOS Mojaveの章を担当することになりました。今年は初めてWWDCに参加したのですが、ダークモードやUIKit for Macの発表はキーノートで一番盛り上がりましたので、それらを中心に実装方法などを解説します。本書を購入してくださる方はほとんどがiOS開発者だと思うので、iOS開発者にも役立つような内容にしたいと考えています。

例えばMojaveに搭載されているStockやボイスメモなどのアプリはダークモードに対応しています。つまり内部的にUIKitはダークモードに対応しており、来年にも開発者にAPIが開放される可能性がありますので、Macアプリのダークモード実装はiOSアプリにも参考になると思います。自社製品のMacアプリでもダークモード対応作業を進めていますので、その知見も共有します。

またUIKit for Macは開発者が本格的に使えるようになるのは来年になりますが、今から準備できることがいくつもあります。例えばiPhoneアプリをiPadやUIKeyCommandに対応させておくとMacへの移植が楽になりますし、またFirstResponderをコントロールすることで、上下キーやTabキーなどの操作を正しく処理できるようになります。このように今からできることについて詳しく書きたいと思います。

本書はクラウドファンディングなので多くの方からのご支援が必要となります。期限まであと一週間ほどになりましたので、ぜひ応援宜しくお願いします!

7月5日追記:無事達成しました!たくさんのご支援ありがとうございました!

WWDC2018現地レポート:総括編

WWDCも無事終了し、日本に戻って来ました。今年のWWDCを簡単にまとめてみます。

f:id:tamadeveloper:20180611085910j:plain

新機能

iOS 12は特に大きな目玉機能が追加されたわけではありませんが、iOS 12は順当なアップデートであると思います。特にARの分野では「USDZ」ファイル、サイズを測定できる「メジャー」アプリ、マルチプレイ対応の「ARKit 2」などが登場しました。またSiriのショートカット機能も便利そうです。また個人的にはアプリの利用時間が分かる「Screen Time」機能が嬉しいところです。

Macではダークモードが導入されました。セッションを聞いた限りでは対応は大変そうですが、Mojaveのリリースまでには間に合わせたいと思います。またDesktopやFinderに追加されたスタック機能やプレビュー編集機能などはなかなか使えそうです。

またMarzipanでUIKitアプリをMacに移植できるようになりました。MacとiPadは画面サイズが似ているため、結果的にiPadにも対応するアプリが増えるのではと思います。

ラボ

今回何度もラボに通って分かったことですが、一番詳しく知っている人と話すことがとても大事だと思いました。例えばUITextViewとNSTextViewに関して聞きたい事があったのですが、UIKitとCocoaのラボに行っても解決しませんでした。そこでText and Fontsラボに行ってみると、とても詳しい方があっという間に質問に答えてくれました。また別のラボでもサンプルコードを書いた本人とお話できて、詳しく見てもらうことができました。同じラボは週2~3回くらいあって違う人が来る可能性もあるので、何度も足を運ぶのは大事だと思いました。

Odwalla

WWDCといえばOdwalla(通称:小田原)ですが、今回は朝食とおやつの時間に会場入り口付近で主に配布されており、オレンジ以外にもチョコレートやフルーツミックスなどの味がありました。一応「No Added Sugar」と書かれていますが、それでもオレンジやフルーツミックスはかなり甘かったです。

f:id:tamadeveloper:20180611090504j:plain

おまけ:Lime

サンノゼの街にはいたるところにシェア電動スクーターが置いてあり、LimeとBirdという会社が提供しています。Limeを使ってみたのですが、アプリをダウンロードして電話番号(日本の番号でも大丈夫でした)を登録し、その後はApple Payで支払いができます。使用料は$1、その後1分ごとに15セントという値段です。スクーターに付いているQRコードをアプリで読み込むと使えるようになります。

使い方は簡単で、右手でボタンを押すと加速し、左手のブレーキで止まります。加速は緩やかなのでバランスを取りやすく、すぐに慣れることができました。驚いたのは最高速度が時速25キロほど出ることです。あまりスピードを出しすぎると危険かもしれませんが、基本的にはとても楽しく乗れる乗り物です。

またアプリを起動すると周辺にあるスクーターの場所を知ることができます。使い終わったらどこに置いても良いようですが、アプリで使い終わったことを知らせるボタンをタップする必要があります。

気になるバッテリーですが、調べてみるとスクーターは家庭でも充電することができ、その分お金がもらえる仕組みになっているようです。

f:id:tamadeveloper:20180609113538j:plain