LIFULL Creators Blog

「株式会社LIFULL(ライフル)」の社員によるブログです。

WWDC - Developer's Living 開催しました!

こんにちは!そして初めまして!LIFULL HOME'SのiOSアプリチームの又来です。新卒1年目の新米エンジニアです。入社して早くも3ヶ月が経ちますが、ようやく社会人生活にも慣れてきたところです。

さて、6/5-9にCA, San Joseで行われたWWDC 2017では、iOS11の発表やARKitなどをはじめとする新技術の発表がありましたね。

今回はその新技術の共有会ということで、「WWDC - Developer’s Living」を開催しました! f:id:LIFULL-mataraik:20170707151534j:plain

発表

Core ML / Vision Frameworkを使ってできること

@shingtさんの発表です。

Core MLを用いてiOS上で画像解析技術の利用をするための知識やできることについて発表していただきました。

画像解析技術の利用ハードルが低下した

Core MLは学習済みのモデルを扱うことができるので、Vision Frameworkと組み合わせることで精度が高い画像解析が行えるようになります。また、取り込んだ学習モデルを使って、物体検出などのTracking(物体の追跡)が可能になります。

今回新技術の発表があったARKitと組み合わせることで空間上に検出した物体を追跡しながら投影するなんてこともできそうですね。 f:id:LIFULL-mataraik:20170707151459j:plain

iOS11からの位置情報アプリの立ち向かい方

@SatoTakeshiさんの発表です。

iOS11から変更があった、位置情報について発表していただきました。

常に許可から「このAppの使用中のみ許可」に

iOS10までの位置情報の認証は、「常に許可」と、「このAppの使用中のみ許可」のどちらかをユーザーに問い合わせれば良いだけでした。しかし、今回からは常に許可しか問い合わせていないアプリも「このAppの使用中のみ許可」を 強制的に出すようになりました。

今回はその認証に対する変更点だけでなく、細かい変更部分など位置情報アプリを作るなら欠かせない変更点とその対策について紹介していただきました。 f:id:LIFULL-mataraik:20170707151506j:plain

WWDCに学ぶライブコーディング+CoreNFC

@fromkkさんの発表です。

WWDCでの発表はプログラムをリアルタイムに実行しながらコーディング行う、ライブコーディングが多いです。

そんなライブコーディングの良さをCoreNFCのデモ共に発表していただきました。

Xcodeのコードスニペット(入力補完)を使う

コードを書きながら発表するのは緊張したり、書くべきコードを忘れたりしますよね。そんな時はXcodeの入力保管を使って、まとめたいコードを簡単にショートカットに登録すると、発表中にど忘れしたりすることがなくいつでも呼び出しが可能になります。また、コメントを記述することもできるのでわかりやすそうです。

発表では、コードスニペットを用いてNFCタグの認証のデモを披露していただきました。

映像出力機器の不備でテレビのモニタに映しております。この度はご迷惑をおかけしました。 f:id:LIFULL-mataraik:20170707151512j:plain

iOS 11からのアプリ間ファイル共有

@ktanaka117さんの発表です。 iOS11からアプリ間でファイルのやりとりができるようになり、アプリ側で実装するためのやり方について発表していただきました。

ファイル共有には送信側、受取側どちらも対応する必要がある

渡したい画像などのファイルを送信するためには自身のアプリ側でファイル共有の対応をすれば良いですが、アプリ間で共有をする場合は受け取る側も共有の実装が必要になります。

この機能を使ったアプリがこれからたくさん出てくることがカギになりそうです。 f:id:LIFULL-mataraik:20170707151515j:plain

Dictionary for Swift4

弊社の塙 拓朗の発表です。

Swift4.0でDictionaryの機能が便利になりました。

Dictionaryが扱いやすくなった

Swift4.0での変更点をいくつか挙げると、

  • Key-ValueのペアになったSequeneタイプからDictionaryを生成できるようになった
  • 重複したKey(Sequenceタイプ)に対して処理が可能
  • 初期化だけでなく既にあるDictionaryに対しても行えるmergingとmergeが追加
  • FilterとMapの扱いが簡単になった
  • 取り出しの際にデフォルトが指定できる
  • Sequeneをグルーピングしやすくなった
  • あらかじめ容量を確保できるようになった

などなど、痒い所に手が届くようにパワーアップしました。

直接的な新機能ではありませんが、開発者としては嬉しいアップデートですね。 f:id:LIFULL-mataraik:20170707151523j:plain

PDFKit

@kishikawa katsumiさんの発表です。

Macでは使うことができていたPDFのプレビューですが、iOSでPDFKitが使えるようになったこと、簡単に実装できるようになったことをデモを交えて発表していただきました。

ページプレビューからスキップまで簡単に

PDFKitを使うと簡単にビューワーが作成可能になります。文字検索をしたり、ヒットした文字にattributeを指定してマーカーを引いたりすることができるようになります。また、文字検索での機能について、行をまたぐなどをすると空白文字が入ってしまい、検索にマッチしない場合があるので、空白や空行を取り除く処理が必要になります。

これまでiBooksなどのビューワーアプリを開発してきた方はこのPDFKitを使ってみてはいかがでしょうか。

デモを拝見しましたが、とても簡単に実装できていたので今後のアプリ開発が楽になりそうですね。 f:id:LIFULL-mataraik:20170707151527j:plain

ARKit

弊社の池田 和洋の発表です。

今回WWDCでの大注目を浴びたARKitの機能を用いたデモアプリについて紹介させていただきました。

拡張現実オブジェクトの合成を可能とするデモでは、平面を認識した位置にボールを出現させ、ボールが平面に衝突するとバウンドするようなものを実演しました。

特別なハードウェアはいらない

用意するのはiPhoneまたはiPadのみでARが使えるようになります。(厳密にいうと、A9以上のチップ内蔵のものなのでiPhoneは6s以上、iPadはProか第5世代のみ)

ARKitでは机や床など平面を認識することが非常に得意で、空間上に出現させたオブジェクトもブレることがほとんどなく、精度が非常に高いものになっています。 f:id:LIFULL-mataraik:20170707151529j:plain

最後に

共有会が終わった後はみなさんでワイワイ交流会!

懇親会ではじゃんけん大会を開催し、なんと景品は現地でしか買うことのできないWWDCのお土産です!(欲しい) f:id:LIFULL-mataraik:20170707151536j:plain

グッズをゲットした方々、おめでとうございます!! f:id:LIFULL-mataraik:20170707151547j:plain f:id:LIFULL-mataraik:20170707151550j:plain f:id:LIFULL-mataraik:20170707151552j:plain

WWDCで発表があってから数週間にも関わらずみなさん新機能を使った開発を既にスタートさせていました。

今回のアップデートで大幅にできることが増えているのは確かです。

最新の知見を共有する場にもなり非常にアツいイベントになったのではないかと思います。

これからのiOSアプリに期待です!

LIFULLエンジニアインタビュー #1 iOS&おうちハックエンジニア

こんにちは、この記事の校正のために textlint 試しているLIFULL HOME'S事業本部 技術開発部 の冨田です。

LIFULLエンジニアのインタビューを通して、なかで働くエンジニアはどんな人なのか、どんなことをしているのか、を知ってもらうきっかけになればと思い、このような取り組みを行っています。

前回の記事も是非ご覧ください。

ゲスト紹介

本日のゲストは LIFULL HOME'S事業本部 新UX開発部 の高橋さんです。 iOSアプリのLIFULL HOME’S と そのバックエンドを担当しているエンジニアです。

f:id:LIFULL-tomitam:20170710163146j:plain

続きを読む

LIFULLエンジニアインタビュー #0

LIFULL HOME'S事業本部 技術開発部 の冨田です。

LIFULLエンジニアのインタビューを通して、なかで働くエンジニアはどんな人なのか、どんなことをしているのか、を知ってもらうきっかけになればと思い、このような取り組みを始めました。

ゲスト紹介

本日のゲストはおなじく LIFULL HOME'S事業本部 技術開発部 の磯野さんです。

過去にはiOSアプリのLIFULL HOME’Sやオンプレミスからクラウドへのサーバ移行、Zipkinの導入なども担当され、現在はLIFULL HOME’Sを支えるアーキテクチャの刷新を担当しているエンジニアです。

f:id:LIFULL-tomitam:20170619095253j:plain:w320

目次

  • ゲスト紹介
  • 目次
  • 学生時代
  • LIFULL入社前
  • LIFULL入社後
  • 子どもが生まれてから
  • 技術のキャッチアップ方法
  • 育成と後輩エンジニアからの刺激
  • 好きな開発環境、言語など
  • 将来のビジョン
  • 次回予告
  • 編集後記
  • お知らせ
続きを読む

WWDC 2017 - LAST DAY -

こんにちは。iOS開発Gの池田です。
本日はとうとうWWDC最終日!

今回は最終日の様子、セッションについての内容、最後に昨日の夜にあったBashの様子について書きます。 (前回の記事はこちら)

出発

最終日!ということで、ちょっとした気合いを入れつつホテルを出たのですが、こんな日に限ってあいにくの雨模様。
ここ最近の晴れ具合であったり、UBERで乗せてもらった方から聞いた話からも雨降りはなかなかレアな気がします。
そんなレアな天候の中、VTA(Santa Clara Valley Transportation Authority)に乗って会場に向かいました。 f:id:LIFULL-ikedakz:20170610114436j:plain

会場の様子

WWDC最終日はセッションも少なく、ラボも早い時間で閉まってしまいます。
そんな事情もあるため今日はほとんど人いないんじゃ、、と思ってたのですが、全然そんなことなかったです。
多くの人で会場は賑わっています。 f:id:LIFULL-ikedakz:20170610114513j:plain

今日はアツく揺さぶられるセッションが午前中なかったため、作業スペースで開発作業を進めていました。
セッションの動画も流れています。 f:id:LIFULL-ikedakz:20170610114944j:plain

そうこうしているうちに午後のセッションの時間になり、セッションに参加してきました!

セッション

今回参加したセッションは、「Efficient Interactions with Frameworks」です。 このセッションでは、Foundation内のパフォーマンスについての話とStringのパフォーマンスについての話がされていました。

Foundation内のパフォーマンスについて

以下パフォーマンスの改善が行われているそうです。

NSCalendar

メモリの使用 、速度の改善

NSOperation / NSOperationQueue

速度の改善

Data

速度の改善

Stringのパフォーマンスについて

Stringのbridgingについて

SwiftでUILabelやUITextViewのtextを変数に入れる場合、textの実装部分でObjective-CのUILabelや、NSTextStorageが利用されておりそのコストについての話でした。
UILabelを利用する場合もUITextViewを利用する場合も暗黙的にbridgingが行われ、それに対するコストがかかります。
ここでUILabelは比較的小さなデータ量を扱うことが多いためあまり意識しなくて良いが、UITextViewはデータ量が大きくなることもあるため気にした方が良いとのことでした。
具体的にはUITextViewのtextの中に1MBを超える文字列を扱う場合はパフォーマンスを気にした方良く、こういった場合は計測した上でパフォーマンスに影響を及ぼしている場合、以下のようにcopyの処理がはしらないmutableStringを使うのが良いそうです。

var text = textView.textStorage.mutableString

ここに関してはAppleも解決策を探しているが現状見つかっていないので、パフォーマンスに影響を及ぼしている場合上記のような処理を検討するのがよいとのことでした。

Rangeについて

NSRangeとRangeに新しいイニシャライザが追加され、NSRangeやNSRegularExpressionを利用するときに便利になっています。
NSRangeとRangeの相互変換がイニシャライザででき第二引数にStringを指定できるようになっているため、「NSRangeを作成するために一旦StringをNSStringに変換する」のような処理が必要なくなっています。 Rangeに追加されたイニシャライザは下記です。

init?(NSRange, in: String)

文字列のレイアウトとレンダリングについて

テキストのレンダリングでパフォーマンスを上げる方法として3つのtipsが挙げられていました。

  1. 可能な限り標準のコントロールを利用する
  2. AutoLayoutのようなモダンなレイアウトプラクティスを利用する
  3. NSAttributedStringを利用している場合、確定しているattributesは明確に指定する

3.の具体例で挙がっていたのは、directionやlineBreakModeです。
確定しているなら指定しておいた方が推測のコストが省けるため、若干パフォーマンス改善するそうです。

The Bash

WWDCでは毎年Apple公式の打ち上げのような形で The Bash が開催されます。
Bash の会場では食事やお酒が無料で提供されており、最中には有名なアーティストのライブもあります。

下の写真は会場に向かう橋です。
開場の20分ほど前に行ったのですが列ができており順々に数十人のグループで区切って通されます。
いっぱい乗ると落ちるぞ、みたいなことを言っています。怖いです。
f:id:LIFULL-ikedakz:20170610121016j:plain

この橋を超えて会場に入りました。
開場直後に入ったので、ぼちぼち人が人がいる程度です。
f:id:LIFULL-ikedakz:20170610123859j:plain

食事やお酒が提供されています。 f:id:LIFULL-ikedakz:20170610124016j:plain

そしてアーティストライブの時間がやってきました!
今年のゲストはFall Out Boy!!!!
前の方では飛び跳ねて盛り上がっている人たちも!
すごくかっこいいライブでした!

徐々に日は落ち、お酒も入りみんなテンションが上がっています。
机の上で踊り出す人々も出てきました! f:id:LIFULL-ikedakz:20170610125424j:plain

大勢の人で盛り上がった Bash も22時頃でクローズし、公式の打ち上げ(っぽいイベント)も終了です。

最後に

1週間に渡り様々な発表、ラボが開催されたWWDCも今日で最終日です。
ですがエンジニアにとっては、発表された技術をどう活かしてどうサービスに繋げていくか、それを考えて作っていく日々が始まったばかりです。
WWDCで発表された技術、情報を素早くキャッチアップして今後に繋げていきたいと思います!

私たちの会社でもWWDCの素早いキャッチアップに繋がるよう共有会を開催しますので、ぜひいらしてください! lifull.connpass.com

WWDC最終日の記事は以上となります!
ありがとうございました! f:id:LIFULL-ikedakz:20170610130950j:plain

WWDC 2017 - DAY FOUR -

昨日の記事に引き続きこんにちは。iOS開発Gの塙です。 4日目ともなると現地のエンジニアは今回発表された機能の実装をだいぶ進めているみたいです。 外のベンチにはただ空を眺めている方、俯く方、頭を抱える方。十人十色です。美しいですね。

皆さんも実装が詰まって何時間も考える時があると思います。 そんな時WWDCでは問題解決をしてくれるスペシャリストが待機している場所があるのです。 今回はその場所の話とセッションの話をメインで書きたいと思います。

f:id:LIFULL-hanawat:20170609151658j:plain

これは通称"小田原"と呼ばれているオレンジジュースで、ほぼ毎年WWDCで配られています。ジョブスが好きだったとか。ではまずセッションのお話から。

Focus Interaction in tvOS 11

今回KeynoteではAmazon Prime Videoの話しかされなかったtvOSですが、API Referenceを見るとそれなりに変更があったので聴きに行きました。 セッションの席がガラガラですね、大丈夫でしょうか。

※ LIFULL HOME’S アプリはtvOSにも対応しています。

最新バージョンではCoreBluetoothFlyoverに対応しております。AppleTVをお持ちの方はぜひダウンロードしてみてください。

f:id:LIFULL-hanawat:20170609151917j:plain

Focus Update Notifications

  • Focusに対して更新処理が走る時に通知を受け取れるようになった
  • Focusの移動に失敗した場合の通知も追加されている
static let UIFocusDidUpdate: NSNotification.Name

static let UIFocusMovementDidFail: NSNotification.Name

Protocol Extensions

UIFocusItemプロトコルが拡張されて、自身が今Focusされているか確認できます。

var isFocused: Bool { get }

UIFocusEnvironmentプロトコルが拡張されて、自身が他のFocusEnvirionmentに含まれているか確認できます。

func contains(_ environment: UIFocusEnvironment) -> Bool

Focus Animations

Focusの移動時にアニメーションを定義できます。

// for focusing item
func addCoordinatedFocusingAnimations(_ animations: ((UIFocusAnimationContext) -> Void)?,
                           completion: (() -> Void)? = nil)

// for unfocusing item
func addCoordinatedUnfocusingAnimations(_ animations: ((UIFocusAnimationContext) -> Void)?,
  completion: (() -> Void)? = nil)

Runs the specified set of animations together with the system animations for adding focus to an item.

今まで下記のようにやっていた処理との違いはシステムの定義したアニメーションと一緒に行うかどうかでしょうか。

func didUpdateFocus(
  in context: UIFocusUpdateContext,
    with coordinator: UIFocusAnimationCoordinator) {

  if context.nextFocusedView is Self {

    coordinator.addCoordinatedAnimations({
      // Focused Animation
    }, completion: nil)

  } else if context.previouslyFocusedView is Self {

    coordinator.addCoordinatedAnimations({
      // Unfocused Animation
    }, completion: nil)
  }
}

またFocusの移動スピードに合わせてアニメーションの早さを調節されるそうです。

Custom Focus Sounds

  • フォーカス移動時に流れる音をカスタマイズできるようになった
  • UIFocusSystemというクラスが追加されたことによって可能になった

UIFocusSystem

現在のユーザーインタフェース上にあるフォーカスの状態を管理するクラス。 今まではupdateFocusIfNeededのように自身のフォーカスの更新しかできませんでしたが、このクラスは全てのフォーカスの更新ができます。

func requestFocusUpdate(to environment: UIFocusEnvironment)

func updateFocusIfNeeded()

また、現在フォーカスされているオブジェクトやどのFocusEnvirionmentに含まれているかもチェックもできます。

weak var focusedItem: UIFocusItem? { get }

class func environment(_ environment: UIFocusEnvironment,
  contains otherEnvironment: UIFocusEnvironment) -> Bool

その中にひとつだけフォーカス時の音を変更するメソッドがあります。 ローカルのサウンドファイルのURLと識別子を指定するだけでアプリ内にグローバルに反映されます。ただし、サウンドファイルは30秒未満でなくてはいけません。

class func register(_ soundFileURL: URL,
  forSoundIdentifier identifier: UIFocusSoundIdentifier)

下記のようなサウンドの調整も行われるようです。

  • スピードに合わせて音量が変更される
  • フォーカスの移動方向(左右)によっても異なる

また、オブジェクトがフォーカスを更新するタイミングでカスタムとデフォルトとなしの切り替えもできます。例えばサイズの異なるオブジェクトになる場合は音を変えるというのは良いプラクティスだそうです。

// UIFocusEnvironment Protocol
optional func soundIdentifierForFocusUpdate(in context: UIFocusUpdateContext) -> UIFocusSoundIdentifier?

Support for SceneKit

SceneKitとSpriteKitでもフォーカスを扱えるようになった UIFocusItemの継承クラスにSKNodeSCNodeが追加されている。

Focus Update Logging

-UIFocusUpdateLoggingEnabled=YESの設定をXcode上で行うとフォーカスに関するログを吐く。

UIFocusDebugger

フォーカスをデバッグするためのクラスが追加されました。 po UIFocusDebugger.foo()でFocusの状態を見たり検証したりできます。

  • status(): フォーカスされているオブジェクトに関する情報
  • simulateFocusUpdateRequest(from: _): 特定のFocusEnvirionmentからフォーカスの更新を試せる
  • checkFocusability(for: _): Focusできるかチェックできる(できない場合は理由も分かる)
  • help(): 使用できるコマンド(メソッド)全部出してくれる

結構やりたかったことや実装が面倒だった部分が解消されている気がします。何より捉えにくいフォーカスをデバッグしやすくなったのは嬉しいです。

qiita.com

Lab

普段実装で躓いたことはありませんか?ない人なんていないですよね。 このWWDC期間中であれば、そのUIKit、Foundation、iOS、watchOS…などの開発者に相談できるんです。 そこで答えが出ないなら諦めがつきますもんね。頭を抱えて作業が進まない状況を無くせます。

f:id:LIFULL-hanawat:20170609151720j:plain

ラボにも色々な種類があり、昨日の記事で紹介したUIデザインラボもその中のひとつです。 基本的に技術系のラボは予約はいらず、その場でじっくり実装しながら聞いたりできます。

Design and Accessibility

  • User Interface Design
  • Accessibility Design

App Store

  • App Review
  • Apple Developer Program Support
  • Apple Marketing Communications
  • Business and Marketing
  • Export Compliance
  • iTunes Connect
  • Search Ads

Podcast

  • Apple Podcasts Studio

Develop

  • Core Image Lab
  • Source Control, Simulator, Testing, and Continuous Integration with Xcode Lab
  • Game Center Lab
  • Installer Lab
  • ClockKit and WatchKit Lab, etc…

もっともっとあります。キリがないくらい様々な技術情報のラボがあります。 え?英語が話せない?もちろん私も話せません。ですが、最初の質問を準備していけばあとはノリとコードで伝わります。 私は質問していく時に毎回このようなフォーマットで持って行きました。

    func foo() {
        /*
         ここに現状の実装の説明とやりたいことを書く
         */
        doSomething()
    }

    func bar() {
        /*
         ここにトライしたけどダメだったことを書く
         実装はコメントアウトしておく
         */
        // doAnything()
    }

Appleのデベロッパーと話せる機会なんてそうそうないのでWWDCに行くときはぜひ質問を投げに行ってみてください。 では、最終日も楽しく元気に学びましょう。

f:id:LIFULL-hanawat:20170609151742j:plain

今日はよくわからないファミレスのような場所で書いています。このタコスのようなポテト素敵な味がします。アディオス。

WWDC 2017 - DAY THREE -

こんにちは。iOS開発Gの塙です。 本日でWWDCは3日目です。早いですね。イベントも中盤まで差し掛かり、デベロッパーの血と汗の結晶である技術情報がウェブ上にチラホラ出て来ていますね。感謝の気持ちを忘れずに根こそぎ吸い上げていきましょう。前日の記事はこちらです。

「What’s New in WatchOS4」と「What’s New in Foundation」のセッションがあったのでwatchOS4とSwift4について書きたいと思います。が、その前に今回も会場の様子をお伝えしたいと思います。

WWDCは期間中食事を無料で提供してくれます。今日のお昼ごはんはサラダです。野菜はいいぞ。味については触れませんが、日本って本当に食に恵まれているんだなあと思いました。味については触れませんよ。

f:id:LIFULL-hanawat:20170608152040j:plain

もちろんドリンクも無料です。お財布が寂しい私は毎日歓喜してます。コーヒーは(おそらく)スターバックスでとっても美味しいです。一体何リットルのコーヒーがこの会場に運ばれているのでしょうか。なんとなく恐怖です。

f:id:LIFULL-hanawat:20170608152006j:plain

物販もやっています。WWDC限定の商品があるので毎年1,2日目には品薄状態になってしまいます。iOSエンジニアはここのTシャツをドヤ顔で着るのがスマートだと思います。

f:id:LIFULL-hanawat:20170608151937j:plain

毎年近場で行われているAltConfというApple製品のデベロッパーカンファレンスがあります。私は去年このイベントをメインで参加していました。なぜなら無料だからです。受付の方、お茶目ですね。

f:id:LIFULL-hanawat:20170608151917j:plain

AltConfはスポンサーの企業が会場内にブースを作り、グッズや製品を置いて客寄せしています。このTシャツはもちろん無料です。寝巻きに最適です。

f:id:LIFULL-hanawat:20170608152025j:plain

本日はUser Interface Design Labという予約制のラボ(相談に乗ってくれるブース)に行って来ました。近年では毎朝7時に当日の予約が開始されるのですが、1~2分で満席になるというとても貴重なラボなのです。WWDCに行く場合はぜひチャレンジしたほうがいいと思います。

f:id:LIFULL-hanawat:20170608152057j:plain

なんとなくWWDCに行った時のイメージが湧きましたか?湧きましたね。ということでwatchOS4とSwift4(一部)を紹介したいと思います。

watchOS4

Core ML

iOSと同様に機械学習モデルを扱えるようになるフレームワークが追加されました。 watchOSは近年スポーツや健康管理の機能強化をしているので、そのデータと機械学習を組み合わせて面白いことができそうですね。

SiriKit

こちらもiOSと同様にSiriKitのIntent Domain(できること)に「List nad Notes」が追加されました。サードパーティ製アプリのメモやタスクをSiriから登録できます。

また下記のIntent Domainに追加された機能もiOSと同じですね。

  • Ride Booking : キャンセルとフィードバック機能
  • Payments : 送金とアカウント検索機能

HomeKit

こちらもまたまたiOSと同様に下記のトリガーが追加されました。

  • HMSignificantTimeEvent : 日の出/日没時間
  • HMCalendarEvent : 特定の日時
  • HMDurationEvent : タイムインターバル(繰り返し時間)
  • HMCharacteristicThresholdRangeEvent : 接続されたデバイスの出力する値の範囲(温度や明度など)
  • HMPresenceEvent : ユーザーの有無

Apple Pay

こちらもまたまたまたiOSと同様に支払い情報と認証エラーをハンドリングできるようになりました。

ここまで読んでいてがっかりされている方が多いと思います。私もアプリのストリーミングでセッションを聞いていて、途中でそっとスリープボタンを押そうとしてしまいました。ただ、次のアップデートは夢があると思います。

Core Bluetooth

ついにwatchOSにCore Bluetoothが追加されました。Apple Watchから様々な機器を操作できるようになりますね。ただし下記の制限があります。

  • セントラル(見つけに行くデバイス)のみ可能
  • ペリフェラル(見つけて貰うデバイス)は2台まで
  • 接続インターバルの時間は フォアグラウンド : 30ms / バックグラウンド : 120ms
  • バックグラウンドでは接続のみ可能(スキャンはできない)
  • ペリフェラル側はアプリが停止したら接続解除される

Swift4

様々なアップデートがある中で、私のまわりで最もザワついた項目であるCodableのみ取り上げたいと思います。

Codable

Swiftのstructやenumを簡単にシリアライズ/デシリアライズできるようになりました。

struct Person: Codable {

  enum Child: String, Codable {
    case son, daughter
  }

  let name: String
  let age: Int
  let children: [Child]
}

let person = Person(name: "Foo", age: 10, children: [.son, .daughter])
let data = try? JSONEncoder().encode(person)

デコードもできます。JSONデータを外部ライブラリを使用してパースしなくて済みますね。

let person = try? JSONDecoder().decode(Person.self, from: data)

少し詳しくQiitaに投稿したのでご確認いただければと思います。 qiita.com

では残り2日間楽しみながらたくさん学んでいきたいと思います。アディオス。 f:id:LIFULL-hanawat:20170608151900j:plain 宿泊先のホテルです。ちょっとカッコつけてみました。

WWDC 2017 - DAY TWO -

こんにちは。iOS開発Gの池田です。
本日はWWDCの2日目です!
今日(6/6)から金曜日(6/9)まで新OS、新機能の技術的なセッションやラボが目白押しです。

今回は会場の様子を少しとセッションについて、最後おまけです。
(前回の記事はこちら)

会場の様子

会場内の休憩&個人作業スペースです。
みんな思い思いにソファーや机に座って作業をしています。
この写真は人が少ない時間帯に撮りましたが、セッションの合間や昼の時間にはごった返します。
ちょっと見えづらいですが2枚目の写真の中央下部あたりではセッションのリアルタイムストリーミングも行われています。 f:id:LIFULL-ikedakz:20170607175511j:plain f:id:LIFULL-ikedakz:20170607175422j:plain

セッションについて

私が参加したセッションは、以下3つです。
それぞれポイントになる内容を振り返ります。

  • Your Apps and Evolving Network Security Standards
  • Introducing Core ML
  • Introducing ARKit

Your Apps and Evolving Network Security Standards

ATSで「信頼されない」、「信用される」を分ける基準が話されていました。
具体的には以下のように信頼する・信頼しないの基準が分かれます。
[×] 信頼されない
[○] 信頼される

Encryption

[×] RC4 3DES-CBC、AES-CBC
[○] AES-GCM、ChaCha20-Poly1305

Cryptographic Hashes

[×] MD5、SHA-1
[○] SHA-2 Family

Public Key

[×] < 2048-bit RSA
[○] ≧ 2048-bit RSA、Elliptic Curves

Protocols

[×] httpプロトコル、SSLv3、TLS 1.0、TLS 1.1
[○] httpsプロトコル、TLS 1.2+

Revocation

[×] No checking
[○] OCSP Stapling

Introducing Core ML

Core MLでは様々な機械学習ライブラリで作成したモデルをアプリ内に統合して、ある入力に対する出力を予測する機能を提供できます。

対象OS

macOS High Sierra以上、iOS11以上、watchOS4以上、tvOS11以上

Core MLの良いところ

機械学習の処理、データのやりとりがデバイス内で完結するため、以下のメリットがあります。

  • ユーザーのプライバシーを侵害しない
  • データのコストが必要ない
  • サーバーのコストが必要ない
  • 通信環境等によらず、いつでも使える

モデルについて

モデルは入力を受けて予測の結果を出力するFunctionのようなものだ、という話でした。
入力には、画像やテキスト等が用いられ、出力として予測結果を得ます。
デモの中では花(バラ等)の画像をモデルに入力し、文字列として予測結果出力していました。

Core ML Tools

pythonで作られているモデル変換ツールでオープンソースです。
有名な機械学習ライブラリのモデルをCore ML用のモデルに変換することができます。

Core ML導入の手順

デモの中でCore MLの導入手順を一通りやっていました。
導入手順は以下5手順です。

  1. オープンソースの機械学習ライブラリでモデルを作成する
  2. Core ML ToolsでCore ML用のモデルにコンバートする
  3. できたモデルをプロジェクトにドラッグアンドドロップする
  4. Core ML用モデルのターゲットを設定する
     (自動でSwiftファイルが生成される。)
  5. 生成されたモデルの結果出力メソッドを利用して実装する

Introducing ARKit

ARKitでは、iOSデバイスのカメラに写っている現実の映像とSceneKit、SpriteKit等で作成した仮想現実の物体を同時に表示し、あたかも現実に仮想現実の物体があるように見せることができます。
こちらのARKitは今回の発表の中でもなかなか興味深い新機能だと思います。
日本にいる弊社の新卒エンジニアがサンプルを使って早速試してました!

対象OS

iOS11以上(A9プロセッサ以上)

トラッキング

iOSデバイスの移動、回転に伴って仮想現実の物体も移動、回転、縮小をします。
現実に物体があるのと同じような動作をするのでカメラを通した映像には実際物体があるかのように見えます。

平面の認識

カメラの映像を通して現実にある床等の平面を認識します。
仮想現実の物体は認識した平面の上に乗っているように見えるよう位置調整されます。

光の予測

現実の映像が暗いと仮想現実の物体が暗くなる、仮想現実の物体が光っていると現実の映像が明るくなる等、現実と仮想現実が相互に光の干渉を行います。

デモ

デモは2つ行われていました。

1つ目は仮想のカップ、花瓶のような物体を現実の映像内に配置するデモです。
現実のテーブルの平面が仮想の物体に影響を及ぼし、テーブル上にカップや花瓶が乗る様子が見れました。

2つ目は仮想のカメレオンがテーブル上に乗っているデモです。
このデモでは、カメレオンの周りを回るようにカメラを操作すると、カメレオンの顔かリアルタイムでカメラの方を見る様子が見れました。
カメレオンがその場にいてまるでこっちを見ているかのように見えるデモです。
現実と仮想現実が繋がっているように感じられる感覚が強いデモで、それをたった1台のiPhoneでやっていると考えると、未来感があるデモでした。

おまけ

会場の前の広場でWWDC参加者限定のパーティがやっていたので、ちょろっと参加してきました。
バンドの演奏もやっており、バンド前ではダンスをしている方も♪
多国籍な会で私はロシアの男性エンジニアの方と、元々日本にしばらく住んでいた女性エンジニアの方などちょこちょこ交流してきました。
1時間弱の短い時間でしたが大変楽しい夜でした!
本日は以上です!それでは! f:id:LIFULL-ikedakz:20170607180450j:plain