普段iOSアプリを開発している皆さん。 たまにはバックエンドの開発にも挑戦してみたいと思いませんか?
VaporやHummingbirdといったWebフレームワークを使うとなるとハードルが高く感じるかもしれません。
しかし、これらのフレームワークで使われているSwiftNIOというライブラリさえあれば、簡単かつお手軽にCloud RunやAWS Lambdaで動作するWeb APIを作ることができます。
本トークでは、SwiftNIOの紹介から、実際にSwiftがCloud RunやAWS Lambdaで動作する流れを説明します。
皆さんのバックエンド開発の一歩を後押しできれば嬉しいです。
概要:
アプリでは起動時に様々な処理をさせたいことが多々あるかと思います。
例えば、お知らせの表示や利用規約への同意取得などが挙げられます。
また、iOSアプリは通常の起動に加えて、Push通知やUniversal Linkなど、複数の起動パターンも存在します。
メタバースプラットフォームclusterではそういった要件が増えるたびにロジックが増え、クラスが肥大化して可読性が低下し、大きな技術的負債となっていました。
また、バーチャル空間での体験をUnityで開発し、Unity as a Libraryとして取り込んでいるため、UnityFrameworkと連携する起動処理にも苦労していました。
このセッションでは、私たちが複雑な起動処理にどのように立ち向かっていったかを紹介します。
Swiftが好きだけど何もわからん。自分よりSwiftを愛してて詳しい人ばかり。つらい。
Swiftコンパイラを勉強しようとして返り討ちにあった方は多いでしょう。どこから手をつけるとよいかもわからん!
「型推論ハンズオン」[omochi 2019]はSwiftの型推論にフォーカスして学ぶ合宿用ハンズオンです。未実装の部分に正しいコードを書いて型推論器を完成させ全テストをパスできたらクリアです。SwiftSyntaxを使った本物そっくりの言語が題材で、Swiftを理解したい私にはありがたい教材です。
私は「Swiftの型推論を学ぼう」[omochi 2024]を聞き、発表の元ネタであるというこのハンズオンで勉強することにしました。合宿は5年前に終了しているため1人で挑みます。
あれ?ハンズオン壊れてるよ?テスト通すどころかハンズオンをコンパイルできなくて挑戦できないよ??
果たして私は5年前のハンズオンをSwift 5.10に対応させSwiftの型推論を†完全理解†できるでしょうか?
話すこと
CI環境などでxcodebuildのログ出力を整形したり、テスト結果をJUnit形式のXMLとして出力するために、まだまだ(意識せずとも)xcprettyを使用している方も多いと思います。しかし、xcprettyはほとんどメンテナンスされておらず、Xcodeのここ数年の新機能に対応できていない部分があります。
そこで、xcprettyからの置き換えとしてxcbeautifyを使用してみましょう。実は、fastlaneでもxcodebuildのフォーマッターとしてxcbeautifyが推奨されるようになっています(参照: https://docs.fastlane.tools/best-practices/xcodebuild-formatters/)。
このLTでは、私たちのプロジェクトでの実体験を元に、以下の内容を紹介します:
これらのポイントを急ぎ足でご紹介し、皆さんがxcbeautifyに移行する際の参考になればと思います。
アプリ開発をする上で、「ViewController」というクラスを意識しないことは、ほぼないのではないでしょうか?
iOS 2.0の「UIViewController」を皮切りに、様々なViewControllerが提供され、私たちはそれらを実装、カスタマイズして利用してきたかと思います。
では、これまでにどれだけのViewControllerが登場してきたのでしょうか?
このセッションでは、これまでに登場したViewControllerの歴史を振り返ります。
想定する方々:
iOS/iPadOS、それ以外のプラットフォーム向けアプリ開発者
ゴール:
知らなかったViewControllerを知り、今後の参考にできる
アジェンダ:
※対象は「UIViewController」または「UINavigationController」を継承するクラスとします。
アプリ開発を行っていると、週1回、月1回など決まったタイミングで定期的にアプリを配布したい場面がしばしばあります。
近年登場したXcode Cloudにはスケジュール配布機能が備わっており、手軽に定期配布することが可能です。
しかし、頻度のカスタマイズ性に乏しく、例えば月に1回の定期配布を行うことはできません。
BitriseやCircleCIをはじめとする素晴らしいCI/CDサービスを使用する方法もありますが、実は私たちiOSエンジニアは既にこの問題を解決する手段を持っています!
本トークでは毎月1回アプリを定期配布するのに試行錯誤した末に辿り着いたベストプラクティスとSwiftの可能性についてお話いたします。
Swiftでこんなことができるという驚きと感動をお届けできれば幸いです。
私が個人事業主として開発を手伝っているアプリは、UIKitとStoryboardをベースにした既存の実装があり、かなりレガシーなものとなっています。
このアプリの一部機能を作り替える際に、SwiftUIとTCA(The Composable Architecture)を用いたモダンな設計を導入しようと試みました。
しかし、パッケージ側からアプリ側の既存画面を呼び出す必要があり、多くの課題に直面しました。
このトークでは、開発中に発生した具体的な問題と、それにどのように対応したのかを以下のポイントに分けてお話しします。
依存関係の管理: モジュール間の依存関係をどのように整理したか。
画面遷移の実装: SwiftUIからUIKitの画面を呼び出す際の具体的な方法とその課題。
iPadやMacのような大画面のアプリを開発する際に重要なポイントの一つに、空白をどのように作るかがあります。
UIKitでiPadアプリのレイアウトをするときは、 readableContentGuide
という便利な機能がありました。
これを利用することで、Appleが定義した読みやすい幅を基準にレイアウトを組むだけで、イイ感じに作ることができました。
SwiftUIが登場して5年になり、成熟してきた感も出てきましたが、まだまだ大画面レイアウトに関するベストプラクティスはまだ確立されていません。
このセッションでは、個人事業主として手伝っているSwiftUIベースのアプリをiPadに対応させるためにどのようにしたかをお話しします。
トランクベース開発では、細かいコミットを頻繁にマージし、コードの安定性を高め、コンフリクトを早期に解決することで、迅速なリリースが可能になります。この手法において、未完成機能やバグのある機能をオンオフするためにFeature Flagを利用することが重要です。
Feature Flagを導入することで、開発中のコードを安全にマージし、複数の機能開発を並行して進めることが可能となり、チーム開発を加速させるメリットがあります。しかし、機能のリリース後にFeature Flagの定義や分岐箇所を削除する際、不要なファイルや定義の削除漏れが発生することがあります。
この問題を解決するために、Swift Macroを活用して削除漏れを防ぐための@粉砕アノテーションを作成しました。このアノテーションにより、Feature Flagの定義が削除された際にビルドエラーを発生させることで、削除漏れを防止します。
このトークでは、メタバースプラットフォームclusterでの具体的な事例をもとに、Feature Flagを利用したトランクベース開発の運用方法と、Swift Macroを活用した@粉砕アノテーションによる削除漏れ防止の方法について紹介します。
このトークでは、CNLabelContactRelationElderCousinMothersSiblingsSonOrFathersSistersSonについて語りたいと思います。
果たしてCNLabelContactRelationElderCousinMothersSiblingsSonOrFathersSistersSonとは何者なのか、
どうやってCNLabelContactRelationElderCousinMothersSiblingsSonOrFathersSistersSonを利用すればいいのか、
あまり語られてこなかったCNLabelContactRelationElderCousinMothersSiblingsSonOrFathersSistersSonについて説明します。
またCNLabelContactRelationElderCousinMothersSiblingsSonOrFathersSistersSon周辺の機能についても語る、
CNLabelContactRelationElderCousinMothersSiblingsSonOrFathersSistersSon尽くしの5分間となる予定です。
iOS 17からiPhoneの機能としてNameDropが利用できますが、
APIを公開されていないため、私たちiOS開発者はNameDropの機能やエフェクトを利用できません。
APIが提供されていないなら、自作してみようと考え、
NameDrop風エフェクトをMetalを利用して開発してみました。
Metalは、Appleが開発したグラフィックスおよびコンピューティングのための低レベルなフレームワークです。
ハードウェアに近いレベルで制御が可能であり、効率的なグラフィックスおよび計算処理を実現できます。
しかし、Metalを使用して開発するためには、CPUとGPUの関係、シェーダープログラミング等の
様々な知識が必要となり、理解が難しいと感じる人も多いでしょう。
今回はMetalを使用したエフェクト作成方法について、開発したコードを用いて解説します。
まずは、Metalの処理の流れやコマンドバッファ、コマンドエンコーダ、パイプラインなどの用語や概念について説明し、
次に、シェーダー関数を利用してNameDrop風エフェクトを実現する方法について要点を説明します。
Metalの知識を学習することで、エフェクトの作成時の高度なカスタマイズ等の
魅力的な視覚効果を実装することができます。
この機会にMetalプログラミングを学び、日々の開発に役立てていただければ幸いです。
皆さんは昨年のiOSDCのロゴは覚えていらっしゃるでしょうか?
同心円とその中心から放射状に伸びる線から構成され、色が塗られている箇所と塗られていない箇所に分かれたあのロゴマークです。
(参照:https://iosdc.jp/2023/)
このデザインを見たときに、ふと思った方もいるのではないでしょうか?
「このデザインには意味があるのではないか?」
「何か隠されたメッセージが潜んでいるのではないか」
と。
かくしてロゴに秘められているであろうメッセージを解読しようと試行錯誤する日々が続いたのです。
仕事の合間に。そしてレギュラートークの準備の合間に。
そしてiOSDC Japan 2023の最終日、ついに私は真実に辿り着くことができました。
本LTではそこに辿り着くまでの試行錯誤と、このLTのために丸一年秘密にしていたロゴに関する真実をお話します。
iOSプロジェクトにおいて、開発効率を向上させるためにマルチモジュール構成を採用する人が増えてきています。各モジュールの独立性を確保することで、スケーラビリティが高まります。
しかし、マルチモジュール構成では、一つの変更がプロジェクト全体、全てのモジュールに影響を与えるとは限りません。それにも関わらず、全てのテストを毎回実行するとテスト実行時間が長くなり、開発サイクルが遅延します。マルチモジュール恩恵を十分に受けてられていません。
この課題を解決するために、「XcodeSelectiveTesting」というツールを用いて、変更箇所に依存するターゲットのみを選定し、意図したテストターゲットのみを実行する手法を紹介します。
このトークでは、プロジェクトへの導入方法と導入で得た知見や課題を共有します。
「アジャイル開発ってよく聞くけど、実際にはどうすればいいのかよくわからない・・・」
昨今、アジャイル開発を取り入れる現場が皆さんの周りでもかなり増えているのではないでしょうか。今やアジャイル開発はエンジニアとしても無視できない状況となってきています。
しかし、「私はただ開発さえできればいいんだ!XcodeだけがTOMODACHI。」と考えるエンジニアも少なくないと思います。そんな皆さんに向けて、アジャイルな現場での立ち回り術を紹介します。
本トークでは、アジャイルの中でも最もよく使われるスクラムフレームワークをベースに、アジャイルなプロジェクトでどのように立ち回るとプロジェクトから重宝されるか、ひいてはプロジェクトが成功するかについてお話しします。プロジェクトの成功に貢献したいiOSエンジニアの皆さんに、スクラムマスターの観点からコツを解説します。
ウィジェットの生誕から10周年を迎え、その進化は目覚ましいものです。WWDC14での初登場以来、ウィジェットはシンプルな情報表示から始まりましたが、WWDC20でホーム画面に設置できるようになり、昨年のWWDC23ではさらにインタラクティブなやりとりが可能となり、機能の幅が大きく広がりました。
しかし、多くの開発者が直面している課題は、ウィジェットでどのような機能が実現できるのか、そしてどうやってユーザー体験を向上させるかという点です。
このトークでは、App Storeに眠る世界中の開発者が生み出すウィジェットを調査し、革新的で多種多様なアイデアを共有します。
具体的には、
などの事例を紹介します。
参加者はこれらの実際の事例を通じて、アプリ開発に活かす新たなアイデアやインスピレーションを得ることができます。
未知のウィジェットの世界はまさに宝探しのようです。刺激的なインスピレーションを求めて、一緒に世界のウィジェットを巡る旅に出かけましょう。
このトークを通じて、あなたが次の伝説のウィジェット開発者になるためのアイデアを得ることでしょう。
SwiftUIの「View Identity」という概念を知っていますか?
SwiftUIはこのView IdentityによってViewを管理・再描画を行っています。
そのためView Identityの扱いによっては余分な再描画を生んでしまいアプリのパフォーマンスを下げてしまいます。
このLTでは、View Identityについて簡単に説明した後
パフォーマンスが良くないSwiftUIのコードとその改善方法を紹介します。
このLTを通してView Identityを意識したパフォーマンスの良いViewを書くアプローチを一緒に学びましょう!
WWDC21で発表されたPhotogrammetryのObject Captureは、複数枚の写真から3Dモデルを生成する技術です。Photogrammetryに加えて、NeRFや3D Gaussian Splattingといった手法も注目を集めています。
本トークでは、Photogrammetry、NeRF、そして3D Gaussian Splattingの各手法の特徴や、それぞれの得意・不得意について5分で簡潔に紹介します。
なお、例えば3D Gaussian Splattingの分散行列といった技術的な詳細には触れないので、専門知識がなくても楽しめる内容となっています。
iOS 15より導入されたFormatStyleは、値を加工するためのプロトコルです。
.format(value)
の形で値を与えるだけで、日付や数値、文字列などの標準的なフォーマットはもちろん、人名や電圧など多岐にわたる形に対応したFormatStyleが用意されています。
SwiftUIにおいても各種ビューにおいて非常に便利に使うことができます。
でも、みなさん、まだまだ足りなくないですか?
そんなフォーマットに飢えている皆さんのために、カスタムフォーマットをどのようにして作るかを提示したいと思います。
世の中をフォーマットしていきましょう。
iOSエンジニアといえど、XcodeGen、SwiftLint、GitHub Actions、Bitriseの設定などでYAMLを書く機会はありますよね?さてこのYAMLというやつ、何者なのか理解していますか?
このトークでは、iOSアプリエンジニアでも知っておくべきYAMLの基本について話します。YAMLときちんと向き合うことで、きっと前より設定ファイルがスラスラ書けるようになるはずです…!
Topics
・YAMLとは
・YAMLの基本的な書き方
・どっちが正しい書き方?クイズ形式で学ぶYAML
WWDCに行くためには多くの壁が存在します。航空券、入国審査、言語、治安、飯が合わない、などなど。やらないとそもそもアメリカ入国もアウトになるものもあれば、ハックすればより自分の旅が快適になるものもあります。また、限られた予算内でどう頑張って渡航するかも重要になります。いろいろと山積みで頭を抱えますよね?
皆さん、大丈夫です。ここに経験者がいます。入国審査のときに審査官に嘲笑され、タイムズスクエアで屈強なアニキに囲まれCDを買わされ、「お前の英語よくわからん」とドライバーに無視され、かの遠い地で日本を懐かしみ枕を濡らした経験のあるのは、この男!安い航空券を取るという特技だけでなく、多くの失敗をアメリカで学んだ男が、今年のWWDCをたのしみつつ、どうハックしてアメリカツーリズムを乗り越えたか。めくるめく5分間で話していきます!
もちろん、来年からWWDCに行く人のためになったり、すでにWWDCに行った人にもプラスになる情報が盛り沢山!ぜひご覧ください
あ、WWDCに行けるかどうかのハックはありません、運です。