-
iOS16からMetalの新しいシェーダおよびパイプラインであるオブジェクトシェーダ・メッシュシェーダ・メッシュレンダーパイプラインが追加されました。
これは既存のレンダリングパイプラインをさらに柔軟に扱えるようにするもので、この適用例としてスタンフォードバニーに毛を生やした画像が印象に残っている方もいるはずです。
セッション中では説明をシンプルにするために平面上に毛を生やす例を挙げて本機能の説明がされていました。
「これは…これは毛というより草じゃないか!草だ!!草が生やせるぞ!!!」
と、喜び勇んでリンクされていたサンプルコードをダウンロードしてみたのですが、そこにあったのは残念ながら本機能を使った別の適用例でした。
文字通りまさに草も生えません。
しかし手段があると知ってしまった以上、そこで諦められるわけがないのです。
「iOSDCで…伝えなければ…草を生やす方法を…!」
最近のXcodeは動作可能な最小のOS要件が厳しく、最新に近いmacOSのバージョンが求められます。
現実的な悩みで、昔のプロジェクトを動かす時に当時の古いXcodeをインストールできず、少し試したいだけでも新しいXcodeに対応する改修が必要になってしまいます。
そこで救世主となるのがAppleが提供してる仮想マシンを作成するためのVirtualization Frameworkです。これを利用することで任意のmacOSを仮想マシンにインストールできます。
これらを試しているうちにもしかして「Xcode 1.0」もインストールできるのでは!と思い立ち、試行錯誤を繰り返しました。
はたして2023年に Xcode 1.0を動かせたのか!?その奮闘記をお送りいたします。
tvOSアプリ開発ではiOSアプリではあまり気にする必要のなかったフォーカスシステムへの理解が必須で、それがtvOSアプリ開発を難しくする所以でした。
そしてWWDC23で発表されたvisionOSでもフォーカスシステムへの理解が必須になると予想されます。
というのも、visionOSにはEye Trackingが採用され、目で特定のオブジェクトにフォーカスを合わせ、指で選択・決定するというUIが基本となるためです。
このLTでは3分で簡単にtvOSアプリのフォーカスシステムに入門し、後半2分でvisionOSではフォーカスをこう扱うという予想をお伝えできればと思います。
iOSアプリ開発でもユニットテストによるテスト自動化の考え方が一般的になり、モバイルアプリ開発専用のCIサービスの存在やGitHub Actionsなども気軽に使えるようになったため、みなさんも開発する機能に対して多くのテストコードを書かれていることでしょう。しかしそれにより大量に書かれるテストコードの一部が、CI上でたまに失敗するなど、その原因究明に時間を割かなければならない新たな問題も発生しているのではないでしょうか?
私自身、昔はどうしても解決する時間がないテストを放置したり、無効にしてしまったこともあります。しかしそれに向き合って解決することで、安定したテストコードを簡潔に書くという学びを得られました。
本トークでは、不安定なテストコードの原因と対処について話したいと思います。みなさんのテストが安定し改善できるきっかけになれば幸いです。
ユニットテストのテストコードにおける3-Aパターン、Arrange-Act-Assertについて知っていますか?Arrangeは前提条件と入力、Actは処理の実行、Assertは期待した結果が得られているかを検証します。さてこのパターン、何かに似ていますよね? そうです、サウナ-水風呂-外気浴というパターンそのままなのです。
まだあります。浴室では必ず先に体を清めますが、これXcodeのXCTestでsetupメソッドにより状態をクリアするのと実質同じですし、サウナのセットを繰り返すことは、Xcodeにもテストを自動で繰り返す機能が備わっているのと本質は同じでしょう。さらにスタブ、これはもうバスタブから来てるのは誰でもわかりますよね。
本トークは私のおすすめなサウナ利用について紹介することで、皆さんがテストコードだけでなくサウナで心身をととのえるられる事を目的としています。
WWDC2023でSwiftDataが発表されました。
なぜ多くの人がSwiftDataに期待するのかといえば、それはCore Dataが辛い(つらい)からでしょう。
特にCore DataはSwiftUIやSwift Concurrencyなど一緒に使おうとすると工夫が必要です。
データ更新の監視と再描画、マルチスレッドでのデータ操作などには多くの困難を伴います。
またスキーマ定義がGUIなことなど、昔ながらの辛いポイントもあります。
このセッションはCore Dataの辛さ、困難を認識し、その視点からSwiftDataがなぜ必要かを感じるためのものです。
具体的にSwiftDataについては触れませんが、その必要性を感じていただけるものを目指します。
「Neovim」とは、Vimから派生したテキストエディタです。
SwiftUIのプレビュー機能が使えないなど、UIの実装にはあまり向いていません。
しかし、逆にいえばUIを伴わないライブラリのような実装は十分行えます。
むしろ以下の観点から、Xcodeに負けず劣らず高速にコーディングできます。
本トークは、Neovimを使ってSwiftのライブラリを5分間でできるところまで実装します。
スライドを一切用意せず、5分間ひたすらライブコーディングします。
Neovimによる美しいテキスト編集をお楽しみください。
WWDC23で一躍ホットワードとなったSpatial Computing。
しかし単語自体は以前から使われているものです。今回発表されたSpatila Computingとそれらの間に違いはあるのでしょうか?
過去を振り返りながらiOSエンジニアとして今後我々が知っておくべきことは何なのかを探っていきましょう。
ユーザーレビューはアプリの品質と人気を判断するための重要な指標であり、Store Review数の増加は、アプリの信頼性、視認性、そしてランキングに直接影響を及ぼします。
しかし、Appleの標準ダイアログを用いてレビューを促す際、そのイベントログが取得できないため、どのタイミングでレビューを求めるのが最適か、その判断が難しいという問題があります。
このセッションの内容:
Swift 4.0から導入されたCodableは、アプリ内のデータ変換に広く普及し、特にJSONEncoder/Decoderは、みなさんも日常的に使用しているでしょう。
しかし、型表現豊かなSwiftは、JSONの素朴なデータ構造へ単純に変換しづらい面があります。
そのため、あまり知られていないデータシリアライゼーション、デシリアライゼーションの仕様が存在しています。
普段は目にすることはないけれど、JSONEncoder/Decoderでハマった時に、このトークが解決のきっかけになるかもしれません。
JSONEncoder/Decoderの標準挙動を深く知っていれば、任意の柔軟なカスタマイズも可能です。
クイズ形式で楽しみながら、学んでいきましょう!
弊社はエンジニア採用の際に、コーディングチェックを用いていますが、実は最近、iOSをご希望の新卒の方向けに新たな特別選択課題をリリースしました。しかもなんと、その課題の対応に使われるバックエンドはSwiftで書いています!そう、SwiftCloudを使ったAPIサーバです!
バックエンド経験がほとんどゼロの筆者でも、簡単にSwiftCloudでサーバサイドSwiftのコードを書けたので、ぜひ皆さんに布教したいと思います!
このLTは、
をしたいと思います!
ios17でSwiftUIのViewにMetalのエフェクトを簡単にかける機能が追加されました。
この機能の登場によって、従来はグラフィックスの専門知識が必要であったUIがより簡単に作成可能となりました。
ゲーム等で利用されるパーリンノイズアルゴリズムを利用したエフェクトの作成方法を例にあげて、この素晴らしい新機能を5分で紹介したいと思います!
弊社の新卒研修の一貫としてtwitterライクなアプリを短期間で作ることはお馴染みの恒例行事となりつつあります。
私のチームではUIKitを一切使わず、フルSwiftUIで開発するという技術挑戦を行いました。フルSwiftUIでアプリを制作するにあたり難しい問題の一つに画面遷移周りが上げられます。今回のハッカソンを通しSwiftUIの画面遷移問題を攻略したくSwiftUI縛りで開発を行いました。以下が苦労した点とお話ししたい工夫内容です。
ルーティングの管理: SwiftUIでは、画面遷移のためのルーティングの管理が不十分です。複雑な画面遷移の制御が難しくなります。
ナビゲーションのデザイン: SwiftUIのナビゲーションはTabViewのitemを横断するような、画面遷移に気をつけなければなりません。Appleが想定するナビゲーションの動きを正しく理解し開発する必要があります。
最近耳にする機会が増えた「デザインシステム」という言葉ですが、皆さんはどのように捉えてますか?
デザインシステムはエンジニアに関係あるのか?エンジニアが学ぶべきことなのか?と疑問に思っている人もいると思います。
デザインシステムとは〜から、エンジニアのデザインシステムに対する姿勢、なにを理解すべきかをお話しします。
デザイナーさんと共に素敵なサービスを築いていく手助けになると嬉しいです。
SwiftStandardLibraryの中にはBasic Behaviorsというプロトコル群があります (一部struct)
この中にはHashable, Identifiable, CaseIterableなど、よく見かける奴らがいます
https://developer.apple.com/documentation/swift/basic-behaviors
Hashable?なんかハッシュ値できるやつ、、
CaseIterable?なんかenumの要素を配列で取れるやつ、、
私はそれぐらいの認識なのですが、
いざ公式フレームワークやOSSの宣言元を見に行くと、結構使われていることがわかります
本トークではBasic Behaviorsでできることを整理した上で、
それらが利用されているコードを参照しながら、
具体的にどのようなシーンで活用され、大活躍しているかを探ります
WWDC23でvisionOSが発表されました。
新ハードウェアのApple Vision Proと共に動作する新しいOSです。
Apple製のSpatial Computingデバイスは数年来待ち望んだ物でした。
サンノゼ現地にて発表に立ち会ってきました。
この素晴らしい発表を受け、iOSDC2023に向けて visionOS 30Days開発チャレンジを実施します。
シンプルな実装から始まり、各種コンポーネントを使い、簡易的なゲームや映像表示などを実装していき、そのソースコードと知見をすべて共有します。
私は過去にMetal Shader 100DaysやAR100Daysを実施してきました。
その経験を活かし、今回チャレンジし結果を共有します。
一緒に、visionOSの可能性を探求しましょう!
Webブラウザのために仕様策定はされていても、プライバシー上の懸念を理由としてSafariには実装されていないAPIはたくさんあります。Web Bluetooth API、Web NFC API、WebHID API、Web Serial APIなどなど。その中にはWebからMIDI機器を制御するWeb MIDI APIも含まれます。
当然WKWebViewにも実装されていませんので、自作Webブラウザでも使えません。しかし、WebKitフレームワークによって独自にそれらのAPIを実装し、アプリとしてApp Storeに出すことはできます。
本トークでは、Scratch用Webブラウザ「Scrub」にWeb MIDI APIを独自実装した経験から、JavaScriptのAPIを追加する方法、ネイティブ側フレームワークとの繋ぎこみのコツ、参考となる仕様や実装の探し方などをお話しします。
iPhoneには様々なセンサーや優秀なカメラが搭載されています。
それらで取得したデータをリアルタイムにmacOSアプリに送ることで、macOSアプリでも様々なセンサーデータが利用できます。
私が開発しているmacOSでVTuberのようになれるアプリで実装している、
Network frameworkを活用した接続設定が容易なユーザーフレンドリー通信、
そしてCodableに比べて300倍以上高速だったデータエンコードの方法などを紹介します。