extension DC 3日目、初日登壇、残り2日は聴講者として全日参加することができた。三日間参加したくさん知見を得て、話せて充実した時間となり運営の方々には心から感謝。また、昨日お話しし損ねた Foundation Models の発表をされた Fujimon さんとも、ほぼ時間いっぱい独り占めさせていただき、昨日のプレゼン内容であったりプロンプトの工夫など色々と意見いただけた。
イベントページ:https://lycorptech-jp.connpass.com/event/362636/
マルチウィンドウ実践ガイド
tatsubee さん
- フルスクリーン or ウィンドウ分割が選択可能
- 柔軟なサイズ変更、複数開くことが可能、枚数上限が増えた
- 前2つはすべてのアプリが対応するべき
- 複数枚ウィンドウは、アプリにとっての強みポイント
- 考慮したい点
- ウィンドウコントロール
Toolbar領域の先端に表示(信号機)- コンテンツ領域と重ならないように。toolbar 使えばOK
- 使わない場合は手動調整が必要
GeometryReaderで取得containerCornerInsets- Safe Area の考慮も必要
- アニメーション追加するとさらにいい感じに
- UIKit の場合
layoutGuide
- ウィンドウコントロール
ウィンドウサイズ- 新しい Window を開く
OpenWindowAction- Drag & Drop
userActivity,handlesExternalEvents
- 無数の Window が開ける
- 何がどの Window か特定しやすくする必要がある:Window に名前をつける
navigationTitleが反映
実装で解き明かす並行処理の歴史:Swift ConcurrencyからNSThreadまで遡ろう
laprasDrum さん
- Swift Concurrency
- 低レベル競合まで含めたメモリ安全性をねらい
- 並行かもしれないではなく、逐次実行を明示することでデータ競合のないことを証明するアプローチ
TaskGroup、エラーはthrowで伝播、明示的ロック不要- このシナリオを以前はどう書いていた?歴史を遡る
- Grand Central Dispatch
- マルチコア CPU の浸透を背景に登場(1コア1スレッド野性能限界)
DispatchQueue/DispatchGroup/ エラーキャプチャ変数の定義- ロックやエラー処理の意識が必要
NSOperation/OperationNSThread/ThreadPthreads: C言語のAPI- 振り返ると Swift Concurrency の記述は非常にシンプル
AppleのContainerization Frameworkから学ぶコンテナ技術の仕組みとその裏側
inductor さん
- Swift ではないコンテナ技術 e.g. Docker
- なぜ Apple がこの技術を世に出したのか
- (ナントカ framework はいっぱいあるが、手続きを経て名前がオープンソースとして世に公開されたのはこれが初めて)
- Container プロジェクト
- apple/container
- Container CLI : 開発者が叩く
- API Server : サーバー環境
- Runtime & Linux Helper : Linux と Mac 環境を繋ぐ
- インストール簡単、とりあえず nginx 動かすのも簡単
- Linux 環境用意しなくても動かせる
- デモ:Web servier 動かしたり、コマンドで負荷かけたり
- Virtual Machine Service とは?
- ある仮想マシンが膨大なリソースを使ってしまうと困る:制限が必要だが、再起動が必要だったり面倒
- Contener によって提供されたコンテナは独立してVMが立ち上がる
- コンテナごとに別々にリソースを割り当てられて便利
- apple/contenerization
- コンテナの作成削除などライフサイクル管理、Virtualization framework のラッパー
- VM では不要だがコンテナに必要なインターフェイスの実装
- macOS独自の機能
launchd: プロセス管理の仕組み- macOS のサービス管理機構: スタートアップapp、長時間起動するデーモンプロセス、定時実行
- XPC: プロセス間通信のプロトコル
- あるプロセスから別のプロセスに処理を依頼、情報を受けわたし
- XPCクライアント/サーバー
- e.g. APIサーバー → Linux helper
- Virtualization framework: VMインターフェイス
- 仮想マシンの設定 CPUいくつとか
- 仮想マシンの作成、削除、ライフサイクル管理
- コンテナ用VMで必要な要素
- gRPCサーバー(REST/GraphQLと並ぶAPI規約)
- Next Step: CLI触ろう、Containerizaion APIを眺めて活用方法を知ろう
overlayPreferenceValue で実現するピュア SwiftUI な AdMob ネイティブ広告
たいやき さん
- AdMob は SwiftUI に非対応
UIViewRepresentableが案内されている
- ライブラリ作った
- SwiftUI は子 View インスタンスにアクセスできない
- UIKit はインスタンスにアクセスできるが、、
- 広告 UIView を SwiftUI にかさねる→
ovrlayPreferenceValue.overlay+onPrefernceChange的なAPIPreferenceKeyの仕組みで、子ビューのサイズや座標を親で読み取る