ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
Swift Playgroundsで最初のAppを構築する
Swift Playgroundsを使用して、プロトタイプの作成やAppの構築を簡単に行う方法をご覧ください。空のプロジェクトからAppを作成したり、SwiftUIでインターフェイスを構築したり、Swift Package Managerを使用してオープンソースパッケージから機能を追加したりする方法を紹介します。また、プレビューやコンソールを使用して問題をデバッグする方法や、AppをApp Store Connectに送信してTestFlight経由で配信を行う方法も紹介します。
リソース
関連ビデオ
WWDC22
-
ダウンロード
ようこそ「Swift Playgroundsで 最初のAppを構築する」へ Swift Playgroundsチームの Collett Charltonです Connor Wakamoです Swift Playgroundsチームの エンジニアです Swift Playgroundsは Swiftのコード学習ツールで この度 Appを 作れるようにもなりました 今日はSwift Playgroundsで Appを作成する過程を 1からお見せします そしてプレビューと コンソールでデバッグし TestFlightに Appを提出します
私たちのチームは お茶が大好きです ですのでお茶のAppを 作ってみたいと思います Connorと共に お茶の時間にお茶のリストで お茶を選んでくれるAppを 作成したいと思います Swift Playgroundsは MacとiPadに最適です 今日はMacがあるので MacでAppを 作成したいと思います
コーディングが初めてでも 経験あるデベロッパでも Swift Playgroundsには 数々のテンプレートや 学習資料があります このAppの作成は スクリーン左下の 空白テンプレートから 始めます
テンプレートがでてきました ダブルクリックで開きます
右側にライブのインタラクティブな プレビューがあります
まず最初にApp Settingsで 少しカスタマイズしましょう サイドバーの左上の App Settingsボタンで Settingsを開きます
ここでApp名や アクセントカラーなど カスタマイズできます またカスタムアイコンまたは プレイスホルダーアイコンや 機能やBundleIDも 設定できます 名前は「Tea Time」にします
アクセントカラーは茶色に
プレースホルダーアイコンに マグを選びます
重要な部分は済みましたので テンプレートテキスト選び ライブラリからビューを置き換え コーディングを始めましょう ライブラリはプロジェクト ツールバーの+でアクセスできます ここには簡単に使える ビューや修飾子 SF Symbolsやカラーなどの スニペットがあります リストビューで お茶のリストを作るため リストを検索しクリックして 挿入します
それではリストビューに お茶を足しましょう
Textとタイプし returnキーで インラインコードの コンプリーションパネルの コード補完を完了させます
リストビューに お茶を1つ足しました さらに足しましょう
あら Jasmine Greenを 2度入力してしまいました 重複を避けるため orderedSetを使うべきです 幸運にもSwiftコレクション パッケージにその機能があります Swiftコレクションパッケージを 追加しましょう
「File」メニューから 「Add Package」を選びます
Swiftコレクションパッケージ のURLをタイプし returnキーを押します
パッケージが呼び込まれ そのバージョンと 追加できるプロダクトが 表示されます ここでは「Collections」を選び 「Add to Project」をクリック
サイドバーのPackagesに 追加されました OrderedSetを作り お茶のリストを格納します
あら 問題があるようです 「Issue」アイコンで問題を見ます
「Cannot find type ordered set in scope.」 なるほど わかりました Collectionsモジュールを 忘れていました 取り込めば問題は なくなるはずです
問題が解決しました リストビューを更新し Collectionを使います これには ForEachビューを使います
さあ できました お茶のコレクションから お茶のリストが表示されます プロジェクトを進めるにつれ さらに機能のアイデアが 出てきました お湯が沸いた音を Appが聞いて 教えてくれたら便利ですね 今は追加しませんが なぜマイクの使用が必要か ユーザーに説明する手順を お見せしましょう
これを追加するには App Settingsに戻り 「Capabilities」を選びます
右上の+ボタンで リストから 必要なものを選びます 「Microphone」を選び クリックして追加します Purpose stringに書きます 「Tea Timeは湯沸かしの― 音を聞くために マイクを使用します」 「Add」をクリックし App Settingsを閉じます
今日はたくさん達成しました プロジェクトとアイデアを Connorと共有しましょう
共有「iCloud」フォルダーに 足して共有できますが その前に「My App」以外の 名前をつけましょう
そして共有「iCloud」 フォルダーにドラッグします
この後はConnorが Appを完成させます ありがとう Collett ここからはiPadで作業します iCloud共有フォルダーで 共有しているので メインリストには 表示されません ですが「Locations」を タップすれば iCloudや第三者サービスの どこにもアクセスできます 共有フォルダーをすでに 開いているので 「Tea Time」をタップし プロジェクトを開きます 変更を加えれば自動的に 共有プロジェクトに反映されます Collettは素晴らしい エンジニアで iCloudへのアップロードで 機能が追加されました TabViewの実装で お茶のリストだけでなく アシスタントもあります アシスタントをタップすると 今は簡素ですが 役目は果たします お勧めを尋ねれば 答えが返ってきます
今日はJasmine Greenが お勧めのようです Collettはさらに新しい 楽しいお茶の選び方を 考えていました サイドバーで見つけましょう
TeaWheelViewかもしれません タップして開けましょう
ビューにデータが収集されます ビュープレビューを足して Appの機能になる前に TeaWheelViewを 試してみましょう 一番下にスクロールし
「Preview Provider」と タイプします
コード補完を returnキーで選び TeaWheelView_Previewsと 名付けます
App Previewの下に ドットが現れました Swift Playgroundsが プレビュー感知したということです App Previewの下の 右矢印をタップすると Appプレビューではなく ビュープレビューを使用できます 今は「Hello, world!」 だけですが TeaWheelViewを作るため コードを足しましょう まずプレビューで使えるよう 静的プロパティとして 配列をいくつか足します
角括弧の間に挿入位置を置き 括弧閉じをドラッグして プレースホルダを作ります
次にプレースホルダを 文字列と置き換えます
それではTeaWheelViewに 足しましょう Hello, world!を選び TeaWheelViewと 置き換えます
パディングも足します
ビュープレビューに ルーレットが現れました 素敵ですね スピンさせると 違うアイテムを選びます アシスタントタブに戻り これを足しましょう サイドバーでAssistantTab Swiftファイルを開き Buttonを TeaWheelViewと入れ替えます
回転が止まった時に 呼び出される action closureが オプションにあります
最後に選んだお茶を 選ばれたお茶にセットし showPickAlertをtrueにして SwiftUIにアラートさせます
これで準備できました 試してみましょう スピンするとByte's Oolong を勧めてきました もう一度スピンします
またByte's Oolongですね もう一度
何か変ですね 違う箇所で止まっても Byte's Oolongを 勧めてきます いいお茶ですが もう少し種類が欲しいですね Wheel Viewで 原因を探りましょう
ルーレット自体は 作動してるので 原因は明らかではありません ビュープレビューに Printを足し プレビューも変か確かめます
回転させると
ソースエディタの左下に コンソールメッセージが出ました アイテム1 アイテム1... アイテム1 どのスピンも アイテム1が返ってきました 設定がおかしいようです 毎回 1番目のアイテムなので プロジェクト全体の検索で firstを探します スクリーン左側の サイドバーの上にある 検索バーをタップし firstとタイプし returnキーを押します
可能性がある結果なので タップします
どうやらCollettが デバッグコードを置き忘れ 毎回 1つ目のアイテムに 戻っていたようです では これを正しましょう
アイテム2 アイテム4 直ったようですね プレビューの下の 左矢印をタップして Appプレビューに戻り 実際のAppで試してみます スピンすると English Breakfastです アシスタントが 正常に動いています では どのサイズでもAppが 作動するのを確認するため 左上の実行ボタンで 独自のウインドウで 作動させてみます
問題ないようですね お茶のリストも アシスタントもあり ルーレットもあります Swift Playgroundsの プロジェクトに戻るため ステータスバーにある Swiftアイコンをタップし 「Show Project」ボタンを 選択します
友人や家族とこのAppを テストする準備ができました Swift Playgroundsから 直接TestFlightに提出し 簡単にテストできます App Settingsシートを開き 一番下にスクロールすると 「Upload to App Store Connect」ボタンがあります タップすると自動的に Appレコードの作成や App Store Connectへの アップロードが行われ TestFlightそして後に App Storeから配信されます
アップロードが完了し App Store Connectで ベータ版App Reviewに 提出できます しばらく待った後 TestFlight Appで インストールできます iPhoneでもです!
InstallでTea Timeを インストールします
それが終わると Openで開きます Test Noteをタップし フィードバックの提出の仕方も タップします
これでiPhone上で Appが開きました 今日はどのお茶が いいでしょう?
Matt P's Tea Partyですね 本日はSwift Playgroundsを使って MacとiPadでの Appの作り方をご紹介しました ライブラリとコード補完を使った コード入力方をお見せし iCloud共有フォルダで プロジェクトを共有し ビュープレビューとコンソールで デバッグしました そしてiPadから TestFlightに提出しました お役に立てたことを願い Swift Playgroundsの ご活用を期待しています ありがとうございました WWDCをお楽しみください
-
-
3:31 - First Tea Item
Text("Jasmine Green")
-
3:39 - List Of Teas
Text("Jasmine Green") Text("English Breakfast") Text("Byte's Oolong") Text("Golden Tippy Assam") Text("Matt P's Tea Party") Text("Darjeeling") Text("Genmaicha") Text("Jasmine Green") Text("Vanilla Rooibos")
-
4:45 - OrderedSet of Teas
let teas: OrderedSet<String> = ["Byte's Oolong", "Golden Tippy Assam", "English Breakfast", "Matt P's Tea Party", "Darjeeling", "Genmaicha", "Jasmine Green", "Vanilla Rooibos"]
-
5:28 - ForEach View
ForEach(teas, id: \.self) { tea in Text(tea) }
-
8:45 - Initial Preview Provider
struct TeaWheelView_Previews: PreviewProvider { static let items: [String] = ["Item 1", "Item 2", "Item 3", "Item 4", "Item 5"] static var previews: some View { Text("Hello, world!") } }
-
9:22 - Preview Provider with TeaWheelView
struct TeaWheelView_Previews: PreviewProvider { static let items: [String] = ["Item 1", "Item 2", "Item 3", "Item 4", "Item 5"] static var previews: some View { TeaWheelView(items, id: \.self) .padding() } }
-
10:40 - TeaWheelView in Assistant Tab
TeaWheelView(dataSource.teas, action: { tea in lastPickedTea = tea showPickAlert = true })
-
11:55 - Preview Provider with Print Statement
struct TeaWheelView_Previews: PreviewProvider { static let items: [String] = ["Item 1", "Item 2", "Item 3", "Item 4", "Item 5"] static var previews: some View { TeaWheelView(items, id: \.self) { print($0) } .padding() } }
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。