その後のその後

iOSエンジニア 堤 修一のブログ github.com/shu223

開発者向け公開情報から見る iOS 8 の細かい新機能8つ

今まさに開催中のWWDC2014のキーノートでは、Swift、HealthKit、HomeKit、Metal、Extensions と、iOS 8 の言語レベル、新規フレームワークレベルでの大きな新機能について発表されましたが、従来フレームワークにもいろいろと有用な機能が追加されています。



例年のWWDCではそれらはNDA下にあり正式リリースまで話題にすることはできなかったのですが、今年はAppleがいろいろと情報を公開してくれている(ログイン不要で見れるようになっている)ので、それらの情報リソースから、「これは嬉しい」と思った機能をいくつか挙げていきます。


※Xcode 6 はNDA下にあるため、実行結果には言及しないようにしています。

UIVisualEffectView

クラスリファレンスを見ると、

init(effect effect: UIVisualEffect!)

というメソッドで初期化でき、UIVisualEffect 型のオブジェクトを渡せるようになっています。


UIVisualEffectを継承するクラスとしては

  • UIBlurEffect
  • UIVibrancyEffect

の2つが用意されています。


ここで注目すべきは UIBlurEffect 。


UIナントカView にブラーエフェクトを渡せる、というのはまさにあの「磨りガラス効果」ではないでしょうか。


iOS7で導入されキーノートのときから目を引いていたエフェクトだったものの、その実装方法には諸説あり決定打に欠いていたので、やっと磨りガラス論争に終止符が打たれそうです。

CIKernel

Core Image の更新。カーネルというのはフィルタをかける際に、畳み込み演算する核となるマトリックスのことで、これがAPIとして出てきたということは、事実上 iOS でもカスタムフィルタの作成が可能となったと言えると思います。


What's New in iOS でも触れられています。

You can create custom image kernels in iOS.


残念ながらまだクラスリファレンスは公開されていません(2014.5.4現在)。

AVAudioEngine

iOS の Core Audio においてもっとも低レイヤに位置し、リアルタイムで高度なオーディオ波形処理や、複雑なルーティングによるオーディオ処理を実現することができる Audio Unit というのが従来からあったのですが、これらは AVFoundation 等に比べると少々複雑で、しかもAPIがC言語タイプなので、自分のようなゆとりiOSエンジニアには少しハードルが高い部分がありました。

iOS 8 で追加された AVAudioEngine は、その API をみると、完全に Audio Unit の Objective-C ラッパーな感じで、上記のAudio Unitのハードルの高さを解消してくれているのでは、という期待ができます。


ギターのエフェクターのようにユニットを繋げる楽しさも健在で、たとえば AVAudioUnitEffect を継承するクラスとしては、

  • AVAudioUnitDelay
  • AVAudioUnitDistortion
  • AVAudioUnitEQ
  • AVAudioUnitReverb

といったものが用意されています。

CLFloor

公開されているクラスリファレンスを見ると、

A CLFloor object specifies the floor of the building on which the user is located.

とあり、`level` (read-only) というプロパティが定義されています。


地図からフロア情報も取得できるようになるのではないでしょうか。

CLVisit

クラスリファレンスによると、ユーザーの過去の訪問履歴を扱うためのクラスのようです。

  • coordinate
  • horizontalAccuracy
  • arrivalDate
  • departureDate

といったプロパティを持っています。


そして、"CLLocationManager+CLVisitExtensions.h" という CLLocationManager のカテゴリが追加されていて、

func startMonitoringVisits()
func stopMonitoringVisits()

というメソッドが使えるようになっています。


また、CLLocationManagerDelegate に、次のデリゲートメソッドが追加されています。

@optional func locationManager(_ manager: CLLocationManager!,
                      didVisit visit: CLVisit!)


で、What's newを見ると、

The visit service provides an alternative to the significant location change service for apps that need location information about interesting places visited by the user.

とあり、バックグラウンドで位置情報をとるためにこれまで用いていた significant location のしくみ(GPSではなく基地局ベースのやつですね)に代わり、訪れた場所をモニタリングするサービスのようです。

Manual Camera Controls

関連メソッドが多いので詳細は省略しますが(API Diffsから確認できます)、カメラの

  • フォーカス
  • ホワイトバランス
  • 露出

の設定が直接制御できるようになっています。

Accelerate Framework

従来からあるフレームワークですが、大量のクラス/メソッドが追加されています。API Diffs のページ面積の約半分(!)近くを占めるほどです。


高速画像処理演算ライブラリの vImage、線形代数演算等が強化されています。

IBでのカスタムフォントプレビュー

What's New in Xcode によると、

Custom iOS fonts. Interface Builder renders embedded custom fonts during design time, giving a more accurate preview of how the finished app will look, with correct dimensions.

とあります。カスタムフォントを Interface Builder で選べてプレビューできる、ということです。


これは個人的には待望の機能で、つい先日

という記事を書いて有料のプラグインを紹介したばかりなのですが、標準でサポートしてくれるに越したことはない *1 ので、ありがたい機能追加です。

*1:サードパーティ製有料プラグインを使うと、たとえばチームでプロジェクトを共有するときに困る