永続化されたデータの保護は、現代のiOSアプリ開発において必要不可欠な要素です。
しかし、Appleが提供する永続化フレームワークであるCore Dataは標準でデータの暗号化を提供しません。
また、Core Dataのデータ暗号化には、「データベース全体を暗号化する方法(SQLCipher)」や「保存するデータを個別に暗号化する方法(CryptoKit)」があります。
このトークでは、それぞれのメリット/デメリットを比較した上で、Core Dataにおけるデータの暗号化手法とその選定方法について詳しく紹介します。
参加者は以下の内容を学ぶことができます。
このトークを通して、「Core Data」の暗号化に必要なナレッジや各利点について理解を深めて頂ければ幸いです。
WWDC23で発表されたMergeable Libraryは、Static/Dynamicに続く新たなライブラリの形式です。
これまで、依存関係にStatic Libraryを利用することで、アプリの起動高速化や、バイナリサイズの圧縮などのユーザー体験を改善する手法が知られていました。
その一方で、この手法はDynamic Libraryのもたらす開発体験とのトレードオフになってしまう部分もありました。
Mergeable Libraryを使うことで、それらの良いとこどりができるのです!
このトークではMergeable Libraryを使った、新しいプロジェクト構成がもたらすメリットと導入のヒントをお伝えします。以下のようなトピックが含まれます。
新たな仕組みを学び、開発者・ユーザー体験の両立を目指しましょう!
Swift Package Managerの登場により、iOSアプリにおけるライブラリの導入に大きな変化が起きました。
最近ではアプリ開発でもSwift Packageによるマルチモジュール開発の手法が確立しつつあります。
しかし、何も考えずにPackage.swiftを書いていると不要なライブラリがキャッシュに混ざったり、余計なビルド時間がかかってしまう場合があります。
本トークでは、個人でライブラリを複数リリースした経験とそのライブラリを実際に使ってアプリ開発を行ってきた経験を元に、Package.swiftを最適化するためのポイントを紹介します。
具体的には、以下の内容を解説します。
このトークを通じてビルド時間の短縮や不要なライブラリの混入を防ぐことでDX(開発者体験)の向上に寄与することを目指します。
Flutterを用いてモバイルアプリを開発する際には、
showModalBottomSheet
は必須の機能と考えます。
しかし、特定の要件や要求に対応するためには、showModalBottomSheet
だけでは不十分な場合もあります。
例えば
showModalBottomSheet
に関する情報を調べることが日常茶飯事かもしれません。そこで、今回はFlutterにおけるモーダルシートの基本について深く掘り下げ、
外部パッケージの紹介や、特定の要件に対応するためのモーダルシートの実装方法に焦点を当てて話していきたいと思います。
具体的には、以下の内容について説明します。
showModalBottomSheet
の内部実装の解説このトークを通じて、Flutterのモーダルシートに関する理解を深めていただけることを心から願っています。
WWDC2023でAppleが発表したObservationフレームワークは、オブザーバーパターンによりデータバインディングを高いパフォーマンスで実現することが可能なフレームワークです。
このセッションでは、昨年の発表以降におけるObservationの最新事情を探ります。また、今後iOS17以降をターゲットとするアプリでは、SwiftUI、Concurrency、Observationがデファクトスタンダードになることも踏まえながら、Observationの実践方法を紹介します。
【このセッションで紹介するトピック】
近年注目度が上がっている生成AIですが、その中でもGitHub Copilotはコーディングをサポートするツールとして最も注目度の高いサービスの一つです。
GitHub Copilotは2024年2月にリリースされたGitHub Copilot Enterpriseや、現在開発段階で非常に注目されているCopilot Workspaceなど、より便利な機能が追加予定であり、今後デファクト・スタンダードになると私は期待しています。
しかし、このように注目されているGitHub Copilotですが、iOS開発においては少し盛り上がりに欠けているような印象があります。最も大きな理由としては、Xcodeが公式にサポートされていないためだと考えられます。
本セッションでは、GitHub Copilotの「Chat」機能に焦点を当て、Xcodeが公式にサポートされていない中でも使い方次第でとても便利なツールであることを実際のデモ動画などを交えて紹介いたします。
また、その他にも以下のトピックについてお話しいたします。
・ 弊社におけるGitHub Copilot普及のための取り組みとそのポイント
・ 全社的に実施したGitHub Copilot使用者のアンケート結果(全社/iOSチームの比較も紹介)
・ VScode(公式サポートエディター)とXcodeでできることの差
アプリ開発において重要な通信系処理ですが、OpenAPI Generatorを利用することで、OpenAPIのAPI定義書からクライアントコードを自動生成することができます。
このトークでは、OpenAPI GeneratorをKotlin Multiplatformで活用し、より効率的にアプリを実装する具体的な方法と工夫を紹介します。
このトークでは、以下のポイントに焦点を当ててお話します。
Kotlin MultiplatformでAndroidとiOSの開発を効率化したうえで、更に楽に実装できるようにしていきましょう!
Swift 5.9からSwift Macroが使えるようになり、iOSアプリ開発の現場でもその活用が進んでいます。Swift Macroは手作業で書く必要があったコードを自動生成できボイラープレートを減らす上で非常に有効です。
このトークでは、
Swift Macroの簡単な概要と従来のコード生成系ライブラリにはない長所を説明し、私が公開したswift-property-name
というSwift Macroの実装について詳しく紹介します。
このトークで取り上げない内容として、Swift MacroのFreestanding MacroとAttached Macroのさらに細かい分類については触れません。さらに、コンパイル時間はどうなるのか、手作業でボイラープレートを書くほうがトータルでは効率良いこともあるのかないのか、などにも触れません。それらの話は、他のトークに期待したり、各種ドキュメントを参照していただくのが良いと思います。
私が今回話すのは、複数あるSwift Macroの実装方法のなかで、私が何を考えてそのようにしたのかだけです。このトークを通じて私の実装についてGitHub上でフィードバックしていただくことを目指しています。そのついでくらいに、みなさんのiOSアプリ開発の効率化にも何かしら役立てていただければ幸いです。
これまで、データが非同期に流れてくる処理には Delegate パターンなどが用いられてきました。また、Apple プラットフォームでは Combine といったフレームワークも使用されてきました。
これらのほとんどは、Swift 5.5 で追加された AsyncSequence を使用する方法へと移行できます。実際、Apple が提供するフレームワークでも、従来 Delegate パターンが用いられてきたような非同期にイベントを伝える API について、最近新規に追加されたものは AsyncSequence を採用しています。この AsyncSequence に移行することで、Swift Concurrency が持つアクター分離などのさまざまなメリットを享受できます。一方で、非同期なシーケンスならではのメモリリークにも注意が必要です。
このトークでは、AsyncSequence の基礎について簡単におさらいし、Delegate パターンからの移行方法、移行するメリットや注意点について、iOS アプリの具体例を用いながら詳しく紹介します。
Delegate、今までありがとう。これからは AsyncSequence でやっていくよ。
iOSアプリのアクセシビリティ対応は、全てのユーザーに高品質な体験を提供するために重要です。私自身、アクセシビリティ機能を使ってアプリを操作する機会がなく、開発中も必要だと感じていませんでした。しかし、ある方から「操作が難しい」と言われたことがきっかけとなり、考え方が変わりました。
本セッションでは、アクセシビリティの概要、必要性、そしてiOSが提供しているアクセシビリティ機能についてお話します。
また、アクセシビリティ対応を実際にアプリに適用する際の考え方や、開発者への情報共有の方法、フィードバックの活用についても私の経験を基にお話しします。提供しているアプリを万人に使ってもらいたい方や、後でアクセシビリティ対応が必要と言われて苦労したくない開発者の皆様にとって、このセッションが少しでもアクセシビリティについて考える機会になれば嬉しいです。
Swiftが公開され今年で10年目となったように、iOSアプリ開発も長い年月をかけて運営し開発を続けていく現代では、プロダクトにおけるテストコードの量も自然と大量になっているはずです。そのうえ大人数がプロジェクトに関わっているのなら、機能追加や不具合の修正に加えてテストコードも日々大量に増え続けていることでしょう。
そして現代のプロジェクトでは、新たに開発した機能や不具合の修正は既存の全てのテストコードが正常に成功しないとマージできないという開発のフローを採用しているはずです。そのような開発フローにおいて、意図せず稀に失敗するようなテストコードが紛れ込んでいると、自分が関与していない不安定なテストが自分の開発リズムに割り込んでくる厄介な状況が発生します。
さらには大量のテストコードが実行時間をかけた末に失敗してしまうと、各メンバーがスムーズに作業を進められず、開発時間が不要に伸び開発体験が低下してしまうのも問題です。
このトークでは、結果が不安定となるテストコードの原因を分類し、具体的な例を交えながら改善点について解説します。
また、Xcode 16で正式統合されそうなswift-testing
を活用することで、ある種の不安定なテストを解決できるのではないかという事についても話しができればと思います。
iOSアプリ開発は、サーバーサイドエンジニアやAndroidエンジニア、デザイナーやプロダクトマネージャーといった様々な役割のメンバーと一緒に進めることが多いですね。
しかし、iOSアプリ開発に軸足を置いている人からすると当たり前のことが伝わっていないことが多々あり、それが原因で協業しにくくなることがあります。
たとえば、アプリリリース時の審査プロセスです。審査プロセスがあること自体知らない人もいますし、存在は知っていても審査期間や審査結果のばらつきについては知らない人も多いです。
他にも、デザイナーに対してはSwiftUI事情や限界の話、プロダクトマネージャーに対してはOSサポート事情や段階的更新などリリース関連の話、サーバーサイドエンジニアに対してはAPIインターフェースや強制アップデート機構の話など、最初に認識を揃えておくとよさそうな話が意外と多いです。
このトークでは、そういった「iOSエンジニア以外にも知っておいてもらえるとよいiOSアプリの開発事情」についてまとめてお話します。社内にそのまま共有すれば、より認識が揃って仕事がしやすくなるような内容を目指します。
昨年度に入院することになり、入院中にトイレの時間と回数を記録をするように言われましたが、いい感じに記録できるアプリがありませんでした
ないときは自分で作ればいい!
ということで、手術までの時間に突貫でトイレ記録アプリを実装する入院アプリハッカソンを行いました!
せっかくなら自分だけでなく、自分以外の人にとっても使いやすいアプリを作りたいものです
そのため手術前の短時間で作ったものから、残りの入院期間や退院後の時間や別の入院期間でのドッグフーディングや他の人からのフィードバックを踏まえて、少しずつUX改善と機能追加を重ねていきました
この発表では今回のアプリ実装や経験をもとに、今後の展望や希望も含めた以下のUX改善のポイントについてお話しします
UX改善に決まった正解はないので、試行錯誤しながら少しずつ改善していくしかありません
今回の発表を通して皆さんの開発しているアプリやサービスのUX改善のヒントを掴んでいただければと思います!
2024年2月に Apple は Pkl (ピックル)をオープンソースで公開しました。
Pkl は豊富な検証機能とツールを備えた、コードとしての構成言語です。
Pkl をどのように使うのか、使うことで何ができるのかを解説します。
JSON、YAML、 Plist などの既存の構成言語とは異なるアプローチを探している方にとって、 Pkl が新たな選択肢にとなる可能性があります。ご興味のある方はぜひ聞いていただけると幸いです。
決済は、物理的な商品の購入を行うE-commerceアプリでは、必須かつ重要な機能です。
出前館アプリでも、決済機能はユーザにとって重要な機能として位置付けられています。
アプリ開発者として決済機能を運用する際は、アプリだけでなく、トランザクション処理全体の把握など、サービス全体を通じた知識が求められます。
また、近年の決済機能は、3D SecureやSMS認証などの多要素認証によって、よりセキュアに価値を提供することが求められています。
複雑な決済フローをユーザに認識齟齬なく継続的に提供するためには、バックエンドの処理に加えて、アプリで各種例外処理の考慮をするなど、様々な工夫を行う必要があります。
本発表では、決済機能の運用について、出前館アプリの決済機能の運用を例に、以下の話をします。
発表者は、出前館アプリの決済機能のアプリ開発・リードを経験する中で、決済機能の運用例には、複雑なシステムを運用するためのノウハウとして共通の学びがあると考え、本プロポーザルを提出しました。
決済に関わっている方に限らず、複雑なシステムをどう運用するか興味のある方など、本発表を聞いていただけますと幸いです。
オーディオビジュアライザーとは、音楽のリズムや振幅、周波数成分などを視覚的に表現したものです。音楽系のアプリを使ったことがある方なら一度は見たことがあるウニョウニョ動くカッコいいあれです。
本トークでは、音楽ファイルを読み込み再生しながら、リアルタイムで高速フーリエ変換を実行し、オーディオビジュアライザーを表示するまでの方法について紹介します。高校数学レベルの数学的知識とSwiftでのアプリ開発経験があることを前提として、Swiftで一歩踏み込んだ表現をしてみたい方を対象とします。
話すこと
FlutterはDartで実装するクロスプラットフォームのフレームワークです。
通常、Flutterプロジェクトは主にDartで開発されますが、既存のSwiftで書かれたiOSプロジェクトに対してadd-to-appアプローチを用いることで、Flutterを一部の画面に統合することも可能です。
また、ネイティブ機能を利用するためにSwiftの実装が求められることもあります。
iOSエンジニアとして、Flutterプロジェクトに参画した際にSwiftの最新技術を使いたくなることは多いでしょう。
そうした場合、最新のSwift機能を利用できるのかを知りたくなるのではないでしょうか?
本セッションでは、特にSwift Package Manager (SwiftPM)とSwift 6の新機能に焦点を当て、Flutterプロジェクトにおける現状と今後の展望について詳しく解説します。
【話す内容】
Dive into the world of visionOS and discover how it can revolutionize AR development with a step-by-step guide to creating a dice app, which can roll dices with the users' gesture. In this session, you'll learn how to use SwiftUI, RealityKit, ImmersiveView and more to build an interactive and visually stunning application. I will cover everything from initial setup and design principles to advanced features like gesture recognition and real-time entity updates. By the end of the talk, you'll be equipped to push the boundaries of AR and create immersive experiences that captivate users.
iOS/iPadOS向けにアプリ開発を行う際に、「ViewController」を意識しないことはほぼないのではないでしょうか?
iOS 2.0の「UIViewController」を皮切りに、様々なViewControllerが提供されてきました。
私たちはこれらを実装し、カスタマイズして利用してきたかと思います。
では、これまでどれだけのViewControllerが登場し、どのような機能が実装可能になったのでしょうか?
このセッションでは、これまでに登場したViewControllerを機能紹介とサンプルコードとともに振り返ります。
想定する方々:
・iOS/iPadOS、それら以外のプラットフォーム向けアプリ開発・企画者
ゴール:
・知らなかったViewControllerを知り、今後の参考にできる
・提供できる画面・機能の概要を把握できる
アジェンダ:
※対象は「UIViewController」または「UINavigationController」を継承したクラス
エンジニアとして、私たちは日々多岐にわたる知識やスキルを学び、さまざまな問題を解決しています。たとえば、開発する機能の仕様やドメインの知識、プログラミング言語やライブラリの使い方など、多方面にわたる学習が必要です。これらの学習を積み重ねることで、より複雑な問題にも対処できるようになり、スキルアップも図れます。
しかし、学習には時間と労力がかかります。集中力や注意力も不可欠で、「覚えることが多くて大変だ…」「なかなか身に付かない…」と悩んだり挫折したりすることもあるでしょう。もしかしたら、それは学習方法が原因かもしれません。
効率よく学習を進めるためには、脳の仕組みを理解し、それに合わせた方法を取ることが重要です。本セッションでは、以下の点に焦点を当てます。
これらのトピックを中心に、技術的なスキルの習得に焦点を当て、今後の学習に活かせる考え方や方法を皆さまと共に探ります。
「業務で必要だから」「キャリアアップのため」「おもしろそう」など、学習理由は人それぞれ異なりますが、一つスキルが身に付くとさらに新しいスキルが身に付きやすくなり、世界がどんどん広がります。
このセッションを通じて、皆さまが日々の学習において具体的な改善策を見つけ、より効率的にスキルを身につける手助けができれば幸いです。