kumamotone’s blog

iOS/Android アプリエンジニアです https://twitter.com/kumamo_tone

potatotips #42 に参加しました (iOSブログまとめ)

potatotips #42iOSブログまとめ枠で参加させていただきましたのブログです。

様子です。クックパッドさんで開催されたのですが手作りポテトチップス以外にも手作りの料理(プロの仕業だとか)がテーブルに並んでおり大変おいしかったです。

では以下発表内容です。

iOS11でのHEVC動画のHLS配信 / YuyaHorita さん

speakerdeck.com

HEVC(H.265)は、よく使われているH.264に比べて圧縮率2倍の映像コーデック。

このHEVCを、HLS(アップルが自社iOS向けに開発した、HTTPベースのストリーミングプロトコル)で配信しようとしたとき、うまく再生できないことがあった。原因はbitstreamがhev1になっていたから。

HEVCにはhev1とhvc1の2つの種類があり、iOS11/High Sierra で再生できるのはhvc1のほうだった。MP4Boxを使うとhvc1に変換できる。

というわけで、iOS11にHEVC動画をHLS配信するときは、bitstreamに気をつけましょうとのこと。

CoreMotionを使って気づいたこととiOS11での新機能 / tattn(@tanakasan2525)さん

speakerdeck.com

CoreMotionは端末の傾きや歩数など、デバイスの動きやそれからわかる人の動きなどを取得できるフレームワークiOS4から提供されているが、iPhone5s以降のコアプロセッサM7以降で大幅機能強化された。

使ってみて気づいたこととして以下のようなことがあった。

  • 情報が少ない
  • プロパティ名がわかりづらい
    • 1例として、xArbitraryZVertical と xArbitraryCorrectedZVertical というのがある。Correctedがついているほうは実は磁気センサを使っており、これを使うとCPU使用率が上がる
  • ドキュメントが改行に失敗してたりして雑
  • I/Fがやる気なくてSwiftから使いにくい

iOS11の新機能にも触れられていました(あんまり更新されてないなという印象)。ほぼ全機能を使ったCoreMotionのサンプルアプリを作ったので、CoreMotionを使ってどういうものが取れるか興味ある方は試してみてくださいとのこと。

github.com

簡単に激安感を表現するライブラリを作りました / hirose_yudai (@yhirose741)さん

speakerdeck.com

NSAttributedString にはいろいろつらいところがある。

  • Dictionary で指定するのがつらい(何があったか忘れる)
  • 型を間違えるとクラッシュして危険
  • NSRange での範囲指定

など。そのため NSAttributedString を簡単に扱えるライブラリを作った。メソッドチェーンで設定できて、使用例として、スライド中では激安感(お店のPOPとかでよくあるやつ)を表現するサンプルコードも紹介されています。

ライブラリは以下で公開されていて、issue、PR、コメントなどお待ちしていますとのこと。でも一番嬉しいのはスターとのこと(それはそう)

github.com

海外カンファレンスに招待された事情 / pancake (@jpmartha_jp)さん

ベラルーシであったMobile Optimized 2017というカンファレンスに行ってきた。招待された経緯はオフレコ。

招待されるまでに、以下のような活動をされていた。

  • 英語でブログを執筆
  • Swift Package Managerなどのオープンソースにコントリビュート
  • ニューヨークのミートアップで登壇

勉強方法として、WWDCのセッションやRealmが公開しているトークを聞いたり、Podcastを聞いたり、Slackでの英語のやり取りというのを挙げられていました。逆に、英会話や、TOEICなどの試験勉強はしたことがない(受けたことない)。

国際カンファレンスでは、英語が得意でない参加者もいたりして、下手な英語でもOKなのでゆっくりはっきり話すことが重要、英語のうまさよりいかにトークに惹きつけるかが重要とのこと。

AutoLayoutのデバッグをちょっとだけ楽にやる / @hiragramさん

スライドは公開され次第追加します(発見できていないだけでしたら申し訳ありません)

Autolayout が矛盾していたりしてコンソールにエラーが出たとき、意味不明でつらい。しかし、

  • View の accessibilityIdentifier を設定
  • NSLayoutConstraint の identifier を設定

しておくとエラーのメモリアドレスで表示されていた部分が、指定した Identifier になって読みやすくなる。

また、unsafeBitCastを使うとメモリアドレスから任意の型のインスタンスを得ることができて、たとえばUIViewにキャストして、背景色を変えるとか、色枠をつけるとかができる。

これを利用して、アドレスを渡すと対象のViewに色枠を付けてくれるLLDBプラグインをつくったとのこと。以下のブログで紹介されています。

hiragram.hatenablog.jp

Swift4 で進化した Range / ezura (@eduraaa)さん

スライドは GitPitch 形式で公開されています。 https://gitpitch.com/ezura/P_Swift4_Range/master?grs=github

Swift3 までの Range は、 Range (0..<5.0) ClosedRange (0...5.0) CountableRange (0..<5) CountableClosedRange (0...5) の4種類だった。Closed〜 は 閉区間Countable〜 はInt刻みとか、離散的な空間を表す。

Swift4 では One-sided Ranges が追加され、 ...i のような、片側だけの範囲指定が可能になった。 (今までは0...i のように両側指定するか、 let greeting = s[s.startIndex..<i] のような冗長な書き方が必要だったが、可読性が向上した) 具体的には新たに PartialRangeFrom (5.0...) PartialRangeUpTo (..<5.0) PartialRangeThrough (...5.0) CountablePartialRangeFrom (5...) が追加された。

また、Swift3まではRangeを表すprotocolがなく、それぞれのRangeは独立した存在だったのですが、Swift4 では protocol RangeExpression が追加され、すべてのRangeが準拠することで、統一的に扱えるようになった。

スライドでは具体的な使いかたも併せて紹介されています(zip(1..., ["🍎", "🍇", "🍐", "🍓"])ができるのは面白いなと思いました)。文字列だけじゃなくてArrayの範囲だとか、発表者のezuraさんは最近、発表資料を作る前に技術的な部分をマインドマップで整理してるとのことで、coggleでまとめたものを公開されていました。併せて読むと理解が深まると思います。

Introducing Feedback Tool - Ajimi / @nakajijapanさん

speakerdeck.com

Ajimiというフィードバックツールを作ったので紹介。誰でもいつでも簡単にという意味合いを込めてAjimi(味見)。

フィードバックは大変。スクリーンショットを撮って→GHE開いて→issueを作る→スクリーンショットを貼り付け→どのデバイスで、どんなバージョンで使ったのかを書く…この一連の動作を自動化したかった。

既存のものとしてbaltoInstabugSupporterKit(DeployGate製)を調べた。共通してSDKがある、画像と動画が扱える、コラボレーションツール(GithubやSlackに投稿する)などの利点がある一方、議論される場所が分離されてしまうという欠点もあり、それらを意識して作った。

GHE、deploygate、Gmazeを使っている。スナップショットを取る機能と、ビデオを撮る機能。ビデオは5秒間撮影可能で、 勝手に gif にしてGithubにアップロードしてくれる。課題に感じていることは、現状誰が投稿したのかわからないこと、GHEを使っているので社外ネットワークから使えないこと。

コードはGithubで公開されています。

github.com

Vision Framework 入門 / Motoki Narita (@motokiee)さん

speakerdeck.com

Vision Framework は、iOS11で追加される、顔認識や特徴検出、画像の分類など機械学習の機能が使えるフレームワーク。同じくiOS11 で追加される Core ML が内部で使われていて、端末単体で動作することができる。

これを使ってバーコードリーダーを作った。 CIBarcodeDescriptorというのを使うとバーコードが取り出せるはずだ、と思ったができなかった。

正確には、バーコードの検出自体はできたのだが、CIBarcodeDescriptorにISBNコードの取得する関数などがあるのではないかと思ったのだが、実際には何も実装がなくISBNコードを取得することができなかったとのこと。ただバーコードの位置と、検出したものがISBNだということは分かっているもようで、ISBNコードの取得自体もそのうち対応される可能性はあるだろうとのことでした。

感想

  • potatotips参加3回目だが、毎回参加してよかったという気持ちになる。今回もとても良かった
  • 司会の @giginet さんが使っていた タイマーアプリのアラーム音がちょうど良い具合だったので、使ってみたいと思ったのだが配信停止されていて悲しみに包まれた
  • また参加したい