Apple Engine

Apple, iPhone, iOS, その周辺のことについて

iOS 13 からの UI / UX

追記:
  • SwiftUI での UISplitViewController の様な表示方法
  • Multiple Windows 対応アプリでの閉じたウインドウ(アプリ)の復元

 

iOS 13 からシステムがかなり変更されるため、UI / UX について考えてみる。

大まかな変更が行われるのは以下のものだが、
現状、2020年4月までに対応必須ではないので今はすぐ対応する必要はない。

  • iPadOS での Multiple Windows
  • Dark Mode
  • SF Symbols
  • Swift UI

 

ちなみに、2020年4月に対応するのは以下のもの。

  • 起動時のスプラッシュは画像ではなく Storyboard を使用する
  • 様々な大きさの画面対応
  • 画面分割対応

 

ざっくり実装を説明するとスプラッシュは Storyboard にして Requires full screen のチェックを外した状態の対応をする。
正直、ゲームとか画面の大きさを変更するのは面倒なのでどこまでやるのかよく分からない。

 

とりあえず、全ての UI / UX を含めると、かなり書かないといけないので、以降 ARKit、Safari、ML に関しては今回は省く。

また、現在 Beta 版であるため内容が変更さえれる可能性あり。

 

Multiple Windows (iPadOS)

f:id:x67x6fx74x6f:20190705050658p:plain

OS 上で処理されるので画的なデザイン部分は特に何かをすることはないのだがシステムが大幅に変更される。

今までアプリを異なる状態を複数開くことができるのは Safari のみだったが、
iOS 13 以降では、アプリ UI の複数インスタンスを同時に作成して管理し、
アプリスイッチャーを使用してそれらのインスタンスを切り替えることができるようになった。

ただ複数アプリを開くことができるだけではなく状態を保持するため、
カレンダーアプリでは月全体と今日の予定を並べて表示することができる。

OS の実装上、フルスクリーン、Split View、Slide Over 全てで複数の同一アプリを起動することができ、
基本的には閉じないかアプリがクラッシュしない限りアプリが存在し続けるため、
ユーザー体験としては、macOS でウインドウが複数開いているような状態と同じような感じになる。

また、アプリの状態をセッションとしてやり取りでき、ウインドウの更新した状態を他のウインドウへ全て同期したり、しなかったりできる。

各ウインドウではユーザー操作によって UI の状態が異なる可能性があるのでそこのところは注意が必要。

 

追記 :
モーダルで開いた詳細画面にボタンを置き、ボタンがタップされた際に、その画面を他のウインドウで表示するということもできる。

新しく開いて詳細画面の状態の UI とデータを表示する処理を設定すれば、どの画面でも新規ウインドとして表示することができる。

 

f:id:x67x6fx74x6f:20190705050846p:plain

実装的には UIScreen と UIWindow の間に機能が増え API が変更されるため、それなりの修正が必要。

 

追記 2:
閉じたウインドウをすべて復元する事ができるようになった。(どのレベルまで復元できるかは不明)

Multiple Windows を対応した場合、アプリの状態が復元されることを考えてデザインする必要がある。

 

Dark Mode

f:id:x67x6fx74x6f:20190705053733p:plain

iOS でも macOS や tvOS 等と同じように背景が黒になる Dark Mode が追加された。

macOS や tvOS 同様に自動で時間帯を規定かカスタムなどで Light / Dark Mode 変更される機能も実装されている。
視認性を高くする効果と液晶端末ではほぼ効果が出ないが、OLED (有機 EL) の端末でバッテリーを抑える効果がある。

 

f:id:x67x6fx74x6f:20190705053911p:plain

 

以下、Light / Dark Mode で設定できるシステムカラー。
それ以外では、テキストのプレースフォルダーの placeholderText、 境界線の separator、半透明の境界線 opaqueSeparator、リンク用の link がシステムで用意されている。

テキスト 塗り 背景 グループの背景
Primary
Secondary
Tertiary
Quaternary

 

色のコントラスト比を Light Mode は 4.6、Dark Mode 7.94 に設定する。

f:id:x67x6fx74x6f:20190705053953p:plain f:id:x67x6fx74x6f:20190705054018p:plain

 

また、Dark Mode では背景が黒くドロップシャドウがつかないため、色の重なりを背景色の変化で設定する必要がある。 

 

ステータスバーのデフォルトは Light / Dark で自動で変更され、 ローディング用のインジケーターは Light / Dark でmedium / large のものが用意された。

f:id:x67x6fx74x6f:20190705071410p:plain

 

色々考えると面倒なので極力システムが用意している色を使用した方がよさそう。

  

アイコン

アイコンなどは極力 SF Symbols を使用し、Light Mode と確認しながら使用し、 色付きのアイコンも同様に Light Mode と合わせながら色を確認する。

アイコンについては過去記事も参照

appleengine.hatenablog.com

 

ぼかしのエフェクト (UIVibrancyEffect)

背後にあるコンテンツの色を調整する Vibrancy Effect で Dark Mode 用に変更された。

f:id:x67x6fx74x6f:20190705081059p:plain

 

Vibrancy Effect を使用しない単色の文字は背景によって見えやすさが変わるので注意。

f:id:x67x6fx74x6f:20190705081459p:plain

 

一部だけダークモードの適応を外す、もしくは適応することは可能か?

可能。

アプリを開いた大元から対応しないようにしたり、一部だけ Light or Dark にするなど設定することができる。

 

Dark Mode での注意点

iOS (iPadOS) のダークモードではドロップシャドウが落ちないため、重なりを色の濃淡で表現する必要があり、状態によって背景色の黒の濃淡が変わる。

f:id:x67x6fx74x6f:20190705071534p:plain
左が通常。右がモーダルとなり背景色の黒が薄くなっている。

 

例えば、Split View 表示の際は左右のアプリのしきりであるセパレータが黒になるため、やや薄くなるし、
Slide Over の場合も同様に薄い色になる。

f:id:x67x6fx74x6f:20190705071751p:plain
Split View の区切りが黒のため、黒の背景色が薄くなっている。

f:id:x67x6fx74x6f:20190705071928p:plain
Slide Over でも背景色が薄くなっている。

 

これらを踏まえると任意の背景色にすると面倒になり、
文字色等もシステムカラーを使用した方が開発側が楽をでき、
さらに操作するユーザー側への混乱を避けることができるように思える。

Dark Mode を見ていくと、表示や機能が決められて設計されている SwiftUI がつくられたのは必然であるような感じではある。

 

SF Symbols

概要

f:id:x67x6fx74x6f:20190705054321p:plain

SF Symbols とはフォントのようなベクターデータとして集めた 1,500 を超えるアイコンである。
扱いとしてはフォントなので、文字フォントと合わせた配置ができる。

背景としては iPhone SE など 4inch、iPad など 9.7〜12.9inch、
macOS での 6K など Apple プラットフォームのデバイスでは様々な画面の大きさ、解像度のデバイスが増え、
さらに Light Mode とは別に Dark Mode が追加されたため、一貫したデザインかつ大きさを合わせあたアイコンが設定できるするためだと思われる。

SF Symbols のフォントの太さであるウェイトは Ultralight、Thin、Light、Regular、Medium、Semibold、Bold、Heavy、Black の 9 つ。

現状 iOS や macOS など、日本語やアジア圏のフォントではウェイトのバリエーションがほぼなく、iOS 13 でフォントが追加されないのであれば SF Symbols と合わせる際は注意が必要。

スケールは Small、Medium、Large の 3 サイズがある。

また、SF Symbols は画像に変更することができるため、ラベルの文字だけではなく、 ナビゲーションのボタン画像や、タブのアイコン画像として使用することができる。

 

カスタムシンボルの作成

SF Symbols のフルセットを閲覧する SF Symbols アプリから作成するシンボルに近いものをエクスポートしてそれをテンプレートとして Sketch や Illustrator などのツールで編集し作成する。
セッションではウェイト、スケール Medium をまず作成し、ウェイト Medium のスケール Small、Large を作成し、他のウェイトを作成していた。

制作する際には以下の点に注意すべしとのこと。

  • シンプル
  • 認識しやすい
  • 不快ではない
  • その動作またはコンテンツに直接関連するシンボルのアイコンを描く

 

現状、カスタムのシンボルは代替のテキストは表示されないが、 アクセシビリティの Voice Over の読み上げ用の文字は自前で設定する必要がある。

カスタムのシンボルで Dynamic Type に対応する場合は Regular、Medium、Semibold、Bold を作成する必要がある。

 

Dark Mode での SF Symbols の注意点

macOS 同様に図案によっては線のアイコンだと見づらい可能性があるため、塗りなどに変更する必要がある。

 

SwiftUI

開発的に言うと XIB、Storyboard に代わる新しい UI システム。

Swift で DSL のように書く Swift の追加機能、Combine フレームワークを使用したデータ連携、UI デバッグのサポート、UI プレビューで成り立っている。
UI のコードが簡単に書くことができ、Dark Mode の対応やアクセシビリティが簡単に設定できるため、今後 Apple プラットフォームでは主流の UI システムとなりそう。

UI の描画は今まで使用していた UIKit の UI を使用していないらしいが、既存の View や ViewController を使用したり、UIKit ベースでつくられているアプリの一部で SwiftUI を使用することができる。

現時点で SwiftUI では作成できる UI が以下に決められている。

  • テキスト(ラベル)
  • テキストフィールド(通常とパスワードなどセキュアなもの)
  • フォント
  • 画像
  • ボタン各種
  • ピッカー各種
  • スライダー
  • ステッパー
  • セグメントコントロール

  • 横方向に要素を並べる HStack
  • 縦方向に要素を並べる VStack
  • 奥行きに要素を並べる ZStack

  • テーブルビューのように並べる List
  • 要素を列挙する ForEach
  • XY方向に表示をスクロールできる ScrollView
  • List をグループで区切って表示する Form
  • 要素の階層化をおこなう Section

  • 要素と要素の間に空間を作る Spacer
  • 要素と要素の間に分割線を描画する Divider

  • 横にペインし画面遷移する NavigationView
  • タブで画面を切り替える TabbedView
  • macOS 用で横に要素を並べる HSplitView
  • macOS 用で縦に要素を並べる VSplitView

  • アラート
  • アクションシート
  • フルスクリーンの Modal
  • iOS 13 からの Sheet

  • ベクターの描画と各種アニメーション

 

残念なお知らせだが iPadOS の設定アプリやメールアプリなどでよくあるスプリットする UI が用意されていない。

WWDC 19 のセッションでは画像はあっても、iPad での実装方法が紹介されていないため、少なくとも現時点では UISplitViewController に該当するものはつくられていない可能性がある。

設定アプリやメールアプリなどでよくあるスプリットする UI (UISplitViewController) が実装できる様になった。

NavigationView に表示用に navigationViewStyle に設定できるパラメーターとして、以下のスタイルが追加された。
DoubleColumnNavigationViewStyle を使用し、NavigationView に 2 つ View を設定すると UISplitViewController と同様の表示になる。

  • DefaultNavigationViewStyle
  • StackNavigationViewStyle
  • DoubleColumnNavigationViewStyle

 

SwiftUI における UI デザイン

自分の場合 UI のデザインはよほどのことがなければ、奇をてらったことをせずプラットフォームが設定しているデザインを行うべきだと思っている。

SwiftUI は作成のしやすさと共に、UI / UX デザインの共通化を目指しているような形となっており、
そのため SwiftUI 使用する場合は UI / UX デザイナーがこれらのパーツと機能を熟知している必要があると思われる。

現状でも iOS の UI / UX を理解していないとデザインは難しいのだが、それに加えて SwiftUI の仕組みや使用できるものについても学ぶ必要がある。

 

デザイナーが SwiftUI を使用し簡単にプロトタイプを作成することは可能か?

できるといえばできるが、ノンプログラマーが複雑なものを作成しようとすると、Adobe XD や Sketch よりかなり難しい。

Xcode がデザインツールではないことと、SwiftUI の内部の仕組みと Combine の仕組みがかなり複雑であるため。

JavaScript など何らかのスクリプトやプログラムを使用して何かつくったことがあれば、 画面制作や遷移、アニメーションなど簡単に作成できると思われる。

 

モーダルウインドウの変更

f:id:x67x6fx74x6f:20190705055231p:plain

今までのモーダルウインドウ表示やアニメーション、振る舞いが変更された。

iOS 13 では 12 のように画面を覆う設定 (Full Screen) もできるが、
デフォルトではシートと呼ばれる現在のビューに対して重なるように表示される。

現行では Podcast、Music アプリでエピソードや楽曲表示の際と同じような振る舞いで、下フリックでスクロール上限に達するとモーダルが閉じる。

シートと呼ばれるものの前面に表示される View はカードと呼ばれるらしい。
Podcast、Music アプリと近い状況だが、モーダルという扱いなのでタイトル必要。
またフリックでモーダルが閉じることができるがアクセシビリティ等の問題で「閉じる」ボタンを設置する。

今回からモーダルを閉じる場合はこのモーダルの情報を保存するか破棄するかをするアクションシートを表示させる設定ができるようになっている。
(マルチウインドウなど状況によっては閉じる振る舞いで選択しなければならない状況がある)

また、シート表示は PopOver などで表示する事ができない点と、
アクセシビリティで下から上ではなく、クロスフェードのトランジションへ変更できる機能が今回追加された点には注意。
(モーダル表示を説明する際など)

 

コンテキストメニュー

f:id:x67x6fx74x6f:20190705055445p:plain

タッチアンドホールドジェスチャ、もしくは 3D Touch で macOS のようなコンテキストメニューやプレビューを表示できるようになった。

基本的には macOS のコンテキストメニューを iOS で実装したものだと考えて良いと思う。

macOS 同様、頻繁に使用される項目はメニューの一番上に配置し、関連するものはグループ化する区切り線を入れる。

注意点としては、プレビュータップからファイルを開く事ができるため、コンテキストメニューに「開く」を設定しない。
ユーザーへの混乱を招くとのこと。

あと、コピーや選択などの編集メニューとコンテキストメニューの両方の機能を設定しない。

 

PencilKit

f:id:x67x6fx74x6f:20190705055612p:plain

メモアプリの Apple Pencil を使用した UI が使用できる様になった。

UI は画面となるキャンバスと描画された領域とドローイングツール (Tool Picker) で構成される。

機能的な変更はできないため、画像を背景にしたり、ルーラーの表示、起動時にペンやツール初期設定をしたり、使用できないものを設定する程度しかできない。

 

f:id:x67x6fx74x6f:20190705055938p:plain

ペンを使用するので iOS (iPadOS) でしか使用できないが、 描かれた部分に関してはデータを渡すと macOS で扱うことができる。

緑の枠の PKDrawing が macOS で扱うことができる部分だが、画像に変換を行えば他でも使用可。

 

また、ダークモードをサポートする。

f:id:x67x6fx74x6f:20190705055752p:plain

 

注意点

ペンは Apple Pencil 第1世代、第2世代、Logitech (Logicool) Crayon が異なるので注意。 第1世代はタップジェスチャができず、クレヨンはそれに加えて筆圧が検知できない。

f:id:x67x6fx74x6f:20190705055659p:plain

 

ペンとともに指で描くモードをサポートすると画面スクロールが2本指で行うことになる。 ペンのみの場合、スクロールは1本の指で可能。

f:id:x67x6fx74x6f:20190705060339p:plain

 

iPhone では下部にドローイングツール表示が固定されるため、下に描画領域を被せないようにする。

f:id:x67x6fx74x6f:20190705060211p:plain

 

背景に何かを置き、描画領域を画面より小さくしてオーバーレイで表示すること可能だが、 Metal 的には全画面で表示した方が再描画処の関係でレスポンスが良くなるので、極力全画面にした方が良いだろう。

f:id:x67x6fx74x6f:20190705060310p:plain

 

セグメントテッド コントロール UI の変更

f:id:x67x6fx74x6f:20190705072251p:plain

以前は線と塗りだったが iOS 13 からデザインが変更された。

ダークモードではドロップシャドウが落ちていない。

 

検索

f:id:x67x6fx74x6f:20190705070519p:plain f:id:x67x6fx74x6f:20190705060542p:plain

UI 設定の変更と検索の際、入力フィールがカスタマイズ可能になった。

 

f:id:x67x6fx74x6f:20190705065848p:plain

また、メールアプリのように検索候補を SearchToken として設定できるようになった。

検索候補はコピー&ペースト、ドラッグ&ドロップからも可能。

 

透過動画のサポートと動画設定

iOS では Apple ProRes がサポートされないため動画で、動画での透過(アルファ)が使用できなかったが、
HEVC で透過動画がサポートされるようになった。

透過動画のサポートされるようになったため、スプラッシュでの表示やオーバーレイ表示が可能になった。
2D/3DCG、ARKit や OS でサポートされたため Safari など HTML でも使用できる。

また、インラインで表示される AVPlayerViewController では角丸や背景色が設定可能になった。

動画の自動再生ができるのだが、アクセシビリティで自動再生を許可しない設定ができるようになっているため注意。
アプリの状況によっては自動再生が可能になっているか調べる必要があり。

 

Low Data Mode

設定アプリからデータ通信を抑えるモードが追加される。
OS から Low Data Mode になったか、通常のモードかをアプリで判別することができる。

例えば、アイコンを Low Data Mode の場合はモノクロのピクトグラム、
通常のモードはフルカラーアイコンにするなどできる。

 

Table View / Collection View

iOS 13 の Swift で CollectionDifference が実装されたため、
2つの順序付けされたデータの集まりの状態違いの挿入と削除が簡単にできるようになった。
Table View や Collection View では簡単に各セルの移動、整列、削除をアニメーションともに簡単に設定できる。

また、ジェスチャーやキーボードの Shift と選択で複数選択ができるようになった。

 

MapKit

ダークモードに対応し、ローカルサーチやカテゴリーで表示するピンをフィルター(表示から除外すること)ができるようになった。
ローカルサーチでもフィルター可能。

ローカルサーチの検索範囲

  • Location
  • Address
  • Name
  • Phone number
  • URL

   

オーバーレイで表示のグループ化

オーバーレイで表示するポリゴンやポリラインをグループ化して表示し負荷を下げる MKMultiPolygon と MKMultiPolyline が追加された。

また、MKOverlayPathRenderer の shouldRasterize = true にしてオーバーレイをベクターからラスターに変換できるようになり、ズームしない場合など処理負荷を下げることができる。

 

GeoJSON to MapKit

GeoJSON 形式から MapKit へオーバーレイを描画できるようになった。

 

カメラバウンドリー / カメラズームレンジ

カメラ(中心点)の移動を指定した矩形内に制限することができたり、
カメラのズーム範囲を制限することができるようになった。

 

Indoor Maps

IMDF のデータがあれば、それを使用し自前で描画することができる。

   

リッチリンク / LinkPresentation Framework

f:id:x67x6fx74x6f:20190705060926p:plain

iMessage アプリでリンクとして表示されるような画像、文字、URL などを表示するビューを作成する。

LPMetadataProvider に URL を渡し、Web ページのメタデータ(多分 OG タグ)から、
LPLinkMetadata にメタデータが渡され、そのメタデータを LPLinkView に渡しビューをつくる。

 

f:id:x67x6fx74x6f:20190705061208p:plain

また、アクティビティビュー (共有シート、共有メニュー) にメタデータを渡すと、
上部にアイコンやタイトル、URL が表示することができる。

 

ジェスチャー

ジェスチャーが追加、変更が行われた。 iPad ではシェイクしてアンドゥ(取り消し)を行うのがつらいためよい変更だと思われる。

機能 ジェスチャー
コピー 3本指でピンチイン
カット 3本指でピンチインを2回
ペースト 3本指でピンチアウト
取り消し 3本指で左にスワイプ
やり直し 3本指で右にスワイプ
メニュー 3本指でタップ
テキストを選択 文字をタップ or スワイプ
文章、段落の選択 3回または4回タップ

 

Haptics (触覚フィードバック)

TapTic Engine からの細かな触覚フィードバックを設定できるようになった。

触覚フィードバックを設定する Core Haptics Framework では、フィードバックの長さやソフトかシャープかなどの設定と音の再生を設定をすることができる。 例えば、ホームインジケーターをスワイプはソフトだが、ロック画面のライトやカメラへの 3D Touch シャープとセッションでは説明されていた。

操作感のよさや触りごごちのよさを実装するため、触覚フィードバック後に音を再生するなど細かな設定を考える必要がある。

 

NFC

NFC はこれまでは読み取るだけだったが、NDEF の書き込みができるようになった。

また、読み取ることのできる規格が増え Suica の情報などが読み取れるようになった。

 

ゲームコントローラー

MFi 以外に PlayStastion 4 と Xbox One のコントローラーがiOS (iPadOS)、macOS、tvOS でサポートされるようになった。
一応、コントローラーから値の変化を取るだけなので普通のアプリでも使用可能。

既存の ゲームコントローラーの機能と、iOS 12.1 から追加されたアナログスティックの押し込み (L3/R3) に加え、PlayStastion 4 と Xbox One ではオプションのボタンも対応している。

API の大幅な変更があるがそちらは本の方で書く予定。

 

Universal Links

apple-app-site-association ファイルで、 複数のアプリ指定やパラメーターのパターンマッチができるようになった。

 

バックグランド タスク

BackgroundTasks framework が追加され、既存のものと、細かな設定でスケジューリングし ML など長時間処理に使用できるバックグラウンド処理が可能になった。

長時間や大きな通信を行う際は Wi-Fi や電源が必要なる可能性もあり。

 

認証

iPhone や iPad など Apple のプラットフォームを使用しているのであれば、Apple の ID を持っているはずなので、 Apple の端末で認証するコンテンツである場合は「Sign in with Apple」を使用した方がエンゲージメント率があ上がると思われる。

マルチプルウインドウ対応アプリで使用する場合は、サインインしていないウインドウへ認証が行われたことを他のウインドウに伝える必要がある。
(そうしないと全てのウインドウでサインインしなければならない状態になる可能性がある)

また、macOS 10.15 Catalina の Safari では FIDO2 がサポートされるため、YubiKey など USB のセキュリティキーが使えるようになる。

 

アクセシビリティ

入力サポート

リークされていたマウス以外にも、全動作をキーボードで行うモードが追加されている。

 

トランジションと動画の自動

モーダル、動画のところと説明がかぶるが、 モーダルや横にペインするナビゲーションなどクロスフェードへ変更したり、
動画の自動再生を設定アプリの設定で止めることができる。
設定の変更はアプリ側で通知 (NSNotification) から受け取ることができるため、状況によっては切り分けて処理する。

 

Differentiate Without Color (カラー以外で区別)

赤と緑(そしてどちらかの色と灰色)、または青とオレンジとを区別するのが難しい方がいるため、
OS 側でカラーに依存している箇所を認識しやすい色を変更する。

こちらも変更を通知 (NSNotification) から調べることができる。

 

まとめ

Multiple Winodw など OS 使いやすさ、新しい機能追加でアプリの体験の向上していると思われる。

そして、現状 Dark Mode を受け入れるということは、多くの決まりごとの中で UI / UX デザインする必要がある。

他社より Apple はアクセシビリティに力を入れており、初期の頃からある音声読み上げ、そして音声コントロール、触覚フィードバック、色覚障害者への色の補正などの配慮等の改良を加えている点も決まりごとのひとつだ。

新しい機能や Dark Mode を負担を少なく実現できるものが SwiftUI であるが、現状では SwiftUI には制限があり、今後は機能を増やし、さらに Apple プラットフォーム間での共通化を目指すだろうと予想される。

これからの iOS アプリの UI デザインは、ビジュアルや操作性のなどの経験値以外に、SwiftUI やシステムに寄り添った考えをよりする必要があるように思われる。

 

他のプラットフォームについて 

macOS

macOS の Safari でも Universal Link / Smart App Banner が設定可能になる。

f:id:x67x6fx74x6f:20190705084540p:plain

 

watchOS

単色カラーの文字盤がサポートされるため、アイコンなど単色や2色の画像で使用する「tintedImageProvider: CLKTintedImageProvider」の設定が追加された。

f:id:x67x6fx74x6f:20190705063332p:plain f:id:x67x6fx74x6f:20190705063359p:plain

 

tvOS

f:id:x67x6fx74x6f:20190705062300p:plain

Contents First と掲げ、Top Shelf という UI に変更された。

ホーム上部におかれているアプリをフルスクリーンの背景画像や動画で表示したり、そこから詳細画面をフリスクリーンで表示する。
カルーセルとなっているため、横スワイプ表示が移動できる。

Top Shelf のカルーセル表示は以下の3つ

  • Top Shelf Carousel
  • Actions Carousel
  • Details Carousel

 

f:id:x67x6fx74x6f:20190705062820p:plain
Top Shelf Carousel

f:id:x67x6fx74x6f:20190705062430p:plain
Actions Carousel

f:id:x67x6fx74x6f:20190705062510p:plain
Details Carousel

 

Top Shelf で表示する動画は 1080p の HLS (HTTP Live Streamlining) で 2 〜 5 分程度。

ユーザーアクションなど音は適切なタイミングで再生させるべしとのこと。

これらは Top Shelf Extension を使用し実装する。

 

アプリの上部のタブが Apple TV アプリの上部のような表示になったり、
カスタムオーバーレイができたり(チャプターリスト、上スワイプの振る舞い変更)、
フリップのジェスチャーで TV チャンネルやチャプター的なものを変えたり、
フルスクリーンブラウズ (TV アプリでクリックするとフルスクリーンのスクロールビューになるやつ)、
マルチユーザーの際、レイティングを設定してある場合は見れない、もしくはパスコードの入力がいる設定ができるよう追加や変更された。

 

ARKit 3 の変更点 (Xcode 11 beta 3)

ARSession

stopTrackedRaycasts

ドキュメント説明がないため詳細不明。
レイキャストを止めたか調べるものだと思われる。

static var stopTrackedRaycasts: ARSession.RunOptions { get }

 

ARSession.CollaborationData

ドキュメント説明がないため詳細不明。
Collaboration の際、何らかのプライオリティを決めるものだと思われる。

var priority: ARSession.CollaborationData.Priority { get }
enum Priority : Int
case critical
case optional

 

ARFrame

ARBody2D

ARSkeletonDefinition

ドキュメント説明がないため詳細不明。
スケルトンのジョイント(ボーン)の数を調べるものだと思われる。

var jointCount: Int { get }

 

ARCamera

ARCamera.TrackingState

TrackingState は enum だったのが、@frozen enum に変更された。

frozen な enum は Handling Future Enum Cases (英語) を参照。 github.com

 

ARView

RealityKit がらみなので割愛。
Scene、EntityTranslationGestureRecognizer で機能変更、追加。
そして以下が追加。

init(frame: CGRect, cameraMode: ARView.CameraMode, automaticallyConfigureSession: Bool)
Instance Properties
var automaticallyConfigureSession: Bool

 

上記のものに伴い「init(frame: CGRect, cameraMode: ARView.CameraMode)」が廃止された。

 

まとめ

ARView 以外では変更はほとんどない模様。

SceneKit の変更点 (Xcode 11 beta 3)

変更されたものは2つ。
simd framework から Swift Standard Liblary の SIMD Vector Types に変更された。

 

SCNVector3

init が float3 から SIMD3 double3 から SIMD3 に変更された。

init(SIMD3<Float>)
init(SIMD3<Double>)

 

SCNVector4

init が float4 から SIMD4 double4 から SIMD4 に変更された。

init(SIMD4<Float>)
init(SIMD4<Double>)

 

まとめ

SCNVector3 や SCNVector4 など核になる部分の変更がされていた。
float4 など SIMD4 エイリアスになっているため、既存のコードでも動くようになっている。

GameplayKit の変更点 (Xcode 11 beta 3)

変更されたクラスは2つ。
simd framework から Swift Standard Liblary の SIMD Vector Types に変更された。

 

GKPolygonObstacle

float2 から SIMD2 に変更された。

convenience init(points: [SIMD2<Float>])
convenience init(points: [float2])

 

GKPath

init(points:radius:cyclical:)

float3 から SIMD3、 float2 から SIMD2 に変更される。

convenience init(points: [SIMD3<Float>], radius: Float, cyclical: Bool)
convenience init(points: [float3], radius: Float, cyclical: Bool)

 

convenience init(points: [SIMD2<Float>], radius: Float, cyclical: Bool)
convenience init(points: [float2], radius: Float, cyclical: Bool)

 

まとめ

float で設定されていた部分が SIMD に変更されたと共に、GameplayKit 自体更新してくるところがありがたい。

2019 年版 上半期でベストな Mac を考える

Mac Pro が発表され、多分9月以降になると思われるため、
一旦、まとめてみる。
今回も iMac のコスパ最高。

Mac Pro は別記事で書いたためスルー、
あとユーラシア経済連合で未発表のラップトップと思しきものが 7 モデル登録されているため、数ヶ月後ラインナップが変わるかもしれない。

 

3点の注意事項

デスクトップとラップトップで同じコアの CPU でもデスクトップの方が処理能力が高い。 直付の GPU は大体 PCI Express 3.0 x16 128Gbps。
eGPU で使用する Thunderbolt は 40Gbps。
eGPU は同じ GPU でも性能を完全に出しきれない。
販売終了後サポート終了までのカウントダウンが始まるので、長く使いたいなら腹をくくって早めに買うべし。

あと、以降価格は税別価格。

 

コストの安いものを求める

ラップトップ

MacBook Air 13 inch Retina が良い気はする。
MacBook と MacBook Pro 13 inch はスペックが微妙と感じてはいる。

MacBook Pro 13 inch は 4 Core だが、Air 2 Core で GPU スペックは低い。
今自分が使用している MacBook Pro 13 inch Late 2016 と同等のものだと思ってもよい。

Touch Bar はないものの Touch ID はある。

  • 128 GB ¥134,800
  • 256 GB ¥156,800

 

メモリ 16GB ¥22,000。
バッテリー等の問題で Pro 13 inch も 16GB までしかあげられないので問題ないだろう。

ストレージ 256 GB から 512 GB は ¥22,000 なのでわりとお値打ち。

Thunderbolt 3 ポート が 2 つなのでここは困るかもしれない。
必ず電源で1つ奪われ、残りがもう1つしかないので。

 

デスクトップ

Mac Mini

旧 i7 相当の Core i5 6コア ¥122,800。
i7 で +¥22,000。

メモリ、ストレージも Air 同様に ¥22,000 毎で標準スペックの倍になる。

付属品が電源コードしかない。
ポインティングデバイス、キーボード、ディスプレイはないので注意。
あと、intel の内臓 GPU なのでかなりスペックが落ちる。

 

iMac 21.5 inch Retina 4K

Mac mini に 2 〜 4 万足すだけで 4K ディスプレイ、Radeon Pro 555X の GPU、Magic Mouse 2、Magic Keyboard がついてきてお得。

  • 4コア i3 ¥142,800
  • 6コア i5 ¥164,800

 

ただ、標準構成だとストレージが HDD なので、
1TB Fusion Driveストレージ +¥11,000、
256GB SSDストレージ +¥22,000 か
512GB SSDストレージ +¥44,000 にした方が良さげ。

 

ハイスペックなものを考える

iMac Pro CPU 8コア ¥558,800 をベースにしてみる。

  • Intel Xeon W 8コア 3.2GHz / Turbo Boost 4.2GHz
  • 32GB 2,666MHz DDR4 ECC メモリ
  • 1TB SSDストレージ
  • Radeon Pro Vega 56(8GB HBM2メモリ)

 

CPU は 10 Core などグレードをあげると +¥88,000 づつ上がる。

GPU は Vega 64(16GB HBM2) +¥60,500、
Vega 64X(16GB HBM2) +¥77,000。

 

Mac mini

iMac Pro に近い構成で ¥276,800。

  • Intel Core i7 6コア
  • 32GB 2,666MHz DDR4 メモリ
  • Intel UHD Graphics 630
  • 1TB SSDストレージ

 

CPU は 8 コアと比べ 75%、
GPU は非力過ぎるため、eGPU を追加すると 数万〜十数万。

 

MacBook Pro 15 inch

iMac Pro に近い構成で ¥451,300

  • Intel Core i9 8コア
  • 32GB 2,400MHz DDR4 メモリ
  • Radeon Pro Vega 20(4GB HBM2 メモリ)
  • 1TB SSDストレージ

 

第9世代の i9 は Turbo Boost が 5.0GHz であるため、フルパワーだと iMac Pro 8コアの CPU スペックを超える。
(Turbo Boost は本体温度の問題があるのでラップトップでちゃんと動かすのは難しいかも)

GPU は Vega 56 の半分以下なので、アップグレードせず eGPU を追加してもよいと思う。

とりあえず、2018 年版の MacBook Pro 15 inch と値段据え置きで CPU スペックが上がっているのでかなり良い。

 

iMac

iMac Pro に近い構成で ¥468,300

  • Intel Core i9 8コア
  • 32GB 2,666MHz DDR4 メモリ
  • Radeon Pro Vega 48(8GB HBM2 メモリ)
  • 1TB SSDストレージ

 

第9世代の i9 は Turbo Boost が 5.0GHz であるため、フルパワーだと iMac Pro 8コアの CPU スペックを超える。
GPU は 85% ぐらいの性能。

T2 チップがないので、T2 による HEVC エンコードが使えないが GPU 処理でも速く、ファイルサイズが小さくなるのであまり利点はないだろう。

 

eGPU について

Blackmagic eGPU が以下の価格。

  • Blackmagic eGPU ¥89,800
  • Blackmagic eGPU Pro ¥149,000

 

eGPU が Radeon Pro 580、
eGPU Pro が Radeon Pro Vega 56 となっている。

eGPU はグラフィックボード性能をそのまま出せないため、580 や Vega 56 に近しいスペックの eGPU を使用しても、ゲームなどの GPU によるリアルタイム描画はあまり期待できない。

ただ、動画のエンコードや機械学習など複数 GPU 処理を使用できるものに関しては、MacBook Pro や iMac 自体で GPU と eGPU と共に計算を行うので速くはなる。

 

Blackmagic のものは静音性を保つため努力をしているためお高いが、Sonnet や Razer など eGPU のケースとグラフィックボードを別で買う場合かなり安くなる。 Vega 64 の 8GB HBM2 版は安いと5万円以下で買えるのでケースと合わせても 10 万切るし、RX 580 や 590 は更に安い。

 

また、Vega 64 より 1.2 〜 1.3 倍速いの Radeon VII が秋葉館で売られており、Blackmagic eGPU Pro より安い。

www.akibakan.com

 

まとめ

コスト安くしたいなら MacBook Air。
正直、Mac mini や iMac は数万足すと上のグレードが買えるので長く使うならそこら辺も考えた方が良いかも。

ハイスペックでは iMac と MacBook Pro の i9 は、iMac Pro の 8 コアより、シングルスレッドとマルチスレッド共に高いため良い。
約5数万の差なので i9 を薦めるが、iMac と MacBook Pro の i7 もわりとよい。

と書きつつ、Xeon プロセッサの独自機能や GPU が直付されている iMac Pro の方が性能が高く、
eGPU の追加価格がそれなりにするので iMac Pro 購入を検討しても良いかもしれない。

Mac Pro について妄想してみる

なんとなく予想をまとめてみる。
貧民なので今回は基本的にはネガティブな内容。

CTO 価格がわからないが、現状公開されているエントリーモデルの価格から考えるにかなり高い構成になると予想される。
大金を使って少しでも速く処理したいクリエイティブ職向けで、その中でもかなりハイクラスでないとコストに対して見合わない気はする。

とりあえず、エントリーモデルに関しては iMac Pro 8 コアより高く、現状スペックにわりと厳しさがある。
(Radeon Pro 580X がデュアル構成なら若干よいかも)

www.apple.com

 

CPU

CPU が多分 Cascade Lake なので若干良くなるが、それ以外エントリーモデルでは CPU 以外スペックは良くない。
iMac Pro 8 コアから 18 へのアップグレードが ¥264,000 なので、Mac Pro で 28 コアにした場合は確実に 40 万超えそうではある。
(また同スペックの Xeon W のリテール版40万超えるので)

正直、今後 CPU を使いたおすものより、GPU 処理が強いものの方がユーザーとしては利点が多い気はすし、
Apple の紹介ページを見ると 28 コア と iMac Pro 18 コアでは、コア比以上に性能がないので、今後ベーススペックが高かったり、コアの多い Core i 系が出てしまうと iMac Pro と共にコスパがかなり悪いかもしれない。

そのため、前の Mac Pro が 2013 〜 2019 まで販売されていたため、今回優位性が速い段階で無くなる可能性がある。

 

GPU

Apple の紹介ページを見るとデュアル Radeon Pro Vega II と Vega 64X のとの差がギリギリ 2 倍なく、
Cinema 4D リアルタイム 3D レンダリングで Vega 64X と Vega II の差が少ない。
(そもそも、現状複数 GPU を使用してリアルタイム 3D レンダリングを速くする Metal の機能を知らない)

また、PCI Express が行うことができる電力供給の問題で一部スロットが独自の MPX となっており、 Radeon Pro Vege II Duo にした場合、1枚で約 500 W らしいので、CPU GPU を合わせるとスペック通り 1400 W かかるのは間違えないと思われる。

あと、現行 PCI Express が Gen4 が出始め Gen5 が策定されているので、Gen3 である Mac Pro は速い段階で Windows などの PC と GPU 性能差が出るかもしれない。

 

Afterburner

中身の詳細不明。
Apple が FPGA のエンジニアを募集していたとはいえ、すぐに開発はできないと思われるので、Intel Agilex か、Agilex と Apple A チップの混合の気がする。
Agilex の新しいものは最大 40TFlops とのことなので処理はできそう。

 

メモリ

8 コア以外は 2,933MHz メモリに対応している。
12 スロット使えるということは、36TB 以上は可能だと思われる。

多分、今後電源を切ってもデータが失われない不揮発性メモリ Optane DC Persistent Memory 対応できそうではある。
macOS 自体でも調整する必要があるが。

 

電源

  • 1,280W(108〜125Vまたは220〜240V)
  • 1,180W(100〜107V)

Max 出力では 200V 以上必要。
集合住宅などで 100V の場合は単相三線式でないと屋内の工事が必要なるかもしれなく面倒。

 

モジュール式

モジュール式にはなっているが、SSD のスロットは独自らしく、GPU は MPX を使用しているので、他社製で使えるのはメモリと空きの PCI ぐらいかなと。

 

まとめ

正直コスパは悪いが、macOS でハイグレードのものがこれしかないので、有り余るお金がある方には十分な機能をもつハードだと思われる。

ARKit 3 の更新内容(Xcode 11 Beta 2)

Beta 2 では AR の機能変更はない。

 

変更 / 追加

RealityKit の ARView なので厳密には ARKit ではないのだが、
ARView の Scene で Combine の Publisher 関連の関数が増えた。

Combine の Publisher で追加されたものがこちらでも適応されている。

  • publisher(for:)
  • publisher(for:_:)
  • publisher(for:::)
func publisher<T>(for: KeyPath<E, T>) -> Publishers.ValueForKey<Scene.Publisher<E>, T>
func publisher<T0, T1>(for: KeyPath<E, T0>, KeyPath<E, T1>) -> Publishers.ValueForKeys2<Scene.Publisher<E>, T0, T1>
func publisher<T0, T1, T2>(for: KeyPath<E, T0>, KeyPath<E, T1>, KeyPath<E, T2>) -> Publishers.ValueForKeys3<Scene.Publisher<E>, T0, T1, T2>

 

以上