読者です 読者をやめる 読者になる 読者になる

Apple Engine

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

WWDC 2017 で発表されたらいいなと思う開発者向けの機能、ハード、サービス

ソフト面
  • iSight Duo からの深度情報取得
  • 深度情報取得からの AR
  • カメラ画像と深度情報取得からの物体認識
  • 3D の航空写真地図から建物 3D オブジェクトの取得
  • iOS の UI の刷新
    (もしするなら tvOS の様になりそう)
  • iOS の UI でダークテーマ
  • iOS で tvOS のようにパララックスで表示されるアプリアイコン
  • グラフなど統計用の UI
    (Numbers の UI を全般的に使いたい)
  • NFC の使用制限緩和
    NFCカードへの読み書きとかやりたい)
  • 横方向の移動を設定できる UITableView
  • バックグラウンドで使用できる機能の追加
  • Message アプリ用 Bot 開発
  • Siri の開発者が操作できる範囲の増加
  • Proactive Assistant の適用範囲強化
  • 端末内部での検索機能強化
  • Metal を使用したの行列計算や機械学習用ライブラリ
  • SQLite に変わる独自データベースの実装
    (FoundationDB を買収しているため)
  • 買収した Workflow アプリがシステムに統合され開発者側が単機能のアクションを制作できる
  • 時計アプリのアラーム設定情報取得
  • tvOS で iPad の様なスプリットビュー と ピクチャー・イン・ピクチャー
  • iOS 版の Instant Apps
  • iOS 版の Safari Technology Preview
  • Windows 10 Fall Creators Update のタイムライン機能

 

ハード面

 

サービス
  • 動画の定額配信
  • CloudKit を拡張した Apple 版 Firebase
  • CareKit、ResearchKit からの個人用医療カルテと医師や病院とのマッチング

 

  • AR 眼鏡
  • iOS 版 Logic Pro、Final Cut Pro
  • iOSXcode
  • Apple 謹製 3DCG 作成アプリ
  • macOSiOS アプリの起動
  • ARM 版 macOS
  • Apple TV のデスクトップ PC 化
  • Apple TV のサーバー 化
  • 高機能な Hearable 端末
  • Surface Pro 4 で使用されているタイプの顔認識
  • iPhone / iPad から Bluetooth ヘッドフォンなどのアクセサリーへの充電
  • iOS 実機でしか確かめられない機能があるので、macOSiOS Simulator でも操作しする様にしてほしい

 

P.S. やってほしいこと

個人的には Xcode の SceneKit の Scene Editor を Unity の Editor に近しいぐらいまでしてほしい。
Unity から作成される iOS アプリの最適化があまりよろしくないため、ネイティブでつくりたい。

あと、FBX ファイルを読み込めるようにしてほしい。
Blender からエクスポートされる Collada(.dae) の情報でシェイプキーなど Xcode で全て取得できないため。

Apple Watch の デジタルクラウンで寿司を回す

今回は Touch Bar のやつよりも簡単なので、
寿司を回す職人の方は試してみてはいかがでしょうか。

私、Apple Watch 持っていない貧民ですので Sumilator 上でしか試していません。
実機で動かなかった場合はごめんなさい。

ちなみに Sumilator 上でデジタルクラウンを試す場合はマウスのホイールか、トラックパッドで二本指スワイプをしましょう。

 

1. Xcode 8.3.2 でプロジェクトを作る

Extension からやるとスクリーショット撮るのが面倒なので
Cross-Platform の SpriteKit でプロジェクトを作ります。

f:id:x67x6fx74x6f:20170522183713p:plain

 

今回は「SushiWatch」というプロジェクト名にしました。

f:id:x67x6fx74x6f:20170522183724p:plain

 

2. SpriteKit の watchOS 用の Scene を修正する

SpriteKit の Scene に関する動作は GameScene.swift にあります。
58 〜 64 行目にテンプレートで watchOS の記述がありますが必要ないので消します。

f:id:x67x6fx74x6f:20170522183850p:plain

 

代わりに以下の命令を書きます。

label?.text = "🍣"
label?.fontSize = 500

f:id:x67x6fx74x6f:20170522183905p:plain

 

ビルドする項目を iPhone と watchOS シミュレーターにしてビルド。

f:id:x67x6fx74x6f:20170522184016p:plain

 

美味しそうな寿司が表示されます。

f:id:x67x6fx74x6f:20170522183920p:plain

 

3. SpriteKit の Scene へ寿司を回すメソッドを追加する

以下の1秒で r 分回る命令を適当なところに入れます。

func rotateText(_ r:Float){
    self.label?.run(
        SKAction.rotate(byAngle: CGFloat(r), duration: 1)
    )
}

 

試しに初期化のところに回転の関数を入れてみましょう

label?.text = "🍣"
label?.fontSize = 500
self.rotateText(1)

 

寿司がラジアンの 1 の値で回ります。
回転が確認できたら self.rotateText(1) は消しても大丈夫です。

f:id:x67x6fx74x6f:20170522185410p:plain

 

4. Extension 側にメソッドを追加する
  • デジタルクラウンのデリゲートを設定
  • watchOS の Extension に Scene を呼び出し
  • デジタルクラウンの初期化と操作を呼び出し
  • デジタルクラウンのデリゲートの内容を設定

f:id:x67x6fx74x6f:20170522184534p:plain

 

InterfaceController.swift を開き、デジタルクラウン使用するためのデリゲートを追加。

class InterfaceController: WKInterfaceController, WKCrownDelegate {
    ...
}

 

使い回せるように変数として Scene 呼び出し

private var scene:GameScene!

 

override func awake() 内に初期化を focus で操作の呼び出し

let sequencer = self.crownSequencer
sequencer.delegate = self
sequencer.focus()

 

以下のデジタルクラウンのデリゲート内容を設定。内容は scene で設定したメソッドを呼び出しているだけの簡単なものです。
あとはビルドするだけです。

func crownDidRotate(_ crownSequencer: WKCrownSequencer?, rotationalDelta: Double) {
    scene.rotateText(Float(rotationalDelta))
    print("DigitalCrowm - Delta:\(rotationalDelta) PerSecond:\(self.crownSequencer.rotationsPerSecond)")
}

func crownDidBecomeIdle(_: WKCrownSequencer?) {
    print("デジタルクラウンが止まりました")
}

crownDidBecomeIdle は止まった時に呼ばれます。 必要なければ消してください

 

InterfaceController.swift の全コード

import WatchKit
import Foundation

class InterfaceController: WKInterfaceController, WKCrownDelegate {

    @IBOutlet var skInterface: WKInterfaceSKScene!
    
    private var scene:GameScene!
    
    override func awake(withContext context: Any?) {
        super.awake(withContext: context)
        
        scene = GameScene.newGameScene()
        
        // Present the scene
        self.skInterface.presentScene(scene)
        
        // Use a preferredFramesPerSecond that will maintain consistent frame rate
        self.skInterface.preferredFramesPerSecond = 30
        
        let sequencer = self.crownSequencer
        sequencer.delegate = self
        sequencer.focus()
    }
    
    override func willActivate() {
        // This method is called when watch view controller is about to be visible to user
        super.willActivate()
    }
    
    override func didDeactivate() {
        // This method is called when watch view controller is no longer visible
        super.didDeactivate()
    }

    // Digital Crown Delegate
    func crownDidRotate(_ crownSequencer: WKCrownSequencer?, rotationalDelta: Double) {
        scene.rotateText(Float(rotationalDelta))
        print("DigitalCrowm - Delta:\(rotationalDelta) PerSecond:\(self.crownSequencer.rotationsPerSecond)")
    }
    
    func crownDidBecomeIdle(_: WKCrownSequencer?) {
        print("デジタルクラウンが止まりました")
    }
}

 

まとめ

基本的にはデリゲートの設定だけで、
デジタルクラウンを回して反応するコードが簡単にかけます。

皆様もいろいろなものをデジタルクラウンで回してみてはいかがでしようか。

デバイスはマテリアルにこだわり始める時代

バイスのデザインに関してはセンサーやバッテリーなどハードの問題もあり、
完成系となりつつあるため、デバイスやガジェットは素材にこだわる形でデザインの提供を行うのではないかと感じている。

 

自分の中で印象深かったのは au design project から吉岡徳仁氏のデザインで世に出た MEDIA SKIN
シリコン粒子を配合した塗料や一部色では特殊ウレタン粒子を含んだボティをでつくられ、細かな隆起が施してあり、
今まではプラスチックや金属であったものとは違う手触り感を与えた。
ちなみに世界で初めて有機ELディスプレイを採用を端末である。

他のフィーチャーフォンでは NTT DOCOMO から TOUCH WOOD という本体が木でできたものもある。
フィーチャーフォンの後半ではマテリアルにこだわったもがいくつかあった。

 

このような流れを踏襲するわかりやすい端末は NuAns NEO だろう。
ボディを上下のカバーを変更可能で、MEDIA SKIN や TOUCH WOOD のように
スエードやデニムや革などの服地使用されるものや
木、特殊素材なのでボディに質感をもたせている。
https://neo.nuans.jp/reloaded/

 

また、VR ヘッドセットは従来プラスチックのものがほとんどではあったが
Daydream View はファブリックを使用している。
https://vr.google.com/daydream/smartphonevr/

 

Apple Watchバンドもいくつかの素材を提供している。
Apple も肌に接する手触り部分はバリエージョンを必要としたようだ。

 

ハーローの実験では「愛着はミルクだけで生まれるのではなく、接触の快適さがなににもまして重要」という結論を得た。
ウェアラブルに近しい端末は今後マテリアルにこだわる方向性なのかもしれない。

iOS と App Extension、そこにつながるデバイス

iOS のアプリは、
基本的には異なるアプリとの同士では会話ができない隔離されたシステムで運用されている。

macOS では LION ぐらいの頃 XPC Service というものが出て、アプリ間での通信ができたわけだが、
iOS の XPC はプライベートフレームワークとなっており、
ストアに申請する事はできず使用できなかった。

 

そこで、歳月が経ち出現したのは App Extension。
文字どうりアプリの拡張機能である。

拡張機能は、アプリ本体とは別のプログラムファイルで、
開発したアプリと他のアプリをつなげるものだったり、
カスタムキーボードなどシステムに紐付いているものがある。

(ステッカーパック、いわゆるスタンプは Message アプリに紐付いており、本体アプリは必要ない。ずるい)

 

別のプログラムファイルという事でわかるかもしれないが、 本体のアプリとは別の環境で動き、実は互いには直接アクセスはできなく、OS が間に入る。

そして、OS はアプリと拡張機能のアプリが同じグループ内いる場合、他のアプリが入れない部屋をつくり、そこを通じてデータを操作できるようにする。

このことによって、アプリは拡張機能を通じて安全なデータの受け渡しができたりしている。

 

一応、2017年4月の時点で作ることのできる拡張機能
(時間があったら下の詳細を書くかも?)

f:id:x67x6fx74x6f:20170409032211p:plain

 

ここにはないが、WatchKit App(watchOS)と watchOS の Game 用の 拡張機能がある。

要するに、App ストアに並んでいる Apple Watch のアプリは拡張機能で実装されている。
同じアプリでデバイス間でデータアクセスするとなると、拡張機能で作成するのが現状もっとも適しているからだろう。

 

今後、もし新しいデバイスが増えるなら、噂されている AR 的のものやデバイスが実装されるのなら、
そこには App Extension が使用されるだろう。

 

あ、ちなみに、 Unity など Xcode のプロジェクトファイルを直接いじれない、
ほとんどのマルチプラットフォーム開発では
App Extension が簡単に開発ができなかったりする。

 

次期 iPhone の GPU

iPhoneImagination Technologies 社の PowerVR を使用していて、 ちょいと前に「PowerVR」の新世代GPUアーキテクチャ「Furian」を発表された。

プレリリース(英語) https://www.imgtec.com/news/press-release/imaginations-new-powervr-furian-gpu-architecture-will-deliver-captivating-and-engaging-visual-and-vision-experiences/

たぶん、iPhone も Furian な Series 8XT? を載せてくるだろうと思う。 AppleImagination Technologies の株主だし、 ARM チップ同様に自前でカスタマイズできる権利を持っているのでやりたい放題だ。

プレスリリースによると7シリーズと比べて以下の性能向上とのこと

  • FLOPS で 35 %
  • Fill rate で 80 %
  • ゲーム性能で 70 ~ 90 %

iPhone 6s が 384 GFLOPS で、 iPhone 7 は 50% 向上と言っていたので 576 GFLOPS ぐらい。 そこから 35% 向上となると 777 GFLOPS 近くなる。

多分、Nintendo Switch をドックに刺した時と同じぐらいになる可能性はある。

Fill rate が 80 % 向上という点から見ても AR とかをやり始めてもおかしくないかもね。

Windows 10 から macOS sierra に移行した時に覚えておきたいショートカット、機能

control が command となっており、
command + C でコピー、command + X で切り取り、command + V でペースト、
command + A で全選択、command + Z で取り消し、
command + S の保存、command + tab でアプリの切り替えなどはかわらないが、
Windows での操作では利かない動作があるのでご紹介。

 

ファイル選択して enter キーを押してもファイルが開かない。

Mac の場合、ファイルやフォルダのリネームになるので、
command + O を押す。

 

ファイル選択して delete キーを押してもゴミ箱に行かない。

command + delete キー
command + option + delete キーで削除となる。

 

ゴミ箱を空にしたい。

command + shift + delete キー

 

全体的に検索したい (Windows キー + F)

command + space キー

 

ファイルやフォルダの情報が見たい

command + i

複数選択してこのショートカットを使うと選択した数だけ開く。
1000個ぐらい開いてしまい固まったことがある。

 

まとめて内容を表示したい場合は複数選択して

command + option + i

 

スクリーンショット

command + shift + 3 で全体。

command + shift + 4 で任意の箇所。

command + shift + 4 を押した後にスペースキー
ウインドウを選択しクリックでスクリーンショットを撮る。

スペースキー後 option とクリックでウィンドウの影が消せる。

 

重なっているウインドを広げて確認したい

control + 上カーソルキー

クリックすると前面に出る。

 

ウインドウのスナップ

標準機能ではない。

アプリを利用する。

Magnet マグネット

Magnet マグネット

  • CrowdCafé
  • 仕事効率化
  • ¥120

 

Dock を選択、カーソルキーで移動させたい

control + F3 (環境によっては Fn キーも)

左右キーで移動、上で右クリックの表示、enter でアプリ起動。

 

ファイルやフォルダのパスを知りたい

選択後、command + Alt + C でコピーしテキストエディタなどにペーストする。

もしくはフォルダーの場合だが FinderPath を使うのも良い。

bahoom.com

上のアプリ、そのままだと使えないので、
システム環境設定のセキュリティとプライバシーをクリックし、
プライバシータブのアクセシビリティから許可のチェックを入れる。

 

パスを入力してそのフォルダに移動したい

Finder で command + shift + G を押し、入力して、移動ボタンを押す。
上記の FinderPath でも可能。

 

他の仮想デスクトップ移動したい

control + 左右キー

仮想デスクトップがない場合は動作しない。
control + 上キーをクリックして右の「+」ボタンを押して増やすべし。

ちなみに新規の仮想デスクトップや
使わなくなった仮想デスクトップの削除のショートカットはない。

 

クリップボードの内容が知りたい

テキストだけだが、Finder のメニューの「編集」のクリップボードを表示で確認できる。

 

キーボードで操作したい

デフォルトだと
ポインティングデバイスだけでしか操作できないものがある。 以下の操作で Tab キーでアラートのボタン等移動できるようになる。

「システム環境設定」アプリを起動し、 キーボードクリック。
「ショートカット」のタブの「キーボード」の項目をクリックし、
「Tabの操作操作対象を変更する」にチェック。
下にある「すべてのコントロール」を選択する。

 

キーボードシュートカットを変更したい。

上記のショートカットのタブである程度の機能は変えられる。
ただ、一部システムで使用できないキーがある。

 

アプリの強制終了

command + option + esc

リストが出るので応答しなくなったアプリを選択して終了させる。

 

Safari で Metal のような API が実装されるかも?

WebKit で WebGPU というローレベルの 3DCG 命令にアクセスするための API の草案が公開された。
機能的に足りない部分があるし、ブラウザで実装されるのは当分先になりそう。

現状、Apple が出したネタなので Metal に近く、
シェダーも Metal に近く Vulkan の SPIR-V や DirectX の DXIL のように事前コンパイルさせ中間言語になるらしい。
シェダーのファイルを人が読めるようなものにするかは検討中とのこと。

Metal を基にしているが、Metal に縛られる必要はないとのことで、
今後、改定していきたいとのこと。

 

参照元(英語)

Next-generation 3D Graphics on the Web | WebKit

WebGPU API

スポンサーリンク