Apple Engine

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

iOS、tvOS をコンピューティングマシンとして使いたい

複数端末で、もし同じアカウントを使用して場合に、直接各端末のアプリ同士でデータの通信をできるようにならないかなと考えている。

一応、今でも可能だがもっとスマートで、アプリを横断できるものがほしい。

 

例えば Apple TV でデータをダウンロードして Wi-Fi 経由で iPhone に送る事や、 複数 Apple TV でなんかしらの計算や重い処理を行い結果を返し iPadApple Watch に送るなどできたら面白いかと。

単純に Apple A チップが今後も発展してくのなら、ホームサーバー、ホームコンピューティングとして Apple TV や余っている iPhone / iPad を使えそうな未来を感じているので。

SiriKit とタイムラインベースのオペレーション

iOS 10 で SiriKit が発表された。 Siri の機能が開発者に解放され期待していたが、使える機能は以下のもの

  • 音声通話
  • Message アプリ
  • 写真検索
  • 他のユーザへの支払い
  • ワークアウト
  • 乗車予約

この中でも使用できる機能が決められている。

希望的観測だが iOS 11 では、会話認識して各アプリが操作できるようになると信じている。
そうなることによって、対話ベースかつ、タイムラインベースのオペレーションが可能になると思われる。

 

対話ベースかつタイムラインベースのオペレーション

スマートフォンでハードウェア的な革新は早々に起きないので、使いやすさを向上させるとなると OS の機能追加しかないだろう。

自分がスマートフォンのアプリで面倒だなと思う点は、アプリの起動と操作だ。
もし、Siri からのコントロールで最適なアプリの選択、起動、機能の実行を行ってくれれば、快適になるのではないかと思っている。

また、Siri のインタラクションがタイムラインなっているので履歴からの操作ができれば、音声操作を再度行わずに済み、 スプリングボード、いわゆるホーム画面がいらなくなるだろう。

 

問題点

Siri から起動され機能の実行結果がタイムライン上に表示されるとなると、 多分、広告収入で成り立っているアプリは厳しくなるだろうと思われる。

USB-C Macbook / Macbook Pro ドングル問題

Macbook や新しい Macbook Pro は USB-C(Thunderbolt 3) とイヤフォンジャックの拡張しかなく、
変換用のドングルが増えるやないかという記事がちらほらある。

 

言わんことはわからなくもないが、
たぶん、Apple のラップトップの利用シーンが無線での利用を重きに置いているためだと思われる。

現状の MacBook Pro の 概要の項目では USB-C(Thunderbolt 3) は 5K ディスプレイと RAID のストレージしか紹介していない。
要するに、無線で運用するには厳しいものしか紹介していないのだ。

これらを考えるに電源と高容量のデータの転送以外、ワイアードにする必要性がないと考えているのかもしれない。

 

例えば、LG UltraFine 5K Display。
発表のプレゼンで薦めていた製品だが Thunderbolt 3 ケーブル接続1本で MacBook の電源とディスプレイ入力をサポートし、 ディスプレイ側には USB-C が 3つある。

そのため MacBook Pro に刺すケーブルは1本で接続できる。

 

これらを考えると、今回の件で Apple 的にはラップトップの USB Type-A のコネクタは確実に過去となった。
残念ながら USB Type-C で接続せよという世界になるだろう。

 

それでも問題はある
iOS 端末での Lightning 接続

有線でのバックアップやシンク、開発しているアプリの転送などは、残念ながら A から C に変換するケーブルが必要になる。

お高いが USB-C > Lightning のケーブルがあるのでこちらを使うとスマートだろう。

 

MagSafe の廃止

MagSafe は替えが利かないので正直こっちの方が痛い人が多いのではないかと思われる。
不格好ではあるが USB-C の接続部分がマグネットで分離できるものがあるのでそちらを使うしかない。

 

期間限定で USB-C と Thunderbolt 3 のアクセサリを特別価格で提供

www.apple.com

林信行氏曰く、普及には遠く現場での実用性に乏しいという声を受け年内に限り USB-C 用アダプターを大幅値下げとのこと。

正直、普及が遠いということは最初から分かっていたことなので、 Apple 純正アクセサリは値下げというより、値段を下げた価格で出すべきだった。

MacBook でアクセサリを買った人がかわいそうすぎる。

 

イヤフォン

イヤフォンジャックは残ったが、iPhone 7 / 7 Plus の Lightning 直付けイヤフォンと共有できない。
となると、共有しようとすると無線接続か、3.5 mm と Lightning の変換アダプタの選択しかなくなる。

 

まとめ

以下、Apple からのお告げ

  • マウスなどアクセサリは基本無線で運用すべし
  • 4K, 5K ディスプレイへ表示, 大容量のストレージなど無線では遅延が起こるものや、電源供給などは有線で使うべし
  • iOSバイスは iCloud でシンクせよ。アプリ開発は別途ケーブルを買うべし
  • MagSafe はあきらめろ

 

Swift で Touch Bar 開発 - ラベルを張り付ける

そのままでは動かなくなったので、
新しい方の記事を参照

appleengine.hatenablog.com

 

以下、過去記事

 


 

とりあえず、タッチバーにラベルを貼るだけのアプリを作成してみたいと思う。

f:id:x67x6fx74x6f:20161102184156p:plain

シミュレータを使用するのでここ最近の Mac なら使用できるはず。

 

下準備

2016/11/02 現在では以下のバージョンの macOSXcode が必要。

  • macOS 10.12.1 build 12B2657 以上
  • Xcode 8.1 (8B62) 以上

 

まずは App ストアから最新の macOSXcode をインストール。

罠としてはストアの macOS ではタッチバーのシミュレータは動作しない可能性がある。
Xcode 起動後、メニューバーの Widnow に Show Touch Bar が出なければ、 https://support.apple.com/kb/dl1897 から macOS 10.12.1 build 12B2657 をダウンロード。

terminal で sw_vers を入力して表示されるビルドナンバーが 16B2555 となっていても、
上記のものをインストールしないと Show Touch Bar が表示されない場合があるので注意。

f:id:x67x6fx74x6f:20161102184330p:plain

これで下準備完了。 Show Touch Bar を押すとシミュレータが起動する。

 

コードの振る舞い

どうやら、NSWindowController が起点となっており、
NSWindowController の makeTouchBar() メソッドをオーバーライドして NSTouchBar を設定し、
デリゲートで中身を設定する模様。

また、ViewController の方でも設定可能っぽい。

タッチバーや、タッチバーに表示するアイテムには識別用の名前が必要らしく、Apple のサンプルだとアプリ名 + アイテム名という形になっている。

 

開発

Xcode から新規プロジェクトで macOS タブの Cocoa アプリを選択。
適当な名前を付けプロジェクトを作成。

まず初めにプロジェクト設定の macOS Deployment Target を 10.12.1 で手で入力。
候補が出ないので。
現状、このバージョンを入力しないとビルドできない。

f:id:x67x6fx74x6f:20161102184234p:plain

 

コードを書く
NSWindowController

今回は面倒なので、最初からある ViewController.swift に書く。

class ViewController の上に以下を書いてみた。

class WindowController: NSWindowController {
    
    override func windowDidLoad() {
        super.windowDidLoad()
        
    }
    
    override func makeTouchBar() -> NSTouchBar? {
        
        let touchBarIdenitifier = NSTouchBarCustomizationIdentifier(rawValue: "com.tb.TestToolBar")
        let touchBarLabelIdentifier = NSTouchBarItemIdentifier(rawValue: "com.tb.TestToolBar.label")
        
        let touchBar = NSTouchBar()
        touchBar.delegate = self
        touchBar.customizationIdentifier = touchBarIdenitifier
        touchBar.defaultItemIdentifiers = [touchBarLabelIdentifier, .fixedSpaceLarge, .otherItemsProxy]
        touchBar.customizationAllowedItemIdentifiers = [touchBarLabelIdentifier]
        
        return touchBar
    }
}

 

基本は NSTouchBar に識別名を設定し、そのデリゲートを設定して返すだけ。

今回は面倒なので、識別名は makeTouchBar() に touchBarIdenitifier、touchBarLabelIdentifier を書いている。
Apple のサンプルだと、fileprivate extension NSTouchBarCustomizationIdentifier 等の中で使っていて、本来はこちらの方がよいと思われる。

 

NSTouchBar のデリゲート設定

デリゲートを設定しているので、以下のものをどこかに書く。

extension WindowController: NSTouchBarDelegate {
 
    func touchBar(_ touchBar: NSTouchBar, makeItemForIdentifier identifier: NSTouchBarItemIdentifier) -> NSTouchBarItem? {

        if identifier.rawValue == "com.tb.TestToolBar.label" {
            let custom = NSCustomTouchBarItem(identifier: identifier)
            custom.customizationLabel = "Label"
            
            let label = NSTextField.init(labelWithString: "はろー わーるど!")
            custom.view = label
            
            return custom
        }
        
        return nil
    }
}

 

見ての通り touchBar() メソッドで識別名を調べて設定し、ラベルを Touch Bar の view に設定している。

view なので、ボタンやスライダー、カラーピッカー、画像、セグメントボタンなどいろいろ設定可能。
もちろんのことだが、Touch Bar のボタン等に target でメイン画面での振る舞いと紐づければ、Touch Bar からアプリの操作もできる。

また、タッチイベントが取れるので、Apple のデモのように Final Cut Pro のタイムラインや、DJ ソフトの波形の指で左右に移動でする UI を使用できる。

 

一応、ViewController 全コードのスクショ。

f:id:x67x6fx74x6f:20161102184511p:plain

 

Storyboard の設定

あとは Storyboard の MSWindowController の Class を先ほどつくった WindowController クラスを設定する。

f:id:x67x6fx74x6f:20161102184425p:plain

ビルドすると Touch Bar にラベルが表示されるはず。

 

これで触りを知ることができたと思われる。
いろいろ説明を省略しているので公式サイトの情報を見てほしい。

Touch Bar on the new MacBook Pro - Apple Developer

Surface Dial と Touch Bar

まだ、世に出ていないものなので予想なのだが、
2つ UI は画面を補助するツールとしてアプローチは似ている。

 

Surface Dial

www.youtube.com

画面に対して、直接操作するものであり、直観的である。
バイスの回転を上部のプレス、ペンと操作することで、多くの操作を補助できるのではないかと思われる。

バイスを追加しインターフェイスを足して操作の向上を行う製品である。

 

Touch Bar

www.youtube.com

Touch Bar はファンクションキーという初心者から見ると使い道のわからないボタンの UI を改良し、メイン画面のコンテキストに合わせて機能を振り当てるツールバーである。
少なくともファンクションキーよりは直感的だ。

既存のパーツを無くし新しい機能に変える、どちらかというと引いて操作の向上行う製品である。

 

互いの問題点
Surface Dial

正直単体では回転するデバイスで従来からあるこの系統のコントローラーと変わりはないが、Surface Studio の画面に設置すると本領を発揮する。

問題は画面を両手以外に、このデバイスでつぶされるということである。

また、Surface Studio 自体、クリエータ向けの作業を行うための商品だが、
例えばこの大画面で何かを全面で閲覧したい時にこのデバイスが邪魔になる。
何かを閲覧する際には Surface Dial を退かさなければならないのである。
多分、画面を水平状態から、垂直状態にした場合でも Surface Dial を固定できるわけではないので使えない気がする。

 

Touch Bar

メインの画面に対しての副機能であるため、フルスクリーン時以外は、 Touch Bar の機能はメイン画面と同じであり、独自機能が載せられない。

また、Touch Bar の操作の直前や直後にトラックパッドを使用する場合、 手の可動が大きく、煩わしさを感じるのではないかと思っている。

機能が多いアプリに対して、Touch Bar を有効に使用できるかは、使う側よりアプリ開発者に委ねられる。

 

まとめ

Microsoft はタッチパネルの拡張としての UI をつくり、Apple はキーボードの拡張としての UI をつくった。 内容的にはほぼ同じ様な機能の拡張だが、Microsoft は主にクリエーター向けに対して、Apple は汎用的な様にみられる。

互いに似たような機能で異なるアプローチの UI を出してきて、今回の両社の商品発表は本当に面白いなと感じている。

Touch Bar について

今回発表された MacBook Pro の一部機種で搭載される Touch Bar。
新しいデバイスというよりはキーボードの延長という形。

www.youtube.com

www.youtube.com

どちらかというと、従来のアプリというよりも、
フルスクリーンのアプリでの使用を想定したものだと思われる。

タッチ操作のないラップトップでフルスクリーンにした際、
画面を操作してナビゲーションを出すしかなくなる。
そう考えるとキーボード側に可変の UI を表示して、
画面上にコントローラーやナビゲーションを表示しない方がスマートだろう。

また、macOS アプリの UI の都合上、上部にメニューバーやツールバーがあり、カーソルの移動量が多い。
それを軽減するための新しい UI だとも考えられるのではないかと思われる。

 

開発

macOS Human Interface Guidelines によると、開発者作成できる部分が決められている。
画像でいうと、App region と呼ばれるところがアプリの領域である。

f:id:x67x6fx74x6f:20161028171540p:plain

設計する際には以下を守れとのこと。

  • メインの画面に対応するコンテキストで Touch Bar の機能を作成すること。 アプリがどのようなレベルで使われるか検討市実装すること。
  • キーボードとトラックパッドの延長としてタッチバーを使用すること。セカンダリディスプレイとしては使わず、ユーザーの注意を疎外させないこと。
  • 可能な限り大きさや色など物理キーボードと外観を同じようにすること。
  • Touch Bar でのみ使用できる機能を公開しない。すべての人が Touch Bar を使用できるわけではない
  • すぐに結果を出す制御の機能を提供すること。複数のステップを行うものも Popovers などを使用し最小限に抑える
  • ユーザーインタラクションに即に対応させる。メイン画面のコンテンツが何らかの動作で更新状態でも、タッチバーはユーザーのタッチに応答する必要がある。
  • 可能であれば Touch Bar で動作開始したものは、Touch Bar の操作内で完了してもよい。タッチバーよりも複雑な UI のコントロールを必要としない場合、キーボードやトラックパッドを使用するように切り替える必要はない。
  • よく知られているキーボードショートカットの動作をタッチバーを使用しない。すべて選択、選択解除、コピー、切り取り、貼り付け、アンドゥ、リドゥー、新規、保存、閉じる、プリント、終了など。また、ページアップ、ページダウンなどのキーボードナビゲーションを Touch Bar のコントロールを含めるべきではない。
  • メイン画面上にあるコントロールを Touch Bar にある場合は両方同じ状態にさせる。メイン画面で無効になっている場合は Touch Bar でも無効にさせる。
  • Touch Bar の動作をメイン画面にミラーリングさせない。Touch Bar のボタンをタップし、オプションのリストが表示されても、メイン画面では表示させない。

 

アクセシビリティ

目や耳に障害がある方、他の障害を持つユーザーのための広範なアクセシビリティ機能を提供する。Voice Over を使用した代替ラベルなど。

 

カスタマイズ

固有のニーズを満たすため、必要であれば Touch Bar コントロールの追加、削除、および並べ替えなどカスタマイズできるようにする。

 

フルスクリーンアプリ

Touch Bar の機能はメイン画面と同じようにするべきだが、フルスクリーン表示で隠れてしまう関連機能は Touch Bar のみに機能が表示されてもよい。

 

ジェスチャーで使用できるもの
  • タップ
  • タッチ&ホールド
  • スワイプ(横方向のみ)
  • マルチタッチ

iPhone 等と同様。
マルチタッチはピンチなどに使用できるとのこと。

 

アニメーション

アニメーションは避ける。キーボードの延長なのでボタンに注目させて作業を阻害させない。

 

上品かつ最小限の色を使用する。
Touch Bar は物理キーボードに外観が類似しているべきで、
着色するなら単色の色が最適。

P3 の色空間をサポートし、デフォルトでは肯定的な表現として青、否定的な表現として赤が割り当てられている。

f:id:x67x6fx74x6f:20161028171907p:plain

文字ベースだと分かりづらいので、アイコンも使用可能とのこと。
NSImageNameTouchBarAddTemplate で「+」マークなど、システムアイコンも用意されている。

 

レイアウト

Touch Bar 表示領域は 幅 2170px、高さ 60px。 Retina なので、本来のサイズは半分の 1085px × 30px。

f:id:x67x6fx74x6f:20161028171925p:plain

基本は 1370px が開発者の使用できる場所で配置するフォントは San Francisco か macOS のシステムフォントを使う。

ボタンレイアウト割愛

 

アイコン

当然ながらアイコンも Retina。 Touch Bar の高さの表示領域限界の 60px で作ることもできるが、44px の正方形に入るようにする。
44px が領域となっているが 36px 内に収まるようにして、残りはマージンとして用意されている。

画像のような時計やメール、新規作成など。

f:id:x67x6fx74x6f:20161028171948p:plain

 

2px。状況によっては 3px も試す。
角丸半径は線に対して 1px 足す。(訳間違っているかも?)

 

標準 UI
  • ボタン
  • トグルボタン
  • 候補リスト(予測変換など)
  • 文字ピッカー(絵文字など)
  • カラーピッカー
  • ポップバー(ボタンを押すとさらにコントロールが表示される)
  • スクラバー(日付や写真の選択)
  • セグメントコントロール
  • シェアボタン
  • スライダ

実機を見た方が早いので詳細は割愛。

まともな Lightning 直結イヤホン、その後継機

少し前、最寄りのヨドバシで Lightning 直結イヤホンをいくつか試したが、
まともに聴けるヤツは radius HP-NHR21 だった。
この手のやつでは一番お値段が高いので当然といえば当然かも。

でもって、どうやらその後継機 HP-NHL21 が出るらしい。

 

前作、同様 Y字のリモコンにマイクはついていないため、
本当に音楽鑑賞用だと思った方がよい。

また、4つ目のボタンにイコライザー変更などのが追加されている。 

 

HP-NHL21 のヨドバシ検索結果

http://www.yodobashi.com/ec/category/index.html?cate=&word=HP-NHL21

 

旧製品だが値下げ中