#love_swift WWDC21セッション情報を共有し合う「集まれSwift好き!Swift愛好会スピンオフ WWDC21セッション要約会 @オンライン」のまとめ
違いはよくわかりませんでした。
本日は集まれSwift好き!Swift愛好会スピンオフ WWDC21セッション要約会 @オンラインというイベントに参加してきたのでそのまとめの紹介になります。
オンラインセッションのため、文字じゃなくて実際に動画がみたい!というかたはこちらもどうぞ。
それではまとめていきます!
StoreKit2の実装方法を確認する
sugiyさん- StoreKit2をまとめると、async/await使って短く記述できるようになった
- アプリ内でサブスクリプションの管理と返金ができる
- 過去のトランザクションの履歴や購入済みの課金アイテムのステータスも取得できる
- StoreKit2ではProductとTransactionだけ登場人物を抑えればいい
- セキュアに通信してappstoreで署名されてレシート検証ができる
- 課金処理がすぐ終了しない場合、(親が承認しないと課金できない時など)反映されるまでに時差があるので、Transaction.listenerを使うと変更を監視して処理できる
- 課金アイテムの状況確認は購入履歴から確認できる
- subbscriptionのステータスはProduct.Subscription.Statusの配列から確認できる
- 既存のものより上位のものを確認して処理することもできる
忙しい人向けのWWDC21 keynote
Rokuさん- iOS15 FaceTime
- webからも参加できる
- SharePlayという音楽や動画を同期して見れる
- Message
- メッセージのシェアした内容を見れる
- Notification
- NotificationSummary
- do on the focus
- 通知時間をカスタマイズできる
- LiveText
- カメラを向けると文字認識できる
- 画像上で認識した文字を認識できる
- spotlight
- 検索できる内容が増えて写真も検索できる
- photo
- 写真を組み合わせて動画できる
- wallet
- ホテルのキーやカードキーになる
- weather
- デザイン刷新
- notificationの読み上げ
- find myがairpodsに対応
- spatial audioがm1macosに対応
- マルチタスキングメニュー追加
- タグ機能追加
- クイックノートきのう
- 翻訳も使える
- swift playgroundsでアプリ開発して、appstoreに提出ができる
- メールからセキュリティを確認
- どこからアクセスしてるかを見れる
- 死んだ場合の情報引き継ぎができる
- 健康診断の各パラメータをヘルスケアで見れる
- ヘルスケアで収集した情報を問診に役立てる
- マインドフルネス強化
- 呼吸記録
- ポートレートもじばん
- 写真が使いやすくなった
- watchから玄関前にいる人に反応できる
- shareplayなど搭載
- universal controlでmac, ipadで操作ができる
- airplayをmacでも表示
- ショートカット搭載
- safariタブのグルーピング追加
- iPhoneやiPadにweb extension追加
- ObjectCapture: 360度写真を撮ると3Dオブジェクトが作れる
- swift: async/await追加
- appstore:プロダクトページをパーソナライズ
- Xcode Cloudクラウド上でアプリをビルドしてテストして配布する
- MacAppをMacのTestflightで使える
Build interactive tutorials using DocCの要約
uhooiさん- appleが公式でwebで出してるtutorialでswift UIのtutorialがあって説明をしてくれる
- 場所によってはプレビューで出したりできる
- DocC(Documentation Compiler)というものを使うことでチュートリアルは簡単に作れる
- DocC Catalog → DocC → DocC Archive
- DocCを使うことでwebsiteを作ることができます
- appleのドキュメントみたいなのも、ソースコードのメソッドの上に///を書いてdocument書くだけで生成できる
iOS15で通知はより見られなくなる
mogmet iOS15からサマリ通知というプッシュ通知をまとめたものと、フォーカスというプッシュ通知が厳選される機能が追加され、今後どういった感じでプッシュ通知が届くようになるのかというまとめです。 私の発表内容は下記記事にも全部まとまってます.Meet Xcode Cloud etc. 要約と書簡
jollyjoesterさん- xcode cloudはCI/CDできるもの
- xcodeからでもAppStoreConnectからもworkflowを作れる。
- git pushや定期実行などのトリガーで実行させる
- 提供機能
- 環境変数、シークレット、カスタムスクリプト、private repository、webhookなど基本的な機能はあります
- 期待していることとして、基本抑えれば問題なく使えたり、CI環境がbetaなどに素早い対応したり、Appleの認証などが簡単にできてるといい
- お値段と安定性、workflowの管理の仕方が気になる
- その他:jsonでworkflow定義できる模様
Build dynamic iOS apps with the Create ML frameworkの要約
aboyさん何ができるようになったか
- Create ML(機械学習モデルの作成及びトレーニングができるフレームワーク)がios ipadで利用できるようになった。
- TabularData(機械学習のための表敬式のデータを簡単に扱えるフレームワーク)が使えるようになった
- csv, jsonからデータインポートして、DataFrameなど表形式データに操作ができる
何が嬉しいか
- ユーザデータをデバイスから離すことなく、モデルを作成・学習できるので、ユーザのプライバシーを保ちつつ、アプリの体験をユーザに沿ってカスタマイズできる
- モデルのデプロイを考えなくていい
- 表形式データを扱うAPIが増えて機械学習の幅が広がったのではと思われる
- 子供が書いた絵を元に画像フィルタを作ったり、料理注文アプリで過去の注文を元に料理をレコメンドしたりする
QA
- メモリは気をつけてくれとのこと。
Meet async/await in Swift
hironobuigaさん- 同期処理はスレッドをブロックするが、非同期処理は中断中の処理の間に他の処理を差し込むことができる
- 非同期処理の使い方として、completion handlerを使ってきたが、ネストが深く、エラーハンドリングが漏れてもコンパイラが検知してくれなかったり、値の返却を忘れたり、処理を追うのが難しい
- async awaitの使い方
- 内部で中断する処理が入る場合はasync、エラーナガルなら throwsを入れる
- 例外が発生する処理はtry awaitになり、値の返却に関してはawaitだけでかける
- 関数以外にも、getterで使えたり、for文、init、arrayのアクセスにも使える
- setterには使えません
- for awaitで並列に実行する方法もあります
- async/ awaitをSwiftUIで使う場合も中断する関数をasync{}でかこうとできる
- URLSession, MapKit, HealthKit, NSDocumentなどに既に導入済み
Continuation
- 中断してる処理を保持して再開を明示的に行える
- 中断した処理の再開は一度しか呼べない
- withCheckedContinuation: 呼び出しが一度だけかどうか、呼び出し忘れてないかを実行時にチェック
- 2度呼び出すとクラッシュする
- withUnsafeContinuation:呼び出しが一度だけかどうかを実行時にチェックしてくれない
- 極力使わないでね
- delegateメソッドもasync/awaitに置き換えられる
The practice of inclusive design
rocknameさん- Inclusive Designとは、高齢者や障害者のようなひとをデザインプロセスの上流から巻き込んで設計していくデザイン手法
Tell diverse strories
- 様々な背景を持つユーザを想定しないといけない
- appstoreのスクショで、食事メモアプリにアメリカの食文化が反映されているが、それだとひとつの文化にした人にしか伝えられないのでいろんな食文化をいれる
avoid stereotypes
- 人は男性と女性の2つのせいに分けられるといったように、he, sheではなくtheyをつかったり、Hey gues→Hey Everyoneを使ったり、アイコンにはジェンターに関するものをのっけない
- インターフェースによって昨日が制限されることも好ましくない
- 家族登録する際に、母父子供しか登録できないので片親、同性の親とかしか登録できないのはやめる。
- Family memberというものを設ける
- ユーザが追加できるようなものをおいておく
Adopt accessibility
- アクセシビリティは様々な人からソフトウェアをつかえるようにする
- dynamic typeに対応させたり、voice overで適切なコンテキストを設定してあげてたりする
Localize for cluture
- 翻訳する際に、異なる言語の長さ、文字体系にインターフェースを準備する。ローカライズは翻訳するだけじゃなく、インターフェースも変える。
- AtoZはアルファベット文化なのでfrom begining to endにかえたり。
Use color mindfully
- 赤は危険だが、アジアは幸福という意味合いになるかもしれない
- stockアプリで、中国のリージョンをかえると赤と緑がかわったりする
- 色による使い分けで未読と既読で色をかえたりするならアイコンでかえる。
Encourage self-expression
- 名前をfirstname lastnameで別れてたりすると、3つ名前必要だったりするかもしれないのでfull nameという一つのフォームを設けるといい
- ゲームでアバター作るなら、いろんな人種を用意するといい
protect mutable state in concurrent swift applications
sento_kunさんdata races
- data racesは同時に起きた読み書きによりデータが異なる状態を指し示す現象。同時にアクセスして一貫性が失われてしまう状態
- 共有された可変型の状態が必要とされる場合がある
- 共有された可変型の状態をうまく同期させたい時にactorsを使う
actors in Swift
- actorsは独自の状態を持っていて、その状態は他のプログラムから隔離されている
- actorsにアクセスするにはactorsを経由するしかない。他のコードが同時にactorsにアクセスしないことが保証されている
- classやstructみたいな感じでかける
1 2 3 |
<code>actor Count { var value = 0 ...</code> |
- インスタンスのデータをプログラムの他の部分から隔離すること
- はじめに始まったものが最初に処理されて、後から始まったものはあとで処理されないといけない
- 外部からやり取りするときは常に非同期
- actorがビジーだと他の処理にcpuは処理を回される
actor reentrancy
- プログラムなど、他の処理が入っても安全
- image関数の中で同時に呼ばれるようなimage downloadタスクを考えた場合、非同期に処理が発生した時にcacheでイメージを入れるところで違う値が入る可能性がある
- actorは動きを処理するものだが、設計の仕方によっては意図しない動きをするかも
protocol conformance
- protocolの要件を満たす限り、protocolの動きを保証する
- ==の場合idNumberはimuttableな値として使えるが、hashableに準拠する場合、非同期関数ではないのでactorの分離を維持する方法がない。actor内で維持する場合はasyncする必要がある
- これを回避するにはnonisolatedをつけると回避できる
Clousures
- 関数と同様にactorを分離することもあればしないこともある
- 貸出中の書籍の中から合計数をだすようなreduceの処理の場合、reduce処理が同期的におきて、他のクロージャにアクセスを逃すことがないから実施できる。
- asyncDetachedというクロージャの場合、外部処理になってしまう
actor isolation and data
- structかdataかで競合レースが発生する
- Bookというものをstructで表現するのと、classで表現するのでdata raceが発生する可能性がある
Sendable
- 異なるactor間どうしで値を共有できる。dataを受け渡しすることを準拠している。
- ある場所から別の場所にコピーして、両方の値が干渉なく更新できればsendableに準拠している
- 関数自体もsendableにもできる
main actor
- UIを行う処理はメインスレッドでやるが、計算量の多い処理などはメインスレッドから抜ける必要がある
- UIの状態が安全にアクセスするのがdispatch queeでできるが、@MainActorを使うとメインスレッドで関数が実行されることを保証する。使う場合はawaitが必要になります
Diagnose unreliable code with test repetitions
ushisantoasobuさん- 不安定なテストを治すためにテストの繰り返し実行機能が追加された
- 不安定なテストが生まれる原因は、競合状態、環境依存、グローバルステート、外部サービスとの連携などがある。不安定なテストを治すのが難しいのは再現が難しいというのがある。その解決法の手段の一つがテストを繰り返すこと
- テストの繰り返し実行機能には3つのモードが有る
- Fixed iterations:成功失敗問わず、指定した回数テストを実行する
- そのテストに不安定さがないのかに使う
- until failure:指定した回数分テストするが失敗したら終了。不安定なテストをデバッグする時に使う
- Retry on failure: 指定したか椅子テストするが、成功したら終了。はじめは失敗するが、いずれ成功するテストを特定するため
- testの作り方の流れ
- test失敗したらテストの繰り返し実行を一時的にONにしてCIで動かすとランダムで動かし、ローカルでも再現するかを試す。
- Fixed iterationsモードでためしたらローカルでもランダムでコケることを再現できるので、ランダムでコケる原因を特定するためにUntil failureモードで実行し、コケた時にデバッガが起動し特定して治す。
- 修正できたらFixed iterationsモードでまた試したら不安定さがおそらく消えたと言える
- 不安定なテストにぶち当たったら使ってみましょう
@mogmetの所感
iOS15はぱっとみとても大きなアップデートはないように見えますが、細かいところで着実により便利に進化していってるということを改めて再認識できました。また、Inclusive DesignにおいてはiOSに関わらず色んな所で使えるデザインの考え方なのでこういったことを意識してものづくりをしていきたいなと思いました。