35
Preparing Your App Submission for Apple Watch WatchKit 解解解解解解 Tips AppleWatch 解解 解 (@bird_tomita) FB:bird.tomita 04/24/2015

Watch kit解説と実際のtips

  • Upload
    -

  • View
    645

  • Download
    1

Embed Size (px)

Citation preview

Preparing Your App Submissionfor Apple WatchWatchKit 解説と実際の Tips

AppleWatch

富田 篤 (@bird_tomita) FB:bird.tomita04/24/2015

Optimizing Your WatchKit App

Environment

Update Xcode to the latest release

of Xcode 6

Xcode 6.3requires a Mac

running OS X 10.10

Design

デザインガイドにないTips

• ガイドラインには DynamicTypeを使えとあるけど、重要な情報は「太字」にしないと見づらい。StoryBoard で設定されている「 body 」とかじゃダメ。

• 必ず「 38mm 実サイズ」で印刷して確認する。

• 両サイズでレイアウト確認。IB の + ボタンで分けられる。

• WKInterfaceGroup を活用してレイアウトを作る。重ね合わせも。

Glance

• 一つのアプリに一つ。

• 全部で20個しか Apple Watch に設定できない。

• 必須ではないです。

• Today みたいな感覚で OK

Notification

• 一つのアプリに複数設定可能。

• Short / Long (static) / Long (Dynamic) があります。

• 通常の「通知」は(許可してあれば) Apple Watch に全て来ます。(上から下にスワイプで表示)

Development

Documents

• WatchKit Development Tipshttps://developer.apple.com/watchkit/tips/

• Apple Watch Programming Guidelineshttps://developer.apple.com/library/ios/documentation/General/Conceptual/WatchKitProgrammingGuide/index.html

General Guidance

• アニメーションはイメージのパラパラ漫画です。

• アニメーションのキャッシュには animated UIImage をWKInterfaceDevice のイメージキャッシュにおきましょう。シーケンスバラバラに置かないように。

• 設定画面は「 Setting Bundle 」として作ると、 Apple Watch アプリに表示されます。

• text input で選択肢を与えずに直接音声認識を起動することができます。

• interface controller の didDeactivate: メソッドで状態を保存して、次回復帰時に root controller の「 willActivat: 」メソッドでリストアしてね。

Performance• iPhone と Apple Watch 間の通信は最小に。

• 毎回がっつり全項目書き換えないで、変更の必要な箇所のみ書き換えてね。テーブルなら全部読み込み直すんじゃなくて、追加削除更新のみ。                                                                                                                                                                                                                                                                                               

• WKInterfaceController の willActivate: で dispatch_async を呼んで、遅延読み込みに対応してね。

• paginated Controller の初期化は1ページ目の willActivate: が呼ばれる前に。

• 使ってないオブジェクトはコントローラーに置かない。非表示でもロードはされる。

• テーブルの表示行数を少なくする。画面表示は行数に依存します。

Communicating with iPhone

• 通信やバックグラウンドタスクは iPhone 側の親アプリを WKInterfaceController の openParentApplication;reply: でiPhone アプリをバックグラウンド起動してデータを返してもらう。 App Groups の機能を使って iOS 側とデータを共有! Goo のリストはこれを使ってます。                                                                                                                                                                                                                                                                                              

• Handoff を使おう!これを使えば Glance から iPhone アプリへのディープリンクも設定できます。 Glance から WatchApp のメイン以外のコントローラーを呼ぶのにも使います。

• 決して親アプリを WatchApp から「起動」はできません。

• 共通処理は Framework 化しちゃいましょう。

画像関連

• 画像はキャッシュを有効活用しましょう。基本の流れキャッシュの存在確認-> 無ければ NSData からキャッシュ追加setImageNamed:  でキャッシュを使って表示

• キャッシュサイズは 5MB まで。

• 画像はリサイズしない・させない。                                                                                                                                                                                                                                                                                        

Notification

• シミュレーターではテストできません。表示のみ。

• シミュレーターでの notification からの遷移は RemoteNotificationとして処理されます。ローカル通知のみ実装の場合は実機テストでしか確認できません。

• 追加情報を置くなら UserInfo に

• カテゴリとアクションの設定は Programing Guid にあります。https://developer.apple.com/library/ios/documentation/General/Conceptual/WatchKitProgrammingGuide/BasicSupport.html#//apple_ref/doc/uid/TP40014969-CH18-SW1

Static TableIB で作って Identifier 設定して

- (void)setRowTypes:(NSArray *)rowTypes;

[_tableView setRowTypes:@[ @"menu_item_row", @"historyItemRow", @"PriceUpdateItemRow", @"NewItemRow" ]];

Life Cycle

Life Cycle (2)

Submit

Certificates, Identifiers & Profiles

• App ID に 以下を追加com.yourdomain.app_namecom.yourdomain.app_name.watchkitextensioncom.yourdomain.app_name.watchkitapp

• Extension と WatchApp のプロファイルも開発・配布両方作る。

• Extension 側にも「 AppGroup 」のチェックを。

• 多分 Xcode からでも設定可能。

iTunesConnect : Icon

• アイコンはアプリに使ってるのと同じに見えなければいけない。(イコールである必要はない)

• 1024x1024 72dpi RGBPNG(wo Alpha) or JPEG

• リサイズして丸くしてくれる。

• 背景が明るい場合は縁が追加される。

Screenshots• スクリーンショットは

312x390

• 5枚まで設定できます。順番にも気をつけて!

• シミュレーターの 42mm で画面を表示して command + S

• Apple Watch の「縁」はNG 。

• 今の所スクリーンショットのみ設定可能??

App Name and Description

• アプリ名と説明文は iPhone アプリと Watch で共有。 WatchApp を作った場合は、説明文またはアップデート内容にそのことを記載

• (いつものことですが)アプリ名に「 Apple Watch 」と入れるのは NG 。

• 「 Apple Watch 」の表記は正確に。

• 「 App Preview 」ビデオは iPhone アプリの宣伝用。

Version and Build Number

• iPhone App, WatchKit Extension, WatchKit App の バージョン番号とビルド番号は全て揃える。当然iTunesConnect もね。(誰かスクリプト作って)

• iPhone App Version 1.0.0 Build 23

• WatchKit Extension Version 1.0.0 Build 23

• WatchKit App Version 1.0.0 Build 23

Submit Tips

• 要「 64bit 対応」。アップデートでも弾かれます。

• iPhone App の Development Target は 8.2 以下 でも大丈夫。

• iPhone アプリを起動せずに Watch アプリを起動されるパターンにも備えましょう。

• iPhone 側プロジェクトの Images.xcasetts AppIcon テンプレートに Watch 用のものが追加されているので追加する。

Device Tips

• スクリーンショットデジタルクラウンとサイドボタンを同時に短く押す。 iPhoneのアルバムに入ります。なぜかアルファチャンネル付きなので、 iTunesConnect の提出に使う場合はアルファを外してからご使用ください。

• フロントエンドのアプリの強制終了サイドボタン長押しー>終了メニュー表示ー>もう一度長押し

• 直近のアプリと時計の切り替えデジタルクラウンを2回押す

Xcode 6.2 -> 6.3

• Xcode 6.2 では NotificationContorller の背景を設定しても反映されないバグがあります。

• ForcuTouch は Xcode 6.3 より対応。でも 6.2 でもメニュー出せれたけど。。。

• Xcode 6.2 / iOS 8.2 ではバックグラウンドでの位置情報更新にバグがあります。対応するには Xcode 6.3 で iOS 8.3 を WatchKitExtension の Target にする必要があります。

• 逆に Xcode6.3 では backgroundFetch のテストができないバグがあります。

Reject!• iPhone App と

WatchKiteExtension の 「 Bundle name 」をiTunes で表示されるアプリ名と同じにしないとリジェクトされることがあるらしい。 iPhone の「 Apple Watch 」アプリ( companion app )に表示されるアプリ名が上記を参照。

Reject!

• awakeWithContext: でビューの初期化 willActivate: で更新。(ドキュメントを確認しないでグランスを作ったら、シミュレーターでは1回しか起動できないけど実機では切り替えのタイミングがあるのでデータが更新されずリジェクトされました。。。)

Reject!

• openParentApplication: reply: で iPhone 側に処理をさせる場合はロックの可能性を考えてバックグラウンドタスクで実行しましょう。

TestFlight!!Apple Watch 対応アプリはTestFlight が使えません…

来週以降は??

EnvironmentYosemite + Xcode 6.2(over) 最新で

Design小さい画面、見やすく簡潔に

DevelopmentAppGroup,handoff 共通処理は Framework に

Submit要 64bit 対応。 Apple Watch アプリでの表示に注意。実機での確認は絶対必要。

Let’s Enjoy Development