Apple Engine

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

iPhone、iPad の GPU はいつか据え置き型ゲーム機超えるかもしれない(多分当分超えない)

一応、iPhone 7 の GPU が何なのか明確にはわかっていないが Wikipedia によると GT7600 Plus らしい。
カタログスペックによると GT7600 の約倍の 729.6 GFLOPS という性能。
周波数を落としたり、色々やって動作させたりしているっぽく、
iPhone 7 の発表によると iPhone 6s の 50% アップらしい。

でもって、iPhone 6s の GPU
PowerVR Series7 XT の6シェーダクラスタで192演算ユニットを持つ
PowerVR GT7600 が使われている。

性能的には単精度浮動小数点数で 384 GFLOPS
iPhone 6s の時点で PlayStation 3Xbox 360 を超えている。

 

ハードウェア別でまとめてみた

ハードウェア FLOPS
PlayStation 3 224 GFLOPS
Xbox 360 240 GFLOPS
Wii U 352 GFLOPS
iPhone 6s 384 GFLOPS
Xbox One 1.2 TFLOPS
PlayStation 4 1.8 TFLOPS
GeForce 1060 3.8 TFLOP
PlayStation 4 Pro 4.2 TFLOPS
GeForce 1080 8.8 TFLOPS

 

iPhone 6s の 50% アップとのことなので iPhone 7 は最大 576 GFLOPS となるだろう。

また、iPadGPU はコア数が倍になるので、 A10X は 1152 GFLOPS となり Xbox OnePlayStation 4 に近づくかもしれない。

あと、Nintendo Switch は 768 GFLOPS ではないかと予想されている。

 

以上を踏まえて、まとめてみた

ハードウェア FLOPS
PlayStation 3 224 GFLOPS
Xbox 360 240 GFLOPS
Wii U 352 GFLOPS
iPhone 6s 384 GFLOPS
iPhone 7 576 GFLOPS ?
Nintendo Switch 768 GFLOPS ?
次期 iPad 1.1 TFLOPS ?
Xbox One 1.2 TFLOPS
PlayStation 4 1.8 TFLOPS
GeForce 1060 3.8 TFLOP
PlayStation 4 Pro 4.2 TFLOPS
GeForce 1080 8.8 TFLOPS

 

次期 iPhone では集積率が上がるため、さらに速度の向上があると信じている。

 

とりあえず、据え置きの方もスペックが上がるので、 追い抜くのはまだまだ当分先だろう。

 

Apple A10X を予想する

Geekbench のベンチマークからの推測
iOS Benchmarks - Geekbench Browser

iPhone

端末 チップ名 周波数 シングルコア デュアルコア
iPhone 7 Apple A10 Fusion 2.3 GHz 3293 5369
iPhone 6s Apple A9 1.8 GHz 2369 3964
iPhone 6 Apple A8 1.4 GHz 1465 2445
iPhone 5s Apple A7 1.3 GHz 1205 2009

 

iPad

端末 チップ名 周波数 シングルコア デュアルコア
iPad Pro (9.7-inch) Apple A9X 2.3 GHz 2934 4729
iPad Air 2 Apple A8X 1.5 GHz 1782 3978
iPad Air Apple A7 1.4 GHz 1308 2190

 

変遷

iPhone

端末 周波数 シングルコア デュアルコア
A7 → A8 1.08 倍 1.22 倍 1.22 倍
A8 → A9 1.28 倍 1.61 倍 1.62 倍
A9 → A10 Fusion 1.27 倍 1.39 倍 1.35 倍

 

iPad

チップ 周波数 シングルコア デュアルコア
A7 → A8X 1.07 倍 1.36 倍 1.81 倍
A8X → A9X 1.53 倍 1.64 倍 1.18 倍

 

 

正直、わからん!

 

とりあえず、iPhone の伸び率が同じぐらいなので、その伸び率でいうと、 Geekbench のベンチマークのスコア的には、

 

以下のものと同等になってしまう。

シングルコアで
MacBook Pro (15-inch Late 2016)
Intel Core i7-6920HQ @ 2.9 GHz (4 cores)

デュアルコア
MacBook Pro (13-inch Retina Early 2013)
Intel Core i7-3540M @ 3.0 GHz (2 cores)

 

まとめ

バッテリーの問題等このスペックになるかはわからないが、 近しいものになるような予感はしている。

SoC のプロセスルール、GPU の強化、次世代のメモリーとかが使用されれば、さらに iPad の体感速度は上がるだろう。

A10 Fusion のように big.LITTLE な構成にしコア数を増やしてきても面白いし。

また、Snapdragon 835 では旧来の Windows アプリケーション(クラシック デスクトップ アプリ)が動くらしく、Photoshop を動かすデモを行っていた。
次の Windows Phone の Continuum 使用時にクラシック デスクトップ アプリが使用可能という噂もある。
(もし、スマートフォン秀丸とか使えたら面白い)

これらを踏まえると、もう一般範疇で使用されるパソコンの時代は終わりそうな勢いである。
もしくは、MacApple A シリーズのチップが載るというところ。

面白くなってきていると思われる。

Swift で Touch Bar 開発 - 今更だけど寿司を回す

なぜか SubView の Basic Animation が動かなくなった。
修正したコードを貼っておく。

github.com

 

前回のものがそのままでは動かなくなってしまい、そのまま直すのあれなので、今更だが寿司を回すことにする。

f:id:x67x6fx74x6f:20170124005816p:plain

あと、前回すっ飛ばした概要の説明。

 

今更だけど Touch Bar とは

宇宙に衝撃を与えるため、
ESC、ファンクションキー、電源ボタンを過去のものにして代わりにタッチセンサーを載せたもの。
アプリケーションの状態によって適切な機能が表示され、使用できるようになっている。
(物理の ESC キー返せ)

キーボードの拡張としてつくられたものなので、アプリケーションの表示上にない機能は実装してはならないらしい。
例外として、フルスクリーン時にクリックや右クリックがされない限り操作でにないものは、
画面上に表示されていなくても使用可能とのこと。

よって、残念ながら今回のタッチバーの機能は実装してもアプリの審査を通ることはない。

 

Touch Bar 動作

NSTouchBar クラスを呼び、デリゲートから NSTouchBarItem をぶち込むだけだ。

NSTouchBarItem は大概カスタムの NSCustomTouchBarItem で、
ボタンなどの UI や ViewController をぶち込む。

 

ちゃんとした説明

Touch Bar は NSTouchBar オブジェクトであり、NSTouchBarItem の配列である。
でもって、NSTouchBar オブジェクトは以下の条件を満たす必要がある。

  • キーボードの拡張らしいのでレポンダーチェインが使用されており、NSResponder のサブクラスのインスタンスである
  • NSTouchBarProvider プロトコルに準拠する
  • そのプロトコル内で makeTouchBar() メソッドを実装する

AppKit のほとんどのレスポンダーは、
NSTouchBarProvider プロトコルに準拠し、
Key-Value Observing (KVO) をサポートしていて、
キーの値の変更で通知し、delegate に書かれた振る舞いで Touch Bar の中身が変わる。

どうやら NSTouchBarProvider プロトコルに準拠するオブジェクトを Bar provider というらしく、
Bar provider が持つ touchBar プロパティ に nil を渡すと makeTouchBar() -> NSTouchBar? が動き、
NSTouchBar を設定値とともに返り値として、touchBar プロパティに渡す。

touchBar プロパティはデフォルトで空なので、
makeTouchBar() が呼ばれるが何もないので、
Touch Bar は何も表示されていない状態になる。

と、書いたが、 NSResponder も NSTouchBarProvider も makeTouchBar() も組み込まれているので、
とりあえず、つくる上では今回はあんまり深く考えなくてもよい。

 

今回の環境

Touch Bar がない場合はエミュレータを使って開発が可能。
Xcode を立ち上げてメニューバー Window > Show Touch Bar で表示される

 

下準備

プロジェクト作成

macOSCocoa Application を選択し、「Next」ボタンを押す。

f:id:x67x6fx74x6f:20170124005940p:plain

ファイル名を入力。
ちなみに、Swift を使うので Language は「Swift」を選択。
問題がなければ、「Next」ボタンを押す。

f:id:x67x6fx74x6f:20170124010644p:plain

保存先を選んでプロジェクト作成完了。

 

NSWindowController 的なクラスをつくる

今回は真面目につくる。
Command + N を押して新しいファイルをつくり、 Cocoa Class を選択して「Next」ボタンを押す。

f:id:x67x6fx74x6f:20170124010728p:plain

Class 名はなんでもよいが、とりあえずここでは「WindowController」に。
でもって、サブクラスを NSWindowController を選択。

f:id:x67x6fx74x6f:20170124010759p:plain

プロジェクト作成時の Main.Storyboard を使用するので、 「Also create xib file for user interfaceチェックボックスを外し、
「Next」ボタンを押す。

 

つくったクラスを Storyboard で紐付ける

Main.Storyboard 開き
左側 Document Outline の「Window Controller Scene」を選択
Command + Control + 3 を押して、右側の Identity Inspector
最初の項目 Custom Class の Class の下矢印から 先ほど作成した「WindowController」を選び変更。

これで下準備完了。

f:id:x67x6fx74x6f:20170124010908p:plain

 

とりあえず、Touch Bar に寿司を表示させてみる

まず、ESC キーの横に寿司を1つ表示させるよ。

はじめに Touch Bar に表示させる ViewController を作成から。

NSWindowController の時と同様に、 Command + N を押して新しいファイルをつくり、 Cocoa Class を選択して「Next」ボタンを押す。

Class 名はなんでもよいが、とりあえずここでは「SushiController」に。 でもって、サブクラスを NSViewController を選択。 プロジェクト作成時の Main.Storyboard を使用するので、 「Also create xib file for user interfaceチェックボックスを外し 「Next」ボタンを押す。

f:id:x67x6fx74x6f:20170124011101p:plain

SushiController.swift を開いて書いていく。

viewDidAppear() で Touch Bar 表示させるのだが、 loadView() で self.view を設定しないと怒られるので、 super.viewDidLoad() の下に self.view = NSView() を書く

override func loadView() {
    super.viewDidLoad()
    
    self.view = NSView()
}

そんでもって、Touch Bar 中身である viewDidAppear() の中を書いていく。

流れ

  • 表示するための NSView をつくる
  • NSView の大きさと位置を決める
  • SushiController の view に addSubview で作成した NSView を入れる
  • NSTextView に絵文字の寿司を設定する
  • NSView に addSubview で作成した NSTextView を入れる

以下、コード。

override func viewDidAppear() {
    
    let sushiView = NSView()
    
    sushiView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)
    sushiView.layer?.position = CGPoint(x: 0, y: 0)
    
    self.view.addSubview(sushiView)

    let sushi = NSTextView(frame: NSRect(x: 0, y: -2, width: 30, height: 30))
    sushi.string = "🍣"
    sushi.drawsBackground = false
    sushi.font = NSFont.systemFont(ofSize: 20)
        
    sushiView.addSubview(sushi)
}

あ、寿司は TextView で表示しているので drawsBackground で false を設定しないと
寿司の背景が白くなるので気をつけて。

とりあえず、Touch Bar 中身はつくったのだが、 表示する設定はしていないので、
続いて書いて行く

 

NSWindowController.swift をいじっていく。

もう忘れている可能性があるが、最初の方に説明している動作を実装する。

流れ

  • 表示する NSTouchBarItem の識別子をつくる
  • デフォルトで呼び出される makeTouchBar() をオーバーライドして NSTouchBar や識別子などを設定する
  • Touch Bar のデリゲートで識別子からカスタムの TouchBarItem を設定する

この3つを設定するを表示できる
てことで、以下コード。

まず、初めに
import Cocoa の下に Touch Bar 表示させるための識別子を設定する。
とりあえず、以下のコードを書く

fileprivate extension NSTouchBarItemIdentifier {
    static let sushiID = NSTouchBarItemIdentifier("jp.food.touchbar.sushi")
}

NSTouchBarItemIdentifier を拡張して NSTouchBarItemIdentifier を設定。
今回は一つしかないが複数ある場合は、被らないような文字列に。
ちなみに、fileprivate というアクセス修飾子は Swift 3.0 から導入されたもので
そのファイル内でしか使用できない。 今回の場合だと NSTouchBarItemIdentifier.sushiID は NSWindowController.swift でしか使用できない。
試しに、SushiController.swift に 「NSTouchBarItemIdentifier.s」まで打ち込んでも入力候補に出てこないはずだ。

次は override func windowDidLoad() { ... } の下に 以下の初期設定のコードを入力

@available(OSX 10.12.2, *)
override func makeTouchBar() -> NSTouchBar? {
    let mainBar = NSTouchBar()
    mainBar.delegate = self
    mainBar.defaultItemIdentifiers = [.sushiID]
    
    return mainBar
}

NSTouchBar を設定し、デリゲートとアイテムの識別子を設定し NSTouchBar を返す。 識別子は先ほど設定したものを配列として入れている。
ちょっと前に書いたように、オーバーライドした makeTouchBar() の返り値 NSTouchBar は WindowController が持つ
self.touchbar プロパティ渡される。
self.touchbar に自前の NSTouchBar を返す関数を放り込むことで Touch Bar の表示を変えることができる。

ちなみに @available(OSX 10.12.2, *) は見たままだが、
これを書いた下のブロックは macOSX 10.12.2 以降で動作するというやつ。

 

続いてデリゲートの設定
class WindowController {} の下に
以下のコードを書く

 

@available(OSX 10.12.2, *)
extension WindowController: NSTouchBarDelegate {
    func touchBar(_ touchBar: NSTouchBar, makeItemForIdentifier identifier: NSTouchBarItemIdentifier) -> NSTouchBarItem? {
        
        if identifier == .sushiID {
            let item = NSCustomTouchBarItem(identifier: identifier)
            item.viewController = SushiController()
            
            return item
        }
        
        return nil
    }
}

前回同様、WindowController を拡張してデリゲートを書いている。
内容は識別子が sushiID だったら NSCustomTouchBarItem を設定し、
viewController の中身を最初につくった SushiController() にしている。

 

入力した WindowController.swift は 以下のようになる。

import Cocoa

fileprivate extension NSTouchBarItemIdentifier {
    static let sushiID = NSTouchBarItemIdentifier("jp.food.touchbar.sushi")
}

class WindowController: NSWindowController {
    
    override func windowDidLoad() {
        super.windowDidLoad()
    }
    
    @available(OSX 10.12.2, *)
    override func makeTouchBar() -> NSTouchBar? {
        let mainBar = NSTouchBar()
        mainBar.delegate = self
        mainBar.defaultItemIdentifiers = [.sushiID]
        
        return mainBar
    }
    
}

@available(OSX 10.12.2, *)
extension WindowController: NSTouchBarDelegate {
    func touchBar(_ touchBar: NSTouchBar, makeItemForIdentifier identifier: NSTouchBarItemIdentifier) -> NSTouchBarItem? {
        
        if identifier == .sushiID {
            let item = NSCustomTouchBarItem(identifier: identifier)
            item.viewController = SushiController()
            
            return item
        }
        
        return nil
    }
}

Command + R を押すとビルドされ、アプリ起動後に、
Touch Bar の ESC キーの横に寿司が表示される。

 

f:id:x67x6fx74x6f:20170124012011p:plain

 

寿司を並べてみる

ただ複数配置するだけ。

 

SushiController.swift を開いて再度編集

こちらを

let sushi = NSTextView(frame: NSRect(x: 0, y: -2, width: 30, height: 30))
sushi.string = "🍣"
sushi.drawsBackground = false
sushi.font = NSFont.systemFont(ofSize: 20)

sushiView.addSubview(sushi)

 

こちらに変更

for i in 0...10 {
    let sushi = NSTextView(frame: NSRect(x: i * 80, y: -2, width: 30, height: 30))
    sushi.string = "🍣"
    sushi.drawsBackground = false
    sushi.font = NSFont.systemFont(ofSize: 20)
    
    sushiView.addSubview(sushi)
}

 

Command + R を押すとビルドされ、アプリ起動後に、
寿司がたくさん表示される。

 

f:id:x67x6fx74x6f:20170124015218p:plain

 

寿司を動かしてみる

ただ Core Animetion で横移動するだけ。

 

SushiController.swift を開いて再度編集

先ほどループさせたブロックの後に以下のコードを追加。

let anim = CABasicAnimation(keyPath: "position")
anim.repeatCount = .infinity
anim.duration = 1
anim.fromValue = sushiView.layer?.position
anim.toValue = NSValue(point: NSPoint(x: -80, y: 0))
sushiView.layer?.add(anim, forKey: "position")

アニメーションの種類は移動で、リピートは無限、1秒で -80px 左にアニメーションする。
このままだと、アニメーションが途切れるので、sushiView.frame の 幅を +80 する。

 

以下、SushiController.swift の全コード。

import Cocoa

class SushiController: NSViewController {
    
    override func loadView() {
        self.view = NSView()
    }
    
    override func viewDidAppear() {
        
        let sushiView = NSView()
        
        sushiView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width + 80, height: self.view.frame.height)
        sushiView.layer?.position = CGPoint(x: 0, y: 0)
        
        self.view.addSubview(sushiView)

        for i in 0...10 {
            let sushi = NSTextView(frame: NSRect(x: i * 80, y: -2, width: 30, height: 30))
            sushi.string = "🍣"
            sushi.drawsBackground = false
            sushi.font = NSFont.systemFont(ofSize: 20)
            
            sushiView.addSubview(sushi)
        }
        
        let anim = CABasicAnimation(keyPath: "position")
        anim.repeatCount = .infinity
        anim.duration = 1
        anim.fromValue = sushiView.layer?.position
        anim.toValue = NSValue(point: NSPoint(x: -80, y: 0))
        sushiView.layer?.add(anim, forKey: "position")
        
    }
    
}

Command + R を押すとビルドされ、アプリ起動後に、 寿司が回る。

 

 

おまけ

Command + W などで
アプリのウインドウを閉じてもアプリは終了しないので
class AppDelegate にその処理を追加する。

func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
    return true
}

 

おまけ2

今回ウインドウに Touch Bar を設定したため、Dock にぶち込んで戻すと Touch Bar に以前のものが表示されつつ、新しいアニメーションが表示されてしまう。
なので、見えなくなったら初期化するコードを SushiController へ書く。

override func viewDidDisappear() {
    self.view = NSView()
}

 

AppDelegate.swift で Touch Bar の処理を書くと上の処理はいらない。
self.touchBar の self を指す場所が NSApplication になるためだが、Apple のサンプルコードや Apple 謹製のアプリの振る舞いを見ていると NSWindow に touchBar プロパティを設定しているっぽい。

   

まとめ

以上、寿司を回してみた。
Touch Bar に NSViewController を表示させているため、かなりの自由なことができるようになっている。

 

iPhone と Occipital Bridge

そう言ってみれば Bridge を手に入れたので感想を書いてみる。

 

Occipital Bridge とは?

Bridge - Mixed Reality and Positional Tracking VR Headset for iPhone and iOS

www.youtube.com

現実と仮想空間を合成するヘッドマウントディスプレイ(HMD)で AR とか MR とか呼ばれているもの。

他の商品として Microsoft HoloLens があり、
違いはいくつかあるが、 大きな違いは視界がシースルーではなく iSight カメラと専用のセンサーで外界と合成するところ。

また Oculus Rift や HTC Vive と同じように凸レンズの二眼なもなので、Bridge の HMD には iSight カメラに湾曲したカメラを付ける。

アプリのコントロールができないため、開発版では Blutooth で操作するボタンが付属する。

 

そんでもって感想

Hololens と共に開発版ではあるが、残念ながら現時点では不完全な部分が多い。

 

キャリブレーション

元々 Structure Sensor という iPad につなげるセンサーで iPhone とそのカメラに流用したものである。

Structure Sensor は Kinect や HoloLens 同様に赤外線を飛ばし赤外線カメラで跳ね返る時間を元に物体を認識している。
iPad のカメラとそのセンサーをぴったり合わせるため、センサーのキャリブレーションが必要となる。

こちらは HoloLens のように単一の商品ではないため、センサーと凸レンズをかぶせた iSight カメラで2回キャリブレーションをする必要性がある。

ちなみに、センサーのキャリブレーションが認識しづらくて設定にかなり時間かかった。 夜やったが、陽が当たっていないとかなり難しいらしい。

 

結構厳しいところだが、
iSight カメラと Bridge のレンズが密着しており、 キャリブレーション時にそれを外すのだが、その際に iSight カメラの内側カバーの塗装が剥がれた。

 

空間認識

残念ながら HoloLens と異なり、リアルタイムではない。
なので、あらかじめスキャンしておかなければいけないし、スキャンできる空間にも限度がある。 ただ、HoloLens が空間を三角分割してポリゴン化しているのに対して、 Bridge はそれなりにポリゴン化する。

 

レイテンシー(遅延)

動作に対してはカメラと3Dとを合成するため処理的に辛い部分がある。 レイテンシーでの酔いだが、ギリギリ酔わない程度。

 

画面

iPhone 6, 6s, 7 のサイズを右目、左目用で正方形半分ずつなので狭い。 個人的には Plus サイズの方が良かったのではと思うが HMD が重くなるので致し方なし。

1334x750 の画面サイズだが半分にすると 667x750。 凸レンズにフィットするため、画面の映像は中央から膨らむ形となっていて、ディスプレイより画像は小さくなる。 そのため、視界が狭い感じは否めない。

 

アプリ

開発版なのでこちらしかない。

BRIDGET - A mixed reality robot

BRIDGET - A mixed reality robot

  • Occipital, Inc.
  • Entertainment
  • Free

キャラクタに視線を合わせボタンを押すとメニューが表示され各種機能を使うことができる。

骨のアイコンをクリックし空間にアイテムを投げると、キャラが投げたものを拾い自分のところまで戻ってくる。

3D 空間においてアバターという存在は大きく、 AR / MR の UI の操作として新しい知見を得た。

 

アプリ開発

HoloLens や他のデバイスと同じように Unity の使用できるがほとんどの機能が使えない。 代わりにネイティブの機能である SceneKit を使う必要がある。

 

HoloLens にあるもの

眉間の部分にセンサーがついており、手の動きによるジェスチャー操作が可能である。
エアタップと呼ばれる指をつまむ動作で物体を掴むことができ、ブルームという手を開く動作からメニューを開くことができる。

また、耳の付近に赤いパーツがあり、アレイスピーカーがあり3次元音響を実現する。 耳を塞がないため現実空間とミックスされる形となっている。

 

まとめ

HoloLens とは価格帯も違うので正直クオリティについていうのもなんだが、センサーを使用すればスマートフォンでも HoloLens のようなものが実現できるというのがわかる。

また、もし iPhone 7 Plus の iSight Duo による空間認識ができるようになれば、センサーは要らないだろう。

噂だが Apple 自体が AR メガネを開発しているとのことなので今後期待できるかもしれない。

   

iPhone 本体交換する際の Suica (Apple Pay) 移行方法

iPhone の本体交換する際、きっと ジーニアス・バー でも説明はされないのでご紹介。
というか、自分用のメモ。

公式の解説ができてたので、 こちらを見た方が早く解決するかも

www.jreast.co.jp

 

新しい Suica をつくる選択も……

そこそこ面倒なので Suica の残金があまりなければ、
新しいカードを作った方が煩わしくないと思われる。
あと、以下の文章を読まなくて済む。

 

はじめに

Apple Pay 等で使用する Wallet アプリにあるカードは iCloud で紐づけらており、
基本的には再度登録し直せば、新しい端末でも使用可能になる。

ただ、Suica に関してはこのようにはできない。
理由は Suica 等の交通系 IC カードは、カードごとに固有の ID が設定されており、
この世界にそのカードは1枚しか無いため。

2つの iPhone で1枚の Suica を使用することができなく、多分キセル防止のためだと思われる。

 

iPhone での Suica の注意点

Suica のカードを端末から消す際は注意が必要で、
JR でのカード設定をリセットするタイミングが AM 5:00 頃ということを頭に入れる。

要するに既存の Suica カードを再び登録する場合は、朝の5時にならないと使用することができず、
その近辺でカードを消すと丸1日使用できなくなる。

あと、頻繁に Suica カードを消すとキセル防止ため、
カード設定がリセットされるまでカード再登録ができなくなる。

そんでもって、AM 2:00 〜 3:00 頃は JR 側のメンテナンスかよくわからないが、
Suica 関係の操作ができない可能性があるので注意が必要。

 


Suica の移行方法

その1 移行前の iPhone から Apple Pay 関連のカードの削除

移行前の iPhone が手元にある場合

Wallet アプリを起動し、Suica のカードを選び右下の i のアイコンをタップ。

f:id:x67x6fx74x6f:20170408052258p:plain

 

詳細情報が出るので、一番下の「カードを削除」をタップ。

何度も書くが朝5時にならないと Suica の再アクティベーションできないので注意

f:id:x67x6fx74x6f:20170408052313p:plain

  

すでに交換していて移行前の iPhone がない場合

Mac / PC などで iCloud.com を開き、歯車アイコンの設定 (Settings) をクリック。

f:id:x67x6fx74x6f:20170408052512p:plain

 

紐づけられている端末が列挙されるので、
移行前の iPhone を選択。

f:id:x67x6fx74x6f:20170408052829p:plain

 

Apple Pay のカードを全て消す的なものが出るのでクリック。
(英語なので Remove All)

f:id:x67x6fx74x6f:20170408054741p:plain

処理が終わり Apple Pay のロゴが消えれば完了。

こちらも朝5時にならないと Suica の再アクティベーションできないので注意


その2 新しい iPhone へ登録

iPhone に使用していた iCloud のアカウントを端末に設定。

Wallet アプリの Apple Pay の右上の + ボタンをタップしカードを設定で完了。

 

朝5時頃、JR 側でカード設定のリセットされれば使用できるようになっているはず。


 

Suica アプリ の エラー

Q.1日経ったが、Suica アプリで C105 のエラーが出てアクティベーションされない

A.残念ながら何らかの問題が出ている模様
  カード消して再チャレンジ

 

Q.Suica アプリで C106 のエラーが出てアプリ側で認識しない

A.残念ながら何らかの問題が出ている模様
  カード消して再チャレンジ

 

その他のエラー検索

appsuica.okbiz.okwave.jp 

 

Apple Watch

こちらも同様。
移行する Watch にあるカード情報を消して、登録し直す。

 

最後に

状況によっては、丸2日使えなくなる可能性があるので、その間は現金や他のカードを使用することも考えるべし。

 

Touch Bar の表示例

Touch Bar の対応アプリ開発をする時が来るかもしれないので、
OS インストール時に入っていたアプリの Touch Bar 表示を調べてみた。

 

Finder

カスタマイズでほぼ全てのツールバーの機能が使用できる。 唯一 Touch Bar の機能のカスタマイズができる。

f:id:x67x6fx74x6f:20170108195650p:plain

 

Safari

新規タブを開くと、そこに表示されているお気に入りが表示される

f:id:x67x6fx74x6f:20170108201651p:plain

アドレスバー フォーカス時
入力以外に、戻る、進む、新規タブのボタンがある

f:id:x67x6fx74x6f:20170108202302p:plain

複数タブが開いている場合、ページが一部表示され、
戻る、進む、検索、新規タブのボタンがある

f:id:x67x6fx74x6f:20170108201856p:plain

 

また、オーディオやビデオを再生するとスクラブさせる UI が表示される。

 

iTunes

選択するとメディアコントロールが表示され、巻き戻し、早送り、再生、再生位置をスクラブできる UI が表示される。
表示されているものは音楽だが動画の場合、他のボタンが表示される。

f:id:x67x6fx74x6f:20170108203708p:plain

 

Mail

メール選択時に、新規、返信、アーカイブ、検索、迷惑メールに移動、フラグのボタンが表示される

f:id:x67x6fx74x6f:20170108202838p:plain  

 

Calendar

月の表示。
日、週、年 も字が変わるだけで見た目は同じ。

f:id:x67x6fx74x6f:20170108204225p:plain

予定選択時
カレンダー選択、詳細情報のボタン

f:id:x67x6fx74x6f:20170108205226p:plain

場所、時刻、予定参加者はショートカットボタンが用意されている

f:id:x67x6fx74x6f:20170108204229p:plain

日時選択

f:id:x67x6fx74x6f:20170108205055p:plain

 

Message

新規、メッセージの送信などのボタンが表示
FaceTime も同等のものが表示される

f:id:x67x6fx74x6f:20170108205301p:plain

 

マップ

通常
GPS 使用するボタン、検索窓が表示

f:id:x67x6fx74x6f:20170108205659p:plain

起動時、検索窓フォーカス時
近隣のレストラン、カフェ、買い物、映画を表示するボタンが表示される

f:id:x67x6fx74x6f:20170108211835p:plain

ピン選択時
詳細情報のショートカットを表示される

f:id:x67x6fx74x6f:20170108211838p:plain

経路ボタン 車、徒歩、交通機関切り替えのショートカットボタンが表示

f:id:x67x6fx74x6f:20170108211839p:plain

 

リマインダー

予定選択時
新規、完了、情報、時間、場所の追加などのボタンが出る

f:id:x67x6fx74x6f:20170108205700p:plain

 

iBooks

本選択後、 ページをスクラブ、検索、ブックマークボタンが表示される

f:id:x67x6fx74x6f:20170108212551p:plain

 

計算機

クリア、プラスマイナス変換、%、小数点、四則演算のボタンが表示される

f:id:x67x6fx74x6f:20170108212951p:plain

 

プレビュー

各機能のボタンが表示され、 起動時は調整が選択される

f:id:x67x6fx74x6f:20170108225133p:plain

 

左ボタンがポップオーバーになっており、
調整、選択、マークアップの3つの区分から選択する

f:id:x67x6fx74x6f:20170108225135p:plain

 

調整 f:id:x67x6fx74x6f:20170108225133p:plain

選択 f:id:x67x6fx74x6f:20170108225128p:plain

マークアップ f:id:x67x6fx74x6f:20170108225130p:plain

 

GarageBand

楽器のパラメータ設定を表示
画像は Steinway Grand Piano

f:id:x67x6fx74x6f:20170108213615p:plain

 

QickTime

再生・停止ボタンと再生位置をスクラブできる UI が表示

f:id:x67x6fx74x6f:20170108234300p:plain

 

設定

戻る、進む、すべてを表示のボタンが表示

f:id:x67x6fx74x6f:20170108214123p:plain

 

Pages

文字選択時デフォルトに近い文字編集が表示される

f:id:x67x6fx74x6f:20170108214300p:plain

 

Numbers

セル選択時にフォーマット、数式、デフォルトに近い文字編集が表示される

f:id:x67x6fx74x6f:20170108214425p:plain

 

Keynote

スライド選択時の表示

f:id:x67x6fx74x6f:20170108214621p:plain

 

アラートなどのモーダル

エラーメッセージなどアラートウインドウを表示した場合
ボタン部分が表示される。

f:id:x67x6fx74x6f:20170108215152p:plain

以前は SafariJavaScript で alert() や confirm() でも表示されていたが動かなくなった。

 

Terminal

ウインドウ色の変更、コマンドの man が表示できるボタンなど表示

f:id:x67x6fx74x6f:20170108215939p:plain

 

Xcode

起動時

f:id:x67x6fx74x6f:20170108220318p:plain

ビルド、停止、タブの移動などのボタンを表示

f:id:x67x6fx74x6f:20170108215600p:plain

 

テキスト入力時

通常

f:id:x67x6fx74x6f:20170108221211p:plain

リッチテキスト

f:id:x67x6fx74x6f:20170108221208p:plain

 

絵文字

通常時(履歴表示)

f:id:x67x6fx74x6f:20170108221206p:plain

右フリックで絵文字のカテゴリー選択

f:id:x67x6fx74x6f:20170108221209p:plain

 

Control Strip に追加されるもの

システムで右に4つの領域は固定されているが、特定の条件下でバックグラウンドに回った際に、5つ目の機能が追加される。

現状、確認しているのは iTunesQuickTimeSafari などで音楽や動画を再生している時と、
Xcode でビルドしアプリケーションを動かしている時に変更される。

5つ目の表示は後勝ちで、iTunes で再生後に Xcode でビルドすると、ボタンの表示は Xcode のものになる。

 

Control Strip の音楽、動画再生ボタン

iTunesQuickTimeSafari などで音楽、動画を再生すると Control Strip に5つ目のボタンが現れる。

f:id:x67x6fx74x6f:20170108223037p:plain

ボタンを押すとスクラブできる UI が表示される。
複数再生していると左側のボタンで選択できる模様。

f:id:x67x6fx74x6f:20170108223526p:plain

 

Control Strip の Xcode デバッグ

Xcode でビルドすると Control Strip に5つ目のボタンが現れる。

f:id:x67x6fx74x6f:20170108223038p:plain

ボタンを押すとデバッグ系のボタンが表示される。 音楽、動画を再生していると Control Strip に5つ目のボタンが変更される。

f:id:x67x6fx74x6f:20170108223301p:plain 

 

アプリ開発者は Control Strip をいじることはできないが、
プライベート API を使用すると、Control Strip も開発者が変えることができる。
ストアの審査に通らなくなるが。

 

その他

iMovie、写真 など一部紹介していないものがあるが他の Touch Bar の UI と大体同じようなものが出る。
また、App Store のアプリなど Apple 製のアプリでも全く表示されないものある。

 

開発

開発面でいうと、
SDK で用意されている UI は、
Touch Bar 自体と View を除くと以下のものしか用意されていない。

  • Fixed Space
  • Flexible Space
  • Popover
  • Group
  • Other Items Proxy
  • Scrubber
  • Color Picker
  • Character Picker
  • Sharing Service Picker
  • Label
  • Button
  • Slider
  • Segmented Control

Scrubber は写真アプリや Safari のタブなど使われている画像を選ぶもの。
そのため、動画の再生位置を表示するものなど、上のリストにないものは自前で UI をつくる必要がある。

標準的なものはこのような形となっており、もし macOS アプリで Touch Bar を開発する際は、標準アプリの振る舞いを試してみると良いかと思われる。

 

Touch Bar 唯一の問題点

Touch Bar 使用して数週間経った。
基本的には便利だとは思うが唯一問題点がある。

Touch Bar は有機ELであり焼きつき防止のためか、
1分そこそこでスリープし、真っ暗になる。
スリープ状態になるとタッチすることで復帰可能だ。

問題はフルスクリーンで動画を観る時で、
動画視聴中に Touch Bar がスリープとなる。
そうなると ESC キーでフルスクリーンの解除がすぐできない。

Touch Bar の エリアをタップし、ESC キーを押さなければならなく、
以前よりプロセスが増えた。

Command + Option + F で解除できるがアプリによっては他の動作が割り当てられていることがあり不便。

 

正直、Touch ID 同様に ESC は物理ボタンにしたほうがよかったのではないかと思っている。

それに、もし Touch Bar が動かなくなった場合、ESC キーが使えなくなるという問題がある。