レギュラートーク(20分)

VIPERプロジェクトのUIKitからSwiftUIへの移行

spycwolf spyc

みなさんの会社ではUIKitからSwiftUIへの移行をどのように進めていますか?
また、移行の際に既存のシステムアーキテクチャをどう扱えば良いか悩んでいる方も多いのではないでしょうか。

私たちのiOSアプリ「note」では、VIPERというアーキテクチャを採用しています。
VIPERはiOSアプリ開発にクリーンアーキテクチャの一種で、View、Interactor、Presenter、 Entitiy、 Routingなどに責務を分割するアーキテクチャです。

本セッションでは、noteのiOSアプリにおいて、UIKitからSwiftUIへの移行した際、どのようにVIPERアーキテクチャと向き合っていったかを共有します。

  1. SwiftUIにおけるVIPERアーキテクチャ採用の理由
  2. Viewレイヤー以外の変更点
  3. 移行時の課題とその対処方法

多くの現場でUIKitからSwiftUIへの移行が進んでいるかと思いますが、このセッションでは実務で得た具体的なノウハウをお伝えし、皆様のプロジェクトに役立てていただければと思います。

6
レギュラートーク(20分)

TextKit 2でテキスト操作の限界に挑む!

0si43

WWDC21でTextKit 2が発表されました。NSTextLayoutManagerを中心とした新しいテキスト操作へのアプローチは無限の可能性を感じさせた一方で、その実用には多くの困難が伴います。本セッションではそんなTextKit 2を使うことで、テキストとレイアウトの柔軟な関係を実現し、テキスト操作の限界に挑みます。

4
レギュラートーク(20分)

iOSアプリ開発者のためのCompose Multiplatform入門

spycwolf spyc

Compose MultiplatformはiOS、Android、Desktopアプリ間でUIコードを共有できる宣言的UIフレームワークです。
これまでKotlin Multiplatformというクロスプラットフォームのフレームワークが存在しましたが、UIコードの共有はできませんでした。

しかし、Compose Multiplatformが登場により、この制約が解消されました。
Jetpack ComposeはAndroid開発向けの宣言的UIフレームワークですが、Compose Multiplatformを使うことで、同じUIコードをiOSアプリにも適用できます。

本セッションでは、以下の内容について解説します。

  1. Compose MultiplatformとJetpack Composeの違いと連携方法
  2. Compose Multiplatformプロジェクトの構築とiOS/Androidコンポーネントの共有
  3. 実装デモと導入時の課題および対処法

Jetpack ComposeとCompose Multiplatformのノウハウを身につけることで、効率的なクロスプラットフォーム開発が実現します。
iOS/Androidの垣根を越えた開発を目指す方の参考になればと思います。

4
レギュラートーク(20分)

マスタリング キーボードショートカット

0si43

iOSアプリでキーボードショートカットに対応するケースは多くありません。しかし、あなたのアプリがiPadで使用でき、長文のテキスト入力が必要な場合、キーボードショートカットを実装することで操作性が向上します。iOSアプリでは UIKeyCommand を使用することで、カスタムのキーボードショートカットを作成できます。
本セッションでは、あまり知見が知られていないキーボードショートカットについて深く掘り下げます。

3
レギュラートーク(20分)

iOSアプリのネットワークエラーを適切に扱う

0si43

モバイルアプリ開発において、ネットワークエラーは当然想定しなければならないエラーです。ただネットワークエラーになった場合にアプリとして対処できることは「回線の復旧を待ってリトライ」であることがほとんどであり、正直雑に処理しているケースがほとんどではないでしょうか?
しかしネットワークエラーの適切なハンドリングによって、更なるUI/UXの向上が実現できるかもしれません。たとえば、YouTubeアプリはオフライン状態を検知した場合、アプリ内のダウンロード済動画への導線を表示するプレミアムユーザー向け機能があります。
本セッションでは、ネットワークエラーを適切に扱うための考え方と、実際の対応方法について話します。
具体的には以下の内容を扱います。

  • ネットワークエラーのハンドリング方針
  • URLSessionのタイムアウト関連設定
  • NWPathMonitorの通信監視
3
レギュラートーク(20分)

Xcode Cloud時代の自動化戦略

watura watura

note社では自動化に力をいれ、リリースフローを大幅にカイゼンしました。
具体的には、SlackからAppStoreConnectやTestFlightへの登録、リリースブランチの作成、メンテナンスやリリースノートの作成を自動化しました。
さらに、CI/CDを全面的にXcode Cloudに移行することで、煩雑だった証明書やプロビジョニングプロファイルの管理からも開放されました。
本トークではエンジニアがエンジニアリングに注力するために、実施した自動化とCI/CD最適化とそのポイントを紹介します。

[内容]

  • App Store Connect API の活用方法
  • Slack Slash Command を利用したApp Store Connect/TestFlightに登録方法
  • リリースブランチ、リリースノート自動生成
  • Xcode Cloud 全面移行とそれに伴う注意点
  • Xcode CloudでSnapShot TestingやMagicPodの利用
5
レギュラートーク(20分)

エンジニアへの新たな軌跡(奇跡): 30代からの挑戦と持続可能な成長

akkiee76 Akihiko Sato

201x年、30代前半未経験のおじさんエンジニアが誕生しました。

もともと趣味の個人開発でアプリを作成していましたが、とあるきっかけでカジュアルゲームのiOSアプリ開発を手伝うことになりました。振り返ると当時の自分にとっては、変数名を大文字で宣言する、似たようなViewControllerを大量生産する、脳死コピペで実装するといった初歩的なエンジニアリングのミスは日常茶飯でした。

しかし、開発していたアプリが無料ランキングで1位になったことで転機が訪れました。その後、Android、フロントエンド、バックエンド開発、プロジェクトマネジメントと業務領域を広げ、転職を繰り返しながら今に至ることができました。

では、どうして今日に至るまで成長し続けることができたのでしょうか。このセッションでは、これまで取り組んできた学習方法を中心に、持続可能な成長方法を詳しく紹介します。

【このセッションで紹介する主なトピック】

  • 私のキャリアの歩み
  • 個人開発時代の学習方法
  • キャリア形成の考え方
  • 効果的な学習方法
  • 挑戦を続けるためのマインドセット
  • 「Connecting the dots」のエピソード

このセッションが皆さんのキャリアのサポートとなることを願っています。

Nothing is too late to start !

1
レギュラートーク(20分)

CICD環境との付き合い方:CICD導入からアプリの大規模Replaceに伴うCICD移行までの4年間の軌跡

taka1068 Takanori Hirobe

アプリ開発においてCICD環境はなくてはならない存在です。エンジニアの開発生産性向上、そしてエンドユーザへ良いプロダクトを届け続けることなどはその導入目的となるでしょう。
アプリのCICD環境を構築する方法はさまざまあります。自前でビルドサーバを用意する方法、そして数多あるSaaSの中でチームや組織に合うサービスを選択することも良い方法です。

本セッションでは株式会社出前館が提供するエンドユーザ向けアプリ出前館アプリにおけるCICD環境(bitrise)の導入、React NativeからFlutterへの移行に伴う改修、そして新たなCICD環境(Teamcity)への移行についてお話します。4年間という短い期間にこれだけの取り組みをしてきたチームは少ないと自負しており、その苦労と葛藤について共有します。

CICD環境はチームや組織の事情、そしてプロダクトなどさまざまな要素の影響を受けます。本セッションを通して、これらの変化に柔軟に対応しつつ、CICD環境と付き合う術を共有できれば幸いです。

4
レギュラートーク(20分)

lim PWA=ネイティブアプリ? PWAの可能性と限界を探る

base_front matsue

iOS 16.4 からPWA(Progressive Web Apps)にリモートプッシュ通知を送ることが出来るようになりました。

これによって、PWAとネイティブアプリの大きな差の一つが無くなったことになります。

そこで今回は iOS上のPWAで出来ることを振り返りつつ、どこまでネイティブアプリに近づけられるかを検証します。

このセッションを通して、PWAの可能性と限界を理解しつつ、ネイティブアプリでサービスを提供する意味を考えていければと思います。

2
レギュラートーク(20分)

お疲れ様! Firebase Dynamic Links! お別れの日に備えよう!

hiroaki_iOS hiroaki

2025年8月25日にFirebase Dynamic Links(以降 FDL)サービスが終了を迎えます。
本発表では、FDLとお別れをする方法などについて、いくつかの方法を提案させていただきます。

本発表は以下に該当する方に参考にしていただければと思っています。

  • 対応を考えたいがどうしたら良いかわからない方
  • 自前で実装を考えている方

本発表では以下の内容で説明します。

  1. FDLの機能のおさらい
  2. FDLの移行手段
    • 外部サービスを使用する
    • 自前実装を行う
  3. 自前実装を選択をした場合に必要な技術のおさらい
    • iOSのUniversal Links機能
    • App Storeを用いた流入元計測
    • Deferred DeepLinks
  4. FDLの用途ごとの自前実装構成プランの提案
    • 特定のリンクからアプリを起動する場合(アプリがない場合はWebページを開く)の構成
    • アプリがない場合にストア遷移をする場合の構成
    • ショートリンクを用いた際の構成
    • Deferred DeepLinksを使用する場合の構成
8
レギュラートーク(20分)

グラフ実装の選択肢!Swift ChartsとDGChartsのどちらを使うべきか?

yamakentoc yamaken

現在、iOSでグラフを実装するには様々な選択肢があります。WWDC22ではSwift ChartsというApple公式のframeworkが公開されましたが、それまでは多くのプロダクトがDGCharts(旧Charts)というサードパーティ製のライブラリを使用していました。WWDC23ではSwift Chartsにアップデートが加えられましたが、DGChartsも引き続きアップデートされています。

では、今グラフを実装するならSwift ChartsとDGChartsのどちらを選ぶべきでしょうか?
このトークでは、Swift ChartsとDGChartsの性能を比較して、どちらを使うべきかを検討します。

具体的には以下の内容について比較・検討します。

  • 基本機能とグラフの種類
  • グラフの見た目や機能のカスタマイズ性
  • 各ツールで同じグラフを実装する際の難易度
  • 大規模データセットを利用した場合のパフォーマンス

また、Swift ChartsとDGChartsの基礎についても学ぶことができるため、事前知識がなくても聞くことができます。
このトークに参加してSwift ChartsとDGChartsの違いを深く理解し、あなたのプロジェクトに最適なグラフツールを一緒に探してみませんか?

4
採択
2024/08/23 10:50〜
Track C
レギュラートーク(20分)

メインスレッドをブロックさせないためのSwift Concurrencyクイズ

tokizuoh tokizo

Swift 5.5のリリースから早3年、Swift Concurrencyは日々の開発に普及しつつあります。非同期処理を手軽に扱えるようになりましたが、あなたの実装には大きな落とし穴があるかもしれません!

アプリケーション開発において、メインスレッドの健全性はユーザー体験を左右する重要な要素です。メインスレッドがブロックされると、UIの遅延やフリーズが発生し、ユーザーにとってストレスフルな体験となります。
このトークでは、Swift Concurrencyを使った非同期処理におけるメインスレッドのブロックリスクを見極めるため、クイズ形式で知識を深めます。

以下のトピックを扱ったクイズを出題します。

  • TaskとDetached taskの違い
  • Global actorの継承
  • Actor contextの継承
  • Suspension pointの概念
  • Witness tableの概念
レギュラートーク(20分)

大解剖!Flutter での iOS UI 表現方法を学ぶ!

ry_itto 伊藤凌也

内容

最近採用されることが多くなってきたUIフレームワークFlutterですが、そのFlutterでiOSのUIをどう実現しているかご存知でしょうか? FlutterでのiOSのUIの実現は、実は独自に描画されたもので、全てがiOS標準のUIをそのまま使っているわけではありません。

このセッションでは、そんなFlutterでのiOSのUIの実現方法について、Flutterの描画エンジンの話から実際のFlutterのソースコードを追いながら説明していきます。

このセッションは以下のような流れで行います。

  1. Flutterとは?概要と描画エンジンについて
  2. Flutter本体のソースコードを追ってみる
  3. Flutterで作られたiOSのUIと本来のUIの比較
  4. iOSネイティブのUIをFlutterで使うには
  5. FlutterでのiOS UI実現の現状の課題感

対象

  • Flutter に興味がある方
  • Flutter で iOS の UI がどのように実現されているか気になる方
採択
2024/08/22 18:45〜
Track B
レギュラートーク(20分)

watchOS 最前線 〜現代のApple Watch向けアプリの作り方〜

kouki_dan kouki_dan

2023年秋に公開されたwatchOS 10では、Apple Watchのインターフェースが大きく変わり、TabViewやNavigationStackなどのUI/UXが大幅に変化しました。
このセッションでは、SwiftUI、WidgetKit、Live ActivityなどのiOSにおける一般的な技術要素をApple Watchでどのように適用していくべきかを体系的に学びます。特に、より使いやすくなったwatchOS 10のアプリ開発における重要なトピックを深掘りします。

また、ComplicationやスマートスタックがApple Watch上でどのように動作するかについても詳しく解説します。

このセッションをご覧いただくことで、iOSエンジニアがApple Watchアプリの開発を始めるための基礎知識を得ることができます。これまでの知識を他のAppleプラットフォームに応用し、スキルの幅を広げる最初の一歩を踏み出しましょう。

レギュラートーク(20分)

Export Privacy Reports: Common Errors and Hidden Rare Error Fixes

kent_strong_dev Kent Strong

Unlock the secrets of exporting privacy reports in Xcode.

A privacy report in iOS development refers to a detailed document that outlines how an app collects, uses, and shares user data.

This session covers typical errors you might encounter and also introduces a rare error uncovered by the speaker which is not written on the internet. You would be in trouble if you needed to handle it on your own. But don't worry! Gain a competitive edge by mastering these troubleshooting strategies, ensuring your iOS apps remain compliant with privacy standards. Don’t miss out on these essential insights!

1
レギュラートーク(20分)

App Store Connect APIを使った業務改善

iseebi Nobuhiro Ito

iOSアプリをテストしたりリリースする際に、皆さんはApp Store Connectを頻繁に使用していると思います。App Store Connectは主に人が操作するWebシステムですが、App Store Connect APIを使用することで多くの操作を自動化することが可能です。
レポーティングやアプリ内課金の操作や、Fastlaneを使った操作ではお使いの方も多いかと思いますが、申請やTestFlight、メンバー管理など多くの操作を自動化でき、ちょっとした調査にも便利に使えることをご存知でしょうか。
このセッションでは、実際の開発チームにおいて行ったTestFlightや申請業務の業務効率化の例を通じて、App Store Connect APIの使い方や、簡単に試す方法をご紹介します。

5
レギュラートーク(20分)

理論から実践へ:チームで実践するSwift Concurrencyの導入

akkiee76 Akihiko Sato

皆さんのプロジェクトでは、Swift Concurrencyの導入は進んでいますか?

ここ1年で、iOS 15のサポートを終了するアプリも増えており、Swift Concurrencyの導入が本格化しています。現場でのSwift Concurrency移行時には、複雑なBlock構文、レガシーライブラリからの脱却やRealmのスレッド移行に苦労しましたが、その過程で多くの知見を得ることができました。

このセッションでは、既存アプリの非同期実装をSwift Concurrencyに移行する方法や、チームで効率的に移行しリリースする方法に焦点を当て、その手法を詳しく紹介します。

【主なトピック】

  • Swift Concurrency導入の実践例
  • Swift Concurrency導入時の注意点とその回避方法
  • Strict Concurrency Checkingの適切な設定方法
  • 導入作業をチームタスクとして定量化する方法
  • リスクを抑えたリリース方法

将来的なSwift 6への移行に備えて、この機会にSwift Concurrencyに移行しましょう!

5
レギュラートーク(20分)

既存の実プロダクトにおけるSwift Concurrency導入事例

rikusouda 吉岡 祐樹

Swift Concurrencyは、非同期処理を便利にするSwiftの機能です。iOSアプリ開発においてゼロからの開発でこの機能を利用する場合は比較的スムーズに導入できますが、既存のアプリに導入する際にはさまざまな課題が発生します。我々のチームでは、開発効率向上を目指し、すでにリリースされているアプリにSwift Concurrencyを全面的に導入しました。

まず、API通信のような非同期で結果が返る処理をasync/awaitに変換することから始めました。具体的には、従来のCombineのAnyPublisherを戻り値としていた非同期処理をasync関数に置き換えました。次に、UI更新以外の処理をなるべくメインスレッド以外で実行する試みを行いました。例えば、データの読み込みや保存といったI/O操作をバックグラウンドスレッドで実行するように変更しました。

さらに、SWIFT_STRICT_CONCURRENCYオプションを有効にすることで、コンパイル時に非同期処理に関する潜在的な問題を発見し、修正することができました。

本トークでは、導入ステップの具体的な手順の紹介や、導入途中で遭遇した問題とその解決策、そして私たちのチームが採用したSwift Concurrencyの利用方針について詳細に説明します。また、導入後に得られた効果やメリットについてもお話しします。

6
レギュラートーク(20分)

Mastering iOS SDK Distribution: Makes you a professional engineer

kent_strong_dev Kent Strong

Join us for an in-depth exploration of advanced methodologies for distributing iOS SDKs. From Swift Package Manager to XCFrameworks, learn how to leverage these tools to simplify your development process and ensure seamless integration. SDK distribution skills are a key factor in making you a more exceptional engineer than your colleagues. Gain insights into the pros and cons of each method, real-world use cases, and tips for optimizing your workflow. This session is designed for iOS engineers aiming to elevate their expertise and adopt industry-leading practices in SDK distribution.

採択
2024/08/24 15:05〜
Track D
レギュラートーク(20分)

Concurrency Safe SwiftData - SwiftDataの並行安全な使い方

himeshi_tech ひめし

SwiftDataはCore Dataの後継としてリリースされたAppleの新しいデータ永続化フレームワークです。SwiftDataはCore Dataよりもはるかに簡単で安全に使うことができますが、Swift Concurrencyとともに利用する際はデータ競合に注意が必要です。これは、SwiftDataがCore Dataの上に構築されたAPIであるためです。

そこで本トークでは、SwiftDataをSwift Concurrencyと共に安全に扱う方法を解説します。SwiftDataをこれから利用する方やCore DataでConcurrencyの扱いに苦労した経験を持つ方を主な対象とします。SwiftDataの技術スタックをSwift Concurrencyの観点およびSwiftDataの元であるCore Dataの観点から解説し、SwiftDataを並行安全に扱うための原則、ならびにコーディングにおけるベストプラクティスを紹介します。

本トークによって、参加者の皆さまはSwiftDataをより自信を持って扱えるようになるでしょう。