iOS開発者のWWDC2018日記
公開: 2022-03-10米国の夏の伝統的な境界はメモリアルとレイバーデーですが、iOS開発者はWWDCとiPhoneのリリースで夏をマークします。 今週のニューヨークの天気は涼しくて雨が降っていますが、私は夏の気分で、その夏とWWDCが約束する更新を楽しみにしています。
6月4日の朝です。WWDC2017のメモを確認しています。昨年、ARKitとCoreMLが2つの大きなハイライトであると書きました。 Appleが機械学習(ML)に焦点を当てているのを見るのは新鮮でしたが、2017年の残りの期間はあまりフォローアップされませんでした。 。 Appleは、Core MLの発表後、CoreMLダウンロード可能モデルの初期ライブラリに追加しませんでした。
AppleはTuriCreateをリリースし、Lobeは先月新しい興味深いCoreMLモデルメーカーをリリースしました。 Apple / MLの分野では、Swiftの作成者であるChris Lattnerが、Swift forTensorFlowで別のアプローチを取っています。 しかし、外部から見ると、Core MLには、画像分類という1つの明らかな用途があるようです。 大きく異なるアプリケーションを探索することについては、それほどエネルギーがないようです(MLが自動運転車やGoogle Duplexのような気まぐれなデモの中核であることは誰もが知っていますが)。
AppleがMLを使用するもう1つの方法は、Siriです。今年の初めに、私はSiriKitについて書き、AlexaやGoogleと比較した場合のSiriKitの認識された実際の欠陥について言及しました。 私が調査した問題の1つは、Siriが事前定義されたインテントに重点を置いているため、その範囲が制限されているものの、制限されたフォーカスから得られる可能性のある約束された精度が得られていないことです。
昨年のHomePodの導入は、Siriの問題を浮き彫りにしただけであり、広く報告されている顧客満足度調査では、iPhone Xに対する満足度は98%でしたが、Siriに対する満足度はわずか20%でした。
これらすべてを念頭に置いて、私は個人的に、AppleがAR、ML、およびSiriでいくつかの主要な改善を行う予定であると聞きたいと思っていました。 具体的には、iOS開発者として、画像の分類だけでなく、モデルの作成に役立つ、より多くのCoreMLモデルを見たいと思っていました。 Siriの場合、私はもっと多くのインテントと、おそらくインテントが一年中追加されるものになるといういくつかの兆候を見たかったのです。 ロングショットでしたが、ARの場合、次のステップはデバイスです。 しかし、その間、私は空間精度の向上を望んでいました。
最後に、私はXcodePlaygroundsとiPadPlaygroundの本が大好きですが、それらはもっと速くて安定している必要があるので、そこでも何かを望んでいました。
WWDCの朝、私はこれをツイートしました。
これは予測ではありませんでした。 これは私が2017年に使いたかったもののリストにすぎませんが、それらは私が始めるには力不足または難しすぎることがわかり、Appleがいくつかの改善を行うことを望んでいました。
その日の私の計画は、基調講演をライブで見てから、プラットフォームの一般教書演説を見ることです。 それらは、その週の残りの期間に何に集中すべきかについての良い概要を提供します。
1日目の終わり:基調講演とプラットフォーム一般教書演説
WWDCの初日は、一般消費を目的とした基調講演と、イベント全体の概要である一般教書演説であり、開発者が参加するセッションを選択できるように詳細が示されています。
注目すべき、iOS以外の開発者向けアナウンスの要約
WWDCは完全にiOS開発に関するものではないので、他のプラットフォームで起こった、または開発者にあまり焦点を当てていない他の事柄の簡単なリストを以下に示します。
- 邪魔にならないように、ハードウェアの発表はまったくありませんでした。 MacProではプレビューもアップデートもありません。 秋にはiPhoneとそれに続くイベントを待つ必要があります。
- iOS 12には、ワークフローの買収の結果と思われる新しいショートカットアプリがあります。 これは、ドラッグアンドドロップで一連の手順を「スクリプト化」する方法です。 ショートカットをSiriキーワードに割り当てることもできます。これについては、以下で説明します。
- iOSは、同じアプリからの通知を自動的にグループ化し、グループとして操作できるようにします。
- Animojisは、舌を突き出すのを模倣できるようになりました。新しいMemojisは、高度に構成可能な人間の顔であり、自分のようにカスタマイズできます。
- FaceTimeは、最大32人のグループビデオチャットをサポートします。
- スマートフォンとアプリの使用状況に関するレポートを提供する新しいScreenTimeアプリがあります(自分自身を制御し、気を散らすのを防ぐのに役立ちます)。 これは、新しいペアレンタルコントロールの基礎でもあります。
- Apple TVに小さなアップデートがありました。ドルビーアトモスのサポートと、国際宇宙ステーションから取得した新しいスクリーンセーバーです。
- ウォッチは、トレーニング関連の課題に他の人に挑戦するための競争モードを取得しました。 また、ワークアウトの開始または停止を忘れた場合に備えて、ワークアウトの開始と終了を自動検出しようとします。現在、ハイキングとヨガのワークアウトがあります。
- ウォッチには、信頼できる連絡先に対して有効にできる新しいトランシーバーモードもあります。
- WatchにネイティブなオーディオSDKがさらにあり、Appleのポッドキャストアプリが利用可能になりました。 サードパーティのポッドキャストアプリもこれらの新しいSDKを利用することを期待しています。
- Macはイベントのアンカースポットを獲得しました(これは、新たな注目を集めることを願っています)。 これはmacOSMojaveと呼ばれ、ダークモードを備えています。
- Mac App Storeには大きなアップデートがありますが、特に、 iOS AppStoreが昨年受けたのと同じ視覚的およびコンテンツ処理が施されています。 パニックがトランジットをそこに戻すことを決定したサンドボックスには十分な変更があります。
- Finderのクイックルックには、ファイルに対して実行できるいくつかの簡単なアクション(画像の回転など)があり、Automatorを介してカスタマイズできます。
- Mojaveは、32ビットアプリとフレームワークをサポートするmacOSの最後のバージョンになります。つまり、Quick TimeFrameworkは廃止されます。 OS自体のいくつかのビデオキャプチャ機能に置き換えられたようです。
- Appleは、内部でUIKitのポートを使用してMacアプリを作成していることを発表し、Stocks、News、Home、VoiceMemosのポートを示しました。 新しいフレームワークは2019年にリリースされます。
私が最も興奮しているiOS開発者の発表
iOS開発者にもいくつかの良いニュースがありました。 彼らは私が改善を見たかった4つの主要な領域にぶつかりました:
- SiriKitにカスタムインテントが追加され、可能性が大幅に広がりました。
- Create MLは、Xcode Playgroundsを使用して、転移学習を介してモデルをトレーニングする新しい方法です。これにより、既存のモデルを独自のトレーニングデータで拡張できます。
- Xcodeプレイグラウンドでは、ページの下部にコードを追加して、再起動せずに実行できるようになりました。 9月に実際のリリースがリリースされるまで、Playgroundsがより安定するかどうかを知るのは難しいですが、これによりコードの試行がはるかに高速になります。
- ARKit 2は、AdobeとPixarで開発されたオープンなUSDZと呼ばれる新しい拡張現実ファイル形式とともに発表されました。 アドビはすでにいくつかのツールサポートを発表しました。 これにより、ユーザーと開発者はARアセットとエクスペリエンスを保存および共有できるようになります。 さらに、ARKit 2を使用すると、複数のデバイスを同じAR環境に配置でき、3Dオブジェクト検出をサポートします。
ARデバイスは入手できませんでしたが、まもなく入手できるように感じます。 また、ARKitの実行にはiOSデバイスが必要なため、Apple(サードパーティではない)から入手する必要があります。
マシンのセットアップ
必要なものはすべて、開発者ポータルで利用できるようになりました。 この記事のコードを使用するには、Xcode10ベータ版が必要です。 iOS 12ベータ版の使用はまだお勧めしませんが、本当に使用したい場合は、デバイスのポータルにアクセスして、iOS12ベータ版構成プロファイルをダウンロードしてください。
ベータ版のデバイスが必要な唯一の主要なものはARKit2です。それ以外はすべて、Xcode10のシミュレーターで十分に動作するはずです。 最初のベータ版の時点では、シミュレーターでのSiri Shortcutのサポートは制限されていますが、将来のリリースで修正されると考えるには十分です。
2日目の終わり:Siriカスタムインテントで遊ぶ
昨年、アプリでSiriKitを使用するために、Appleの事前定義されたインテントの1つにどのように適合する必要があるかを書きました。 このメカニズムは2016年に導入され、2017年、さらにはWWDCイベント間でも追加されました。 しかし、Amazonのカスタムインテントのアプローチは、音声制御をより多様なアプリに組み込むために優れていることは明らかであり、Appleは先週それをSiriKitに追加しました。
明確にするために、これは最初の実装であるため、まだAlexa Skillsほど広範囲ではありませんが、Siriの可能性をかなり広げます。 前回の記事で説明したように、カスタムインテントの主な制限は、開発者がすべての言語翻訳を行う必要があることです。 SiriKitは、ユーザーに使用したいフレーズを提供するように求めることでこれを少し回避しますが、カスタムインテントには、事前定義されたインテントよりも多くの翻訳が必要です。
そして、それらは事前定義されたインテントと同じ基盤に組み込まれているので、私がカバーしたすべてがまだ適用されます。 実際、元のSiriKit記事用に作成したアプリであるList-o-Matに新しいカスタムインテントを追加する方法を紹介します。
(無料)すでにSpotlightをサポートしている場合のSiriショートカットサポート
NSUserActivity
を使用して、ユーザーがハンドオフまたは検索を介して開始できるアプリ内のものを示す場合、Siriでもそれらを利用できるようにするのは簡単です。
必要なのは、アクティビティオブジェクトに次の行を追加することだけです。
activity.isEligibleForPrediction = true
これは、Spotlightが有効なアクティビティ( isEligibleForSearch
がtrue
)でのみ機能します。
現在、ユーザーがこのアクティビティを実行すると、Siriで使用するために寄付されたと見なされます。 Siriは、非常に一般的に行われるアクティビティを推奨するか、ユーザーがショートカットアプリでそれらを見つけることができます。 どちらの場合でも、ユーザーはそれを開始するために自分の話し言葉を割り当てることができます。 Spotlightを介してアクティビティを開始するためのサポートは、ショートカットを介して開始されることをサポートするのに十分です。
List-o-Matでは、アクティビティオブジェクトを作成し、それらをListViewController
に割り当てることで、SpotlightとSiriで個々のリストを利用できるようにすることができます。 ユーザーは自分のフレーズでSiri経由でそれらを開くことができます。
リストを開くための事前定義された意図があったため、この場合は冗長ですが、ほとんどのアプリはそれほど幸運ではなく、この単純なメカニズムを備えています。 そのため、アプリにSiriの事前定義されたインテントでサポートされていないアクティビティがある場合(ポッドキャストの再生など)、カスタムインテントについて心配することなく、予測の対象にすることができます。
カスタムインテントを使用するようにSiriKitを構成する
カスタムインテントを使用する必要がある場合は、SiriKitをアプリに追加する必要があります。これには、少し構成が必要です。
カスタムインテント用にSiriKitを構成するためのすべての手順は、事前定義されたインテントの場合と同じです。これについては、Smashingに関するSiriKitの記事で詳しく説明しています。 要約する:
- 拡張機能を追加するため、新しいアプリIDが必要であり、プロビジョニングプロファイルとアプリのエンタイトルメントのニーズにSiriが追加されています。
- おそらくアプリグループが必要です(これが拡張機能とアプリの通信方法です)。
- プロジェクトにはインテント拡張機能が必要です
- 更新する必要のあるSiri固有の.plistキーとプロジェクトの資格があります。
詳細はすべて私のSiriKitの記事に記載されているので、List-o-Matでカスタムインテントをサポートするために必要なものだけを取り上げます。
List-o-Matへのコピーリストコマンドの追加
カスタムインテントは、事前定義されたインテントがない場合にのみ使用されることを意図しており、Siriは実際にはそのリストとNotesSiriドメインで多くのリストとタスクのサポートを提供しています。
ただし、リストを使用する1つの方法は、繰り返されるルーチンまたはプロセスのテンプレートとして使用することです。 そのためには、既存のリストをコピーして、そのすべての項目のチェックを外します。 組み込みのリストインテントは、このアクションをサポートしていません。
まず、これを手動で行う方法を追加する必要があります。 List-o-Matでのこの新しい動作のデモを次に示します。
この動作をSiriで呼び出せるようにするために、「インテントを寄付」します。つまり、これを行うたびにiOSに通知します。 その後、最終的には、午前中にこのリストをコピーしてショートカットとして提供することを希望していることがわかります。 ユーザーは、寄付されたインテントを探して、手動でフレーズを割り当てることもできます。
カスタムインテントの作成
次のステップは、Xcodeでカスタムインテントを作成することです。 新しいファイルテンプレートがあるので、次のようになります。
- 「ファイル」→「新規ファイル」を選択し、「SiriKitインテント定義ファイル」を選択します。
- ファイルにListOMatCustomIntents.intentdefinitionという名前を付け、ファイルをAppターゲットとIntentExtensionターゲットの両方に配置することを選択します。 これにより、インテントプロトコルを実装しているが、カスタム動作が実装されている両方のターゲットにクラスが自動的に生成されます。
- 定義ファイルを開きます。
- 左下の[+]ボタンを使用してインテントを追加し、「CopyList」という名前を付けます。
- カテゴリを「作成」に設定し、意図を説明するためにタイトルとサブタイトルを入力します。
- 「list」という名前の文字列パラメータを追加します。
- listパラメータを使用してショートカットタイプを追加し、「Copylist」という名前のタイトルを付けます。
インテントplistを見ると、このインテントがすでに構成されていることがわかります。
インテントの寄付
Siriに知らせたいアプリでユーザーインタラクションを行うときは、それをSiriに寄付します。 Siriは、時間、曜日、さらには場所などのコンテキスト情報を追跡し、パターンに気付いた場合は、ユーザーにショートカットを提供します。
[コピー]メニューをタップしたら、次のコードを追加します。
@available(iOS 12, *) func donateCopyListInteraction(listName: String) { let copyListInteraction = CopyListIntent() copyListInteraction.list = listName copyListInteraction.suggestedInvocationPhrase = "Copy \(listName)" let interaction = INInteraction(intent: copyListInteraction, response: nil) interaction.donate { [weak self] (error) in self?.show(error: error) } }
これは、自動生成されたCopyListIntent
クラスのオブジェクトを作成し、それをSiriに提供するだけです。 通常、iOSはこの情報を収集し、適切な時間が表示されるのを待ちますが、開発の場合は、設定アプリを開き、[開発者]セクションに移動して、Siriショートカットのデバッグ設定をオンにすることができます。
注:この記事の執筆時点では、最初のベータ版では、このデバッグ設定はデバイスでのみ機能し、シミュレーターでは機能しません。 設定がそこにあるので、私はそれがさらなるベータで働き始めることを期待しています。
これを行うと、寄付されたショートカットがSpotlightのSiriサジェストに表示されます。
バックグラウンドでの実行を許可しているため、これをタップするとインテント拡張機能が呼び出されます。 次はそのサポートを追加します。
カスタムインテントの処理
すでにインテント拡張機能があり、カスタムインテント定義ファイルがすでにファイルに追加されているため、生成されたインテントクラスも含まれています。 ハンドラーを追加するだけです。
最初のステップは、 CopyListIntentHandler
という名前の新しいクラスを拡張機能に追加することです。 そのコードは次のとおりです。
import Intents @available(iOS 12, *) class CopyListIntentHandler: ListOMatIntentsHandler, CopyListIntentHandling { func handle(intent: CopyListIntent, completion: @escaping (CopyListIntentResponse) -> Void) { // Find the list var lists = loadLists() guard let listName = intent.list?.lowercased(), let listIndex = lists.index(where: { $0.name.lowercased() == listName}) else { completion(CopyListIntentResponse(code: .failure, userActivity: nil)) return } // Copy the list to the top, and respond with success copyList(from: &lists, atIndex: listIndex, toIndex: 0) save(lists: lists) let response = CopyListIntentResponse(code: .success, userActivity: nil) completion(response) } }
カスタムインテントには、確認と処理のフェーズのみがあります(パラメーターのカスタム解決はサポートされていません)。 デフォルトのconfirm()
は成功を返すので、 handle()
を実装するだけです。これは、リストを検索してコピーし、成功したかどうかをSiriに通知する必要があります。
また、次のコードを追加して、登録済みのインテントハンドラーからこのクラスにディスパッチする必要があります。
if #available(iOS 12, *) { if intent is CopyListIntent { return CopyListIntentHandler() } }
これで、実際にそのSiriの提案をタップすると、次のように表示されます。
また、[作成]ボタンをタップすると、リストがコピーされます。 インテント定義ファイルで選択したカテゴリのため、ボタンには「作成」と表示されます。
ふぅ、それはたくさんでした。 これらの新しいSiriショートカットは、iOS 12の主な機能であり、探索するための新しい大きな開発者の表面積があります。 また、たまたまSiriの良い(そして文書化された)例を使って作業したので、今週はそれに新しい機能を追加しようとするのが妥当でした。
更新されたList-o-MatはGitHubで確認できます。 Xcode10とiOS12がリリースされるまでは、独自のブランチにあります。
今後数日は、主にAppleのサンプルコードを見るか、はるかに小さなプロジェクトを作成する予定です。
3日目の終わり:Xcodeプレイグラウンド
前日はXcode10ベータ版で費やされましたが、一度クラッシュすることはなく、開発の準備ができているようでした。 だから今、私は新しいプレイグラウンド機能を探求したいと思いました。
私が遊び場に求めていた主なことは、遊び場をより安定させ、はるかに速くすることです。 それらを高速化するために、Appleは大きな機能であるREPLモードを追加しました。
Xcode 10より前は、自動実行がオンになっているPlayground(デフォルト)を使用していた場合、コードのすべての行が実際にファイル全体を再構築し、最初から実行していました。 何らかの状態を構築した場合、それは失われました。 しかし、本当の問題は、これが反復型開発には遅すぎるということでした。 Playgroundsを使用するときは、手動で実行するように設定しましたが、それでも低速です。
Xcode 10では、手動で実行するのが一般的ですが、実行した後、ページの下部に行を追加して実行を続行できます。 これは、データを探索し、ビューを繰り返し描画できることを意味します。常に再構築して最初からやり直す必要はありません。
開始するには、シングルビューテンプレートを使用してiOSプレイグラウンド([ファイル]→[新規]→[プレイグラウンド])を作成しました。
再生ボタン(左下隅の三角形)の下にあるメニューを下に移動して、手動実行をオンにします。 これにより、プレイヘッドの現在の位置(ブレークポイントのようなもの)を示す垂直ストリップが左側に配置されます。
任意の行をタップしてから、その左側にある再生ボタンをタップできます。 これにより、プレイグラウンドがこの時点まで実行されます。 次に、プレイグラウンドの下の線をタップしてさらに進むことができます。 重要なのは、下部にさらに行を追加し、各行の後にShift + Enterと入力して、再生ヘッドをそのポイントに移動できることです。
これは、Playgroundを再起動せずにビューのラベルを変更する私のGIFです。 入力する各行の後で、 Shift + Enterを押しています。
Playgroundsは現在、タイプのカスタムレンダリングもサポートしており、AppleはすべてのSwiftフレームワークにPlaygroundを含めてそれを文書化することを大いに推進しています。
4日目の終わり:MLを作成する
昨年、Appleはデバイスの機械学習のプログラミングに大きな飛躍を遂げました。 新しいMLモデルファイル形式があり、Xcodeで直接サポートされていました。
これらのモデルファイルの大規模なライブラリがあり、それらを作成するツールがあり、モデルの作成方法を知らなくても、より多くのアプリ開発者がMLをプロジェクトに組み込むことができる可能性があります。
これは完全には実現していません。 AppleはWWDCの後にモデルのリポジトリに追加しませんでした。サードパーティのリポジトリはありますが、ほとんどの場合、画像分類デモのバリエーションであるモデルがあります。 MLは画像分類以外にも多く使用されていますが、幅広い例は表示されませんでした。
そのため、実際のアプリでは、開発者が新しいモデルをトレーニングする必要があることが明らかになりました。 Appleはこの目的のためにTuriCreateをリリースしましたが、それは単純ではありません。
WWDC 2018で、AppleはCoreMLに対していくつかのことを行いました。
- 彼らはコアMLの自然言語処理(NLP)部分を拡張し、例の新しい主要なドメインを提供します。
- 彼らは、既存のモデルにトレーニングデータを追加できるようにするコアMLに学習を転送するという概念を追加しました。 これは、ライブラリからモデルを取得し、それらを独自のデータにカスタマイズできることを意味します(たとえば、提供する画像内の新しいオブジェクトをモデルに認識させることができます)。
- 彼らは、XcodePlaygrounds内に実装されたCreateMLをリリースしました。これにより、トレーニング用のデータをドラッグアンドドロップして、モデル拡張機能を生成できます(Transfer Learningを使用)。
これは、MLを民主化するためのもう1つの優れたステップです。 ここに書くコードはあまりありません。 画像分類子を拡張するには、画像を収集してラベルを付けるだけです。 それらを入手したら、CreateMLにドラッグするだけです。 このデモは、このCreate MLWWDCビデオで見ることができます。
週末:新しいARデモで遊ぶ
ARKitは昨年のもう1つの大きな追加であり、ARデバイスが登場することはさらに明確に思われます。
昨年の記事の私のARKitコードは、まだ始めるのに良い方法です。 新機能のほとんどは、ARをより正確かつ高速にすることに関するものです。
その後、ベータ版をインストールした場合は、新しいSwiftShotARKitデモアプリをダウンロードすることをお勧めします。 このアプリは、ARKitの新機能、特にマルチプレイヤー体験を利用しています。 同じネットワーク上で同じ場所にある2つ以上のデバイスは、相互に通信し、同じARエクスペリエンスを確認できます。
もちろん、これを再生するには、iOS12ベータ版に入れても構わないと思っている2つ以上のデバイスが必要です。 ベータセーフデバイスが1つしかないため、パブリックベータでこれが行われるのを待っています。
簡単に操作できるARアプリは、新しいMeasureアプリです。このアプリを使用すると、ARカメラビューに表示される実際のオブジェクトの長さを測定できます。 これを行うサードパーティのアプリがありますが、Appleは洗練されており、iOS12がプリインストールされています。
WWDCビデオとサンプルコードへのリンク
ですから、この夏、Xcode10とiOS12でさらに多くのことを行うのを楽しみにしています。その間、新しい電話と、夏の終わりにAppleがリリースする可能性のあるデバイスを待ちます。 それまでの間、iOS開発者は日光浴を楽しんだり、新しいベータ版のWatch OSでハイキングを追跡したり、機会があればこれらのWWDCビデオを視聴したりできます。
AppleデベロッパポータルからWWDC2018ビデオをストリーミングできます。 WWDCビデオを表示するためのこの非公式のMacアプリもあります。
この記事で参照されているビデオは次のとおりです。
- WWDC2018基調講演
- WWDC2018プラットフォーム一般教書演説
- Siriショートカットの紹介
- Xcodeでプレイグラウンドを最大限に活用する
- Create MLの紹介。さらに高度なものが必要な場合は、TuriCreateのガイド
Xcode10およびiOS12でのプレイを開始するには:
- ベータ版をダウンロードします(ベータ版プロファイルを取得するには、デバイスにアクセスしてください)
- List-o-MatとSiriショートカットのアップデート
- スイフトショット(マルチプレイヤーARKit 2ゲーム)