Help us understand the problem. What is going on with this article?

1分でつくれるAppleWatch対応アプリ & WatchKit 全API解説

More than 5 years have passed since last update.

Apple Watch の SDK である『WatchKit』がリリースされてたので、さっそくさわってみました。

watchkit_.jpg

※本記事は、Appleによる公開ドキュメント(ログイン不要領域にあるもの)の範囲で書いてあります。

サンプル実行方法

何はともあれまずはサンプル実行。

iPhone6 シミュレータとかの並びに Apple Watch とかが来るのかなと思ってたので、一瞬サンプルをどう実行してよいのか面食らいましたが、シミュレータメニューから

[Hardware] > [External Displays]
 > [Apple Watch - 38mm] または [Apple Watch - 42mm] を選択

で、Apple Watch サイズの外部ディスプレイシミュレータが起動するので、この状態で WatchKit Extension をアクティベートすると、外部ディスプレイの方にUIが表示されるようになります。

実装手順

テキストを表示するだけの超シンプルアプリを実装してみます。所要時間約1分、プログラミング不要。

1. Extensionターゲット作成

プロジェクトをつくって、

[File] > [New] > [Target]

から、Apple Watch を選択(テンプレートは Watch App のみ)します。

2. UIをいじる

Interface.storyboard が生成されるので、Interface Controller Scene にとりあえずラベル(WKInterfaceLabel)でも置いてみます。

3. ビルドしてみる

サンプル実行方法と同じように、実行すると、置いたラベルが表示されます。(スクショ載せられないのがもどかしい)

全API解説

WatchKit Framework Reference を見てみるとクラスの数はなんとたったの15個。自分はもっと一大SDKが来ると思い「iOS8-Sampler」の流れで「WatchKit-Sampler」つくるつもりでいたので拍子抜けですが、せっかくなので全クラスをひと通り見てみます。

WKInterfaceObject とそのサブクラス

WKInterfaceObject というクラスが全インターフェース系クラスのベースとなっています。(ざっくりいうと UIKit でいうところの UIView みたいなものかと)

以下、そのサブクラスである UIコンポーネント系クラス全11種です。

  • WKInterfaceButton : ボタン
  • WKInterfaceDate : 日付 or 時間表示用ラベル
  • WKInterfaceGroup : 他のインターフェースオブジェクトのコンテナとなるクラス
  • WKInterfaceImage : 画像表示。アニメーションAPIも用意されている。
  • WKInterfaceLabel : ラベル
  • WKInterfaceMap : マップ
  • WKInterfaceSeparator: セパレータ
  • WKInterfaceSlider : スライダー
  • WKInterfaceSwitch : スイッチ
  • WKInterfaceTable : テーブル
  • WKInterfaceTimer : カウントダウンタイマー表示用ラベル

それぞれ何ができるかは、上記の一言解説でだいたい想像つくと思いますが、ヘッダみると UIKit や MapKit の同じ位置づけのクラスとできることは結構違います(よりシンプル)。

WKInterfaceController

インターフェースのコントローラクラス、ざっくり言ってしまえば UIKit でいう UIViewController みたいな位置づけのクラス。

WKUserNotificationInterfaceController

WKInterfaceController のサブクラスで、追加されている API は以下の3つだけ。

- (instancetype)init;
- (void)didReceiveRemoteNotification:(NSDictionary *)remoteNotification withCompletion:(void(^)(WKUserNotificationInterfaceType interface)) completionHandler;
- (void)didReceiveLocalNotification:(UILocalNotification *)localNotification withCompletion:(void(^)(WKUserNotificationInterfaceType interface)) completionHandler;

リモート通知、ローカル通知を受け取ったときに呼ばれるメソッドが用意されているようです。

WKInterfaceDevice

ウォッチ側のデバイス情報を管理するクラス。APIを見ると、

+ (WKInterfaceDevice *)currentDevice;

- (void)addCachedImage:(UIImage *)image name:(NSString *)name;
- (void)addCachedImageWithData:(NSData *)imageData name:(NSString *)name;
- (void)removeCachedImageWithName:(NSString *)name;
- (void)removeAllCachedImages;

@property(nonatomic,readonly) CGRect    screenBounds;
@property(nonatomic,readonly) CGFloat   screenScale;
@property(nonatomic,readonly,strong) NSLocale *currentLocale;
@property(nonatomic,readonly,copy)  NSString *preferredContentSizeCategory;

キャッシュする画像をここから管理できたり、スクリーンサイズやスケール、言語設定の情報等を取得できるようです。

おわりに

ウォッチ側のセンサー値を取るAPIすらなく、実処理はiOSアプリ側に持たせて Watch側はシンプルに表示するだけっていう何ともシンプルなフレームワーク。。これでどんな新しい体験が生み出せるのか正直まだイメージできてませんが、WatchKit のお仕事お待ちしております!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした