SwiftUIでViewを構築するのは難しいです。
何も考えずに書くとクソデカViewになります。
複数のViewに分割する場合も、プロパティやメソッドに切り出すのがいいか、構造体を定義するのがいいか迷います。
Viewの命名も迷います。
Atomic Designに沿うのもいいですが、iOSと馴染めない気がします。
UIKitに近い命名はわかりやすいですが、SwiftUIではスマートでないと感じます。
「いきなりぐちってごめんなさい。ウーニャほんとはSwiftUIとなかよくしたいです…!」
このトークは、ウーニャ(私)とみんながSwiftUIのViewの分割と命名について一緒に考えます。
まずはウーニャがViewの分割や命名の考え方を話すので、それについてコメントを頂き、議論してよりいいViewの構築を考えます。
かなりふあんですが、だいじょうぶます。がんばるます。
WWDC21 が開催されていた昨年の6月、AVKit に追加されたひとつの機能に社内がざわつきました。
PiP(ピクチャ・イン・ピクチャ)の機能を応用して、Android の画面オーバーレイのようにアプリ外に自由なコンテンツを描画できる期待感を経験のあるエンジニアは感じていましたが、既存のアプリに機能を組み込むまでには R&D 的な開発やパフォーマンスとの戦いがありました。
このトークでは、ゲーム配信アプリミラティブに実装され多くのユーザーに利用されている、視聴者からのコメントや各種配信情報をアプリ外で表示する「配信コメントバー」機能の開発の裏側と技術の詳細、また更なる応用についてご紹介します。
・「配信コメントバー」機能の概要
・実装の解説
・R&D 開発の勘所
・パフォーマンスの解決
・PiP と AVAudioSession との関係
・PiP のカスタマイズ性
・更なる応用
我が家にはたくさんのIoTガジェットがあって、カーテンや玄関の鍵を開け閉めしたり、大活躍です。
しかしエンジニアという人種は、既存の機能では満足できず、カスタムして、色々作り込みたくなるものです!
そこで日頃お世話になっているSwift、我が家に余ってたラズパイ、そしてiPhoneの力を借りて、より便利で安全なスマートホームを目指した取り組みを共有します。
具体的には…
●ラズパイでのSwiftやServerSideSwiftフレームワークのセットアップ
●iPhoneのセンサー情報をServerSideSwiftのAPI経由でラズパイのDBに書き込む方法
●ラズパイと既存のIoTガジェットの連携方法
●SwiftでラズパイのGPIO経由でセンサーやLEDを操作する方法
などをデモを交えて紹介する予定です。
ぜひ皆さんもSwiftを使った自宅のスマートホーム化、電子工作を楽しみましょう!
SwiftUIのNavigation APIは「Tab, Alert, Sheet, Navigation Link...」など様々な種類が存在し、OSによるインターフェースの変化も激しいです。
また、これらのAPIを利用して画面遷移を実現する際には多くの選択肢があり、画面遷移が増えれば状態管理も複雑になります。
このトークでは、そんなSwiftUI Navigationについて以下の内容で発表します。
・SwiftUIのシンプルな画面遷移と状態駆動型の画面遷移について俯瞰
・状態駆動型の画面遷移の利用時に起きる状態の不整合、不要な状態の管理を改善するswiftui-navigationの手法
本トークではPoint-Free製のswiftui-navigationを深掘ることによって、よりSwiftUIのNavigationについて理解できるようになることを目指します。
iOSにはさまざまなアニメーションAPIがあります。思いつくだけでもUIView.animate()、Core Animation、UIViewPropertyAnimatorがあり、Core Animationが提供するAPIは膨大ですべてを使った人は稀でしょう。物理演算を追加するUIKit Dynamicsもあります。さらにSwiftUIでは.animation()や.withAnimation()というModifierによる手段が提供されています。
これらのAPIがカバーする範囲は重なっていて、同じことを別のAPIでも実現できます。それぞれのAPIをどのように使い分けるのでしょうか?
この講演では各APIの使い方を実用的なパターンの実例を示しながら解説し、どのような判断で使い分けるべきかを示します。すべてを明確に理解し、表現の引き出しを増やして、アニメーションをマスターしましょう!
Swift5.5で登場したSwift Concurrencyは、非同期処理を簡潔で安全に扱える機能です。主な機能は既に追加済ですが、現在も新しい機能の追加や改善が行われています。
今回は、この1年で見られた進化や実装上のTipsなどを紹介します。また、Swift6以降に既存のコードが動かなくなるリスクを最小限に抑えるための段階的導入方法など、ちょっと先の未来についても見ていきます。
例:
これからConcurrencyをもっと使ってみようと思っているみなさまのお役に立ちましたら幸いです。
この発表では、Swift アクターモデルと Elm Architecture を融合したフレームワーク「Actomaton」について、実用例を中心に紹介します。
https://github.com/Actomaton/Actomaton
Composable Architecture では飽き足らないマニア向けの内容を予定しています。
ここ数年、格好良いAR表現が付いた映像が増え、皆も色々な所で目にしていると思います。
エンジニアなら自分でも実装して実現したくないでしょうか?
私は昨年からARを本業としてAR表現があるリアルタイム配信をいくつか実施してきました。
Unreal Engineを使いカメラとトラッキング機材を中心に連携し作成していきます。
その実現に必要な要素を解説しスキルを伝授していきます!
デモと手法解説を軸に、AR表現に興味を持った人がさらに興味を持つようなセッションです。
SnapのCustom Landmarker、ARCoreのGeospatial API、NianticのLightship、そしてARKit 6のLocation Anchor、他にもありますが、これらはすべてVPSと呼ばれるものです。
ここで言うVPSは“Virtual Private Server”ではなく“Visual Positioning Service/System”です。
緯度経度をもとにするGPSとして馴染み深い“Global Positioning System”に対し、画像による空間情報をもとに自己位置推定する技術がVPSです。
本セッションでは、今後のARに関する要素技術として重大な位置づけになると考えられる “VPS”そのものとその周辺技術、実際のユースケースや概況に加え、いずれかのVPSソリューションを用いた「実際に動作するデモ」を交えて解説します。
NFC とは駅・空港での自動改札機やお店での電子マネー決済、社員証や学生証をかざした入退出管理など、日常でよく見かけるアレを叶える技術です。
iPhone に搭載されている NFC を私たちの App で使うためには Core NFC を用います。これは iOS 11 から利用可能になり、iOS 13 のタイミングで大きくアップデートされました。昨今の情勢から非接触技術が注目されたり、eKYC に利用できたりと、現在進行形でさまざまな App で利用が広がっています。
私は iOS 13 のときから3年間、この Core NFC を使った App の個人開発を続け、関連する OSS も公開してきました。それによって得た iOS 固有の NFC 利用まわりの知見や、これから Swift Concurrency + Core NFC を活用する App を開発する際の流れ・例を紹介します。
SwiftUIが発表されてからすでに3年が経ちました。
しかしいまだに開発現場から採用が難しいという声が聞こえてきます。
UIKitとSwiftUIの併用も可能ですが、実際に採り入れてみるとさまざまな問題が発生しました。
このセッションではそれらの問題を解決する手法を紹介します。
皆さん多かれ少なかれ正規表現を使ったことがあると思います。
コマンドラインツールで、エディタの検索で、そしてNSRegularExpressionで。
単純な文字列検索に比べ、正規表現はとても表現力豊かでパワフルな検索を可能にします。
Swift Evolutionにも正規表現に関する多くのproposalがあり、Regex型やRegexリテラルなどが正式に実装される日も近いでしょう。
しかしこの正規表現とは一体何者なのでしょうか?
どんなものが表現でき、どんなものが表現できないのでしょうか?
多くのメタ文字や演算子記号があるためとても複雑なものと思われがちですが、実際にはたった3つの文字列の演算ルールだけで構成されています。
本トークでは状態遷移図の一種であるオートマトンからスタートして正規表現の原理を紐解きその限界を探っていきます。
昨年、Swift Concurrencyが導入されました。当初はiOS 15のみでサポートされていましたが、Concurrencyのback deploymentが実現されたため、iOS 13以降であれば今すぐにでもConcurrencyを取り入れることができます。
しかし、実際にConcurencyを取り入れようとすると、参考となる情報はまだまだ少ないのではないでしょうか。Conccurency自体の情報は豊富でも、iOSアプリ開発での活用、特にactorや単体テストなどについてはほとんど語られていないように思います。
本トークでは、iOSアプリ開発におけるConcurrency活用の一つのベースラインとなることを目指して、async/awaitやTask、actor、MainActorなどを、アプリやテストのコードにどのように取り入れるか、具体例を用いて紹介します。
WWDC 2019 で発表された PencilKit を利用することで、数行のコードで 標準メモアプリと同様の手描き体験をアプリに導入できます。
発表に先立ち、日本経済新聞社の紙面ビューアーアプリでは、Apple Pencil を用いた紙面画像にメモやハイライトを書き込める機能をリリースしました。
アプリの機能要件を満たすための独自拡張の実現には、様々な制約が立ちはだかりました。
たとえば、キャンバスに画像を載せる、ズームやスクロールなどビューアーとしての操作は残しつつ書き込みを一時的に無効にするなど、一見すると単純そうですが一筋縄ではいきません。
本セッションでは PencilKit の開発ノウハウを、ドキュメントと内部の動きから洞察した知見の両面から解説します。開発経験を踏まえ、紙の新聞に書き込みを行うユーザー体験をどのようにアプリへ落とし込んでいったか説明できればと思います。
SwiftのWebAssembly対応を進めている、SwiftWasmというプロジェクトがあります。
現在、WebAssemblyはWebブラウザ上の用途だけでなく、「複数言語からコンパイルできて様々な環境で動く高速なプログラム」として、エッジコンピューティングやIoT、ブロックチェインにおけるスマートコントラクトなど、様々な分野で用途が模索されています。
もし将来的にWebAssemblyが覇権を取った場合、そこでSwiftが活躍できるポジションはあるのでしょうか?
このトークでは、Wasm対応によって達成できる未来、プロジェクトの最新状況と課題、実際の活用事例を紹介したいと思います。
Appleプラットフォーム以外でのSwiftの活用に興味のある方には、特に楽しんで頂ける内容になる予定です。
Reactの思想であるLearn Once, Write Anywhereを推し進めるため、React内部にはReactをどこでも動かせるようにするreact-reconcilerというパッケージが存在します。
react-reconcilerはReact DOMやReact Nativeで利用されているUIの差分検出処理のパッケージで、JSXで書かれたコンポーネントのマウントや更新通知を受け取れます。これを使って独自のレンダラーを作ってみましょう。
このトークでは、react-reconcilerのレンダラーをSwift(UIKit)で実装して自分だけのReact Nativeを作る方法について話します。