[はじめに]
UIKitで作られた画面や既存機能をSwiftUI化する際に、
GeometryReaderや描画パフォーマンス、イベントの伝搬・連携、状態管理などで困った経験はありませんか?
この問題と正面からぶつかり、誰でも再現可能なシンプルなI/Fでコンポーネント化した経験を踏まえたお話をさせてください。
※Introspectなどのライブラリは未使用
[背景]
10年続く弊社プロダクトでは、InterfaceBuilderを使ったフリックカードの構成が限界を迎えていました。
「施策に追従するための実装コスト」や「AIを使った最適化」のハードルはエベレスト級で、
若手の多い弊チームでは尚更難易度が高いものとなっていました。
[主題]
このトークセッションでは、主に次の2点についてお話しします。
①設計について
②SwiftUIについて
などなど..数ヶ月以上に渡る壮絶なバトルについて、色濃くお話しできたらと思います。
よろしくお願いいたします!
本発表ではAgoraを用いた1on1ビデオ通話機能の開発について、その実装方法と品質向上への取り組みを紹介します。
Agoraの基本的な使い方について紹介し、iOSアプリからAgora機能の呼び出し方、映像のViewへの出力などのビデオ通話機能の実装について解説します。
特に、通信環境の不安定さが品質に及ぼす影響と、それをどのように克服するかに焦点を当てます。具体的には、AgoraAPIを活用して通信品質を最適化する方法を紹介します。
さらに、ビデオ通話中に他の作業を同時に行うためのPicture in Picture(PiP)機能の導入についても触れます。PiP機能を利用することで、ユーザーエクスペリエンスを向上させるとともに、作業効率を上げることが可能となります。
このプレゼンテーションを通じて、ビデオ通話機能の開発に関心がある方々に、具体的な開発方法と品質向上への取り組みを理解していただき、それを自身のプロジェクトに活かしていただければ幸いです。
App Store Review Guidelinesは長くて難解だと感じている方はいませんか?この5分のライトニングトークでは、一緒に最新のガイドラインを解読し、重要な変更点を理解しましょう!
このトークでは、以下のポイントに焦点を当てます。
このトークに参加することで、App Review Guidelinesの最新情報を把握し、アプリ開発におけるリスクを軽減する方法を学べます。ぜひ、一緒にApp Review Guidelinesを理解しましょう!
皆さん、Swift 6.0のリリースに向けた対応は順調ですか?
年数が経ち肥大化していったプロジェクトや、開発速度の要求が高いプロジェクトほど、対応が難しい課題だと思います。
私たちのプロジェクトであるタップルは、3000以上のファイルと24万行以上のコードからなる11年目の大規模サービスです。
完全に対応が完了したわけではありませんが、日々の対応を進めることで、Strict Concurrency Checkingを
まで前進させることができました。
本トークでは、大規模なコードベースでどのように段階的に取り組んでいくかについて以下の事例をお話しします。
また、下記の組織としての取り組み方についても触れ、皆さんのプロジェクトでどのように推進していけば良いかについての知見を提供します。
皆さん自動テストやアプリ配布の待ち時間に満足していますか?
その待ち時間をいかに短縮するか?がやはりCI/CD上でのキャッシュ戦略だと思います。
また、今日様々なCI/CDサービスがある中でも、ライブラリ管理やビルド環境の組み合わせは限定されており、
キャッシュ可能なポイントはある程度絞られています。
本トークでは、以下のポイントを含む幅広いユースケースで有効なCI/CD上でのキャッシュポイントとその方法について、5分間で紹介します。
これらの情報を通じて、明日からあなたのCI/CDの実行時間が一分一秒でも短くなる知識を提供します。
アプリを取り巻く要件の中にはUIデザイン、機能仕様、リリース要件などさまざまなものがあります。この中でもリリース要件は選択肢が少ないため、自由度がかなり低いと言えます。
そんなリリース要件の中で、限定されたユーザーにだけアプリを配布し、利用できる仕組みが必要な場合があります。そんな要件を受けたときに、どのような選択肢があるでしょうか?
Firebase App Distribution、TestFlight、Apple Business Manager など、さまざまな手法がありますが、私の所属するチームでは、その中でも Unlisted App Distribution を採用しました。
このセッションでは、数ある手法の中からUnlisted App Distributionを選択するに至った経緯と、他の配信方法との比較検討の結果についてお話しします。また、Unlisted App Distributionを選択した際に気をつけるべき点についても詳しく説明します。
みなさん、認証機能のエラーハンドリングはどのように行っていますか?
近年のアプリの認証機能は、自社のサーバーだけでなく、Firebase Authorizationなどの認証系SaaSを活用していたり、Apple、Google、LINEといったSNSアカウントを利用した外部システムと連携したものがほとんどだと思います。
それに伴い、私たちがハンドリングしなければならないエラーの種類はどんどん増えており、
といった課題があります。
本トークでは、タップルが認証機能を刷新する中でおよそ140ものエラーを分類し向き合った経験をもとに、
上の句、下の句を扱う百人一首のように
を “問題解決までのスピード” に着目してお話しします。
本トークを通じて、いままで雰囲気で扱っていたエラー分類への解像度が上がることで、
皆さんのサービスでユーザーが自己解決できる認証エラーが増え、認証の突破率やユーザーの獲得数が増加すること、そして今まで時間を使っていた不具合調査の時間が短縮されることを目指します。
SwiftUIでSwift Package Manager(SPM)を使用したマルチモジュールプロジェクトにおいて、循環参照を回避するための依存関係解決方法を紹介します。本LTは、循環参照の問題にフォーカスし、具体的かつシンプルな解決策をお伝えすることを目指しています。
具体的には、以下の構成でトークします。
依存関係解決にお悩みのそこのあなた、即実践可能な解決策をお届けします。
みなさんは iOS 6時代のデザインをご存知ですか?ーーあるいは、覚えていますか?
最も特徴的だったのは、光沢のある美しいガラス箱のようなアプリアイコンではないでしょうか。
しかし、iOS 7を境にフラットデザインへと移行し、アイコンを含むあらゆる外観が一新されました。
それでも、「過度に単純化」される前のデザインは、今なお忘れがたい輝きを放っています。
本セッションでは、iOS 6が主流だった2012年版と現行の2024年版のHuman Interface Guideline (HIG) を比較し、デザイン思想の違いについて探ります。
美的完成度に一貫性、数々のコントロールーー
スキューモーフィズムに彩られたデザインがどのように生まれ、今どう変化したのかをHIGや関連資料を用いて辿っていきます。
といっても、デザイン哲学を40分で説明するのは無謀ですから、今回のトークはiOSインターフェースデザインの本質に少し近づく程度になるでしょう。
とはいえ、現代の「フラットなデザイン」の価値を再認識し、未来のデザインの方向性を見据える機会になりうると信じています。
今とは異なる美学と思想を持つリッチなデザインは、すでに過去のものであるとは言え、iOSの進歩の過程で生まれたかけがえのないものです。
過去や現在のiOSデザインに少しでも興味がありましたら、ぜひ本トークにお越しください。
Apple Vision Proで空間ビデオを見るのは、まるでその場にいるかのようなリアルで素晴らしい体験です。この空間ビデオの記録にはMV-HEVC(Multiview High Efficiency Video Coding)という規格が用いられています。「Multiview」とは左右の目それぞれのフレームを指し、視差まで再現できるため、平面的なディスプレイにはないリアルさを感じられるようになっています。
では、どのように撮影を行えば良いのでしょうか?配信時に注意すべき点は?さらに、Vision Pro以外のユーザーにはどのように対応するのでしょうか?本トークではこれらの疑問に答えつつ、MV-HEVCに焦点を当て、この規格を理解し、空間ビデオの持つポテンシャルと具体的な活用方法について考察します。
規格自体のリリースは2014年と古く、両目の視差を利用した立体視に関してはさらに前から研究が行われており、ステレオスコピック動画の撮影のコツや、どんな表現に向いているのかについてはそれらを参考にできます。AVFoundationとVideoToolboxのAPIを使って2台のカメラで撮った動画から空間ビデオを作成する方法も紹介します。
このトークが、空間ビデオを活用した新しい魅力的な体験を構築する一助となれば、非常に嬉しく思います。
SwiftUIの登場によって、画面のStateを使ってUIを構築するState-Drivenなアプローチが可能になりました。
クライアントでは、バックエンドからいくつかのAPIをコールし、それらを組み合わせて画面のStateを構成し、SwiftUIのViewに渡すことでUIを表示することができます。
では、画面に一つのAPIで画面のStateをそのまま受け取れる場合、クライアント側にはどのようなロジックが残るでしょうか?
if文やSwitch文のような分岐を持たないアプリは実現できるのでしょうか?
本トークでは、BFF(Backend for Frontend)と呼ばれるクライアント用の中間サーバーを活用し、
可能な限りロジックをバックエンドに寄せたServer-DrivenなUI構築を実務で取り組んだ経験を通して
といった、クライアントが可能な限りプレゼンテーションロジック以外を持たない構成とその活用について紹介します。
さらに、本トークでは実際にBFFの導入が難しい方に対しても、極端な事例を通じて
といった疑問への一つの指針を提供します。
手塩にかけて育てたミュージックライブラリがぶっ壊れた経験はありますか?私はあります。
5年前、OSX Catalinaの登場時にiTunesが廃止され機能ごとにアプリが分かれました。
その後、新しいミュージックアプリでは様々な問題が起こりました。
(※全部筆者が経験したことです)
万単位にのぼる楽曲を1個1個精査して正しい状態に復旧するのは当然ながら非現実的です。
更にミュージックアプリの使い勝手の悪さも相まって泣き寝入りを余儀なくされました。
ですが、そこに救世主が現れました。そう、 ScriptingBridge
です。
しかし ScriptingBridge
はObjective-CがベースなのでSwiftで扱うには一工夫が必要です。
本セッションでは、macで他アプリケーションと連携するための仕組みである ScriptingBridge
をSwiftのみで扱う方法と、それを使ってミュージックライブラリから楽曲情報を取得・編集する方法を紹介します。
また、壊れた楽曲情報を半自動で復旧する為のガワとしてNowPlayingアプリを実装した話をします。
開発には失敗がつきものです。突然障害が発生したり、施策がうまくいかなかったりします。
そこで同じ過ちを繰り返さないように、失敗を振り返ってまとめることが重要です。
しかし、以下のような問題に直面したことはないでしょうか?
失敗の振り返りが重要だとわかっていても、失敗を伝えることも理解することも難しいと感じることが多くあります。
本セッションでは、「失敗学」について紹介し、実際のプロジェクトで経験した事例を題材に「失敗の伝達に必要な記述」についても具体例を交えながら解説します。
SwiftUIが登場してからおよそ5年が経ちましたが、複雑なレイアウトを表現する場面では、依然としてUICollectionViewが力強い味方です。
特に、Compositional LayoutとDiffable DataSourceの導入により、App Storeのような複雑なレイアウトも簡潔に、かつ容易に実装することが可能になりました。
セクションの順番さえ決まっていれば、その特定のセクションに対してアイテムのグルーピング方法を適切に指定するだけで、複雑なレイアウトを表現することができます。
しかし、セクションが不定の場合はどうでしょうか?たとえば、セクションによっては大きな単体のCellを表示したり、複数のCellを横方向に並べてスクロールさせたいが、その順序がサーバーサイドの都合により変化するような場合です。
UICollectionViewCompositionalLayoutでは、セクションに対して直接表現方法を指定するため、順序が不定では実現が難しいかと思われがちです。
しかし、セクションのenumに一工夫することで、このような動的なレイアウト生成も実現することができました。
本セッションでは、このように「受け取るデータの種類によってCellを自由に出し分ける必要がある場面」での、我々の成功パターンについてお話しします。
iOSアプリで動画を作成したことはありますか?
難しそうに思える画像生成や動画生成も順を追って理解していくことで意外とできるようになるものです
このトークではクライアント側での動画生成を試してみた経緯とそこで学んだ実際の動画の演出などについてお話しします。
このトークを通じて、AVAssetWriterを使った簡単な動画生成の流れとCore Graphicsを使ったレンダリングの基本を学ぶことができます。
SwiftDataを使用して1:Nの親子関係のモデルをPreviewする際にエラーが発生した経験はありませんか?本トークでは、SwiftDataを用いたモックデータの実装方法について解説します。
SwiftDataの基本概念: SwiftDataの基本的な使い方と、1:Nの親子関係のモデルの定義方法について説明します。
モックデータの作成方法: Preview用のモックデータを作成するための具体的な手法を紹介します。
皆さんもご存知の通りXcodeにはショートカットがあります。
タブの移動、ビルド、コンソールの表示/非表示、シミュレータの選択、カーソルの移動などなど…。
いちいちトラックパッドやマウスまで手を動かさなくてもキーボードだけで完結できるのではないかと思えるほど多様です。
手間を減らすだけでなく、Xcodeの機能を深く知るきっかけにもなります。
そんな素敵なショートカットを時間の限り紹介します。
タップルでは、毎年最新技術への対応とセキュリティ向上を目的に、一定の閾値を任意の数値が下回った場合、下位iOSバージョンのサポートを終了してきました。
しかし、iOS15のサポートを終了すると、iOS16にアップデートできない端末が複数あるため、アプリが使用できなくなるユーザが発生してしまいます。
都度課金でもなくフリーミアムでもない、課金ユーザからの売り上げがほとんどを占めているタップルにとって、iOS15のサポート終了は"売り上げに大きく関わる"決断です。
当然ビジネスチームからは、「売上に大きな影響が出るのでは?」という懸念が出ました。
今回私たちは、ビジネスチームと一方的に対立するのではなく、ユーザの利益、会社の利益、そしてiOSチームの利益のバランスを考えながら、適切な決断を行うために協力しました。
本LTでは、我々がどのようにビジネスチームや分析チームとコミュニケーションを行ったのか、また、その過程でどのような解決策を提案し、どのようにしてiOS15のサポートを終了するに至ったのかをお伝えします。
目次
iPhoneの進化により、位置測定技術は著しく向上しています。
GPSをはじめ、Wi-Fi、Bluetooth、そしてLiDARを利用した位置測定機能が搭載されています。 しかし、GPSは屋内で正確に計測することが難しく、Bluetoothは事前に機器の設置が必要です。LiDARなどの深度センサーはレーザー光を飛ばして反射光を計測するため、センサーを常に外部に向けておく必要があります。
今回は、これらの外部信号を用いずに、iPhone内蔵のジャイロセンサーと加速度センサーのみを使用して位置測定と距離測定を行う方法についてお話しします。 具体的には、xyz方向の3軸加速度データと3軸角速度データを用いて位置測定を行います。
このトークでは、以下の内容について詳しく説明します。
特に測定誤差に関する部分では、実際に計測をしたところ、大きな測定誤差が発生して大変苦戦しました。 どのような誤差が発生したか、そしてそれにどのように対処したかについて具体的な事例を交えて説明します。 これにより、同様の技術を利用しようと考えている方々にとって有益な情報を提供できると思います。
あなたのアプリは本当に安全に作られていますか?
Webアプリに比べて、おろそかになりがちなネイティブアプリのセキュリティ。
脆弱性診断を行うセキュリティエンジニアは、セキュリティに関するオンラインコミュニティ「OWASP」が発行する検証基準「MASVS」などをもとに、脆弱性診断を行っています。
また、彼らは、開発者が特に気をつけるべきセキュリティリスクを「OWASP Mobile Top10」として公開しており、これらを理解することは、セキュアなアプリケーション開発を行ううえで非常に重要です。
このセッションでは、実際にiOSアプリの脆弱性診断を行っている筆者が、OWASP Mobile Top10の中から特によく見かける脆弱性を紹介します。
そのうえで、それらに対する対策方法を解説し、各種脆弱性への理解を深めることを目的とします。