ルーキーズLT(5分)

Flutterでもネイティブアプリだと思われたい

touyou_dev 藤井陽介

Flutterは、単一のコードベースでiOSとAndroidの両方に対応するアプリを作成できるクロスプラットフォームフレームワークです。しかし、ネイティブアプリと比較すると、ユーザーエクスペリエンスやパフォーマンスに違いが生じることがあります。

多くの開発者はデザインを一つに統一して省エネを図るかもしれませんが、iOSネイティブの魅力に惚れ込んでいる自分としては、できる限りiOSネイティブに近づけたいと思っています。

このセッションでは、FlutterでiOSとAndroidのネイティブ感をどのように演出するかについて具体的な例を用いて説明します。具体的には、それぞれのプラットフォームに適応したウィジェットの作成方法や、プラットフォームチャネルを使ったネイティブコードの統合方法などを取り上げます。そして試行錯誤の過程で得た難しかったポイントやTips、Flutterでできること・できないことについて共有します。

ネイティブ好きだけどFlutterを使わないといけないとなっている方々にぜひ聞いてほしい発表です。

4
ポスターセッション

InputMethodKitとTCAを使ったmacOS上で動作する英語向けIMEツールの開発を通して得た効率的に開発する知見

Tatsumi0000

macOS上で動作するIMEを開発するために、Appleが公式で提供するInputMethodKitを利用して開発しました。

InputMethodKitでは主に、IMKInputController、IMKCandidates、IMKServerの3つのクラスを使い開発します。実際の開発中に、特にロジックが集中するIMKInputControllerのコードが肥大化し、コードの見通しが悪くなるという問題に直面しました。他にもIME開発特有のデバッグの煩わしさもありました。

そこで、コードの見通しをよくするためにThe Composable Architecture(TCA)を導入し、IMEのデバッグの煩わしさを軽減するために、fastlaneを使った自動化や、Repository層とUseCase層を採用したマルチモジュール構成で開発する方針を採用しました。

これらについて実際に書いたコードと一緒に以下の内容について解説します。

  • InputMethodKitでよく使う項目に対しての解説
  • UIKit/SwiftUIを使用していないコードに対してのTCAを使った開発
  • デバッグを簡単にするためのfastlaneを使ったビルドの自動化とマルチモジュール構成を使ったデバッグアプリの開発
レギュラートーク(40分)

数百画面をUIKitからSwiftUIに移行するプロジェクトをリードする

masamichiueta Masamichi Ueta

SwiftUIは革命的なUIフレームワークであり、宣言的なUI構築を可能にします。UIKitを使っているアプリでこれからSwiftUIへの移行を考えているアプリ開発者は多いと思います。

私は現在、日本最大のフリマアプリ「メルカリ」を通じて全国のお店で利用できるスマホ決済サービス「メルペイ」で、既存画面のUIKitからSwiftUIへの移行プロジェクトをリードしています。このプロジェクトでは、数百画面に及ぶUIKitベースの画面をSwiftUIに移行しています。
この講演では、数百画面のUIKitベースの画面をSwiftUIに移行するプロジェクトのベストプラクティスを共有します。

この講演は、以下の方々に特におすすめです。
・既存のUIKitベースのアプリをSwiftUIへ移行していきたい方。
・宣言的UIフレームワークの有効性を信じていて、社内でSwiftUIへの移行プロジェクトを立ち上げたい方。
・Mobileアプリ開発の大規模なリファクタリングプロジェクトをリードするためのノウハウを知りたい方。

UIKitからSwiftUIへの移行は、多くのiOSエンジニアにとって興味深いトピックの一つだと思います。
私のプレゼンテーションが、より多くのiOSエンジニアのイノベーションを後押しすることを願っています。
一緒にSwiftUIの活用を進めていきましょう。

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

入院アプリハッカソンで作ったアプリのUX改善の軌跡

u5_03 Sugiy

昨年度に入院することになり、入院中にトイレの時間と回数を記録をするように言われましたが、いい感じに記録できるアプリがありませんでした
ないときは自分で作ればいい!
ということで、手術までの時間に突貫でトイレ記録アプリを実装する入院アプリハッカソンを行いました!
せっかくなら自分だけでなく、自分以外の人にとっても使いやすいアプリを作りたいものです
そのため手術前の短時間で作ったものから、残りの入院期間や退院後の時間や別の入院期間でのドッグフーディングや他の人からのフィードバックを踏まえて、少しずつUX改善と機能追加を重ねていきました
この発表では今回のアプリ実装や経験をもとに、今後の展望や希望も含めた以下のUX改善のポイントについてお話しします

  1. ドッグフーディングとユーザーフィードバックの重要性
  2. WidgetやWatchOS対応などの複数の登録導線の実装
  3. Accessibility Inspectorを使ったアクセシビリティ機能の改善
  4. iBeaconを使った記録リマインドの通知

UX改善に決まった正解はないので、試行錯誤しながら少しずつ改善していくしかありません
今回の発表を通して皆さんの開発しているアプリやサービスのUX改善のヒントを掴んでいただければと思います!

2
LT(5分)

個人開発でも App Clip が使いたい!!

nnsnodnb Yuya Oka

App Clip を実装している個人開発者の方はいらっしゃるでしょうか?
業務開発でも App Clip の開発経験がなかった私ですが、どうしても App Clip の実装がしたくてどうにかしてやりたいと思っていたときにふと思いつきました。

「NFC タグに App Clipコードを印刷した紙を貼り付けて、アプリ布教用に実装できるのでは?」

実際に20時間程度で作ったアプリに App Clip を実装し、デバッグや App Store の審査も通したときの経験談をお話します。
また、ローカル体験や App Clip Code Generator の使い方、 App Store Connect 上での操作方法など、可能な限りを LT 形式でまとめて紹介します。

3
ルーキーズLT(5分)

個人開発でも App Clip が使いたい!!

nnsnodnb Yuya Oka

App Clip を実装している個人開発者の方はいらっしゃるでしょうか?
業務開発でも App Clip の開発経験がなかった私ですが、どうしても App Clip の実装がしたくてどうにかしてやりたいと思っていたときにふと思いつきました。

「NFC タグに App Clipコードを印刷した紙を貼り付けて、アプリ布教用に実装できるのでは?」

実際に20時間程度で作ったアプリに App Clip を実装し、デバッグや App Store の審査も通したときの経験談をお話します。
また、ローカル体験や App Clip Code Generator の使い方、 App Store Connect 上での操作方法など、可能な限りを LT 形式でまとめて紹介します。

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

Pkl入門 - Apple の新しい構成言語の解説

nnsnodnb Yuya Oka

2024年2月に Apple は Pkl (ピックル)をオープンソースで公開しました。
Pkl は豊富な検証機能とツールを備えた、コードとしての構成言語です。
Pkl をどのように使うのか、使うことで何ができるのかを解説します。

  1. Pkl の導入方法
  2. Pkl の使用方法
  3. Pkl のユースケース
    a. 静的構成の生成
    b. アプリケーションのランタイム生成
  4. Swift からの Pkl 構成言語呼び出し
  5. その他の活用方法

JSON、YAML、 Plist などの既存の構成言語とは異なるアプローチを探している方にとって、 Pkl が新たな選択肢にとなる可能性があります。ご興味のある方はぜひ聞いていただけると幸いです。

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

SwiftUI in 40 minutes: A Comprehensive Overview for Busy Engineers

kent_strong_dev Kent Strong

In this 40-minute session, we will delve into the expansive world of SwiftUI, checking its almost all the key components like categories, classes, structures, and functions in Apple Developer Documentation. Engineers are busy and often research only the articles they need to solve the problems they encounter at the time. But this session is designed for the busy engineer like you. Just watching this 40 minutes session, you can grasp overview of SwiftUI.

ルーキーズLT(5分)

SwiftSyntaxでSwiftコードを生成する仕組みを作って自動化してみた話

atsuki_seo 瀬尾 敦生

仕様書とソースコードの乖離が起きるのが嫌だが、定期的に仕様書とソースコードを見比べるという作業も嫌な僕が、仕様書からSwiftのソースコードを自動生成する仕組みがないかなと思って調べた記録を発表します。

Swiftコードを自動生成する成果物は作れたので、その内容を元に以下について発表します。

  • SwiftSyntaxを使ってSwiftのソースコードを自動生成する仕組みを作り、それをiOSのプロジェクトに組み込む方法
    • 自動生成するソースコードの例は @objc、protocol、変数を含んだクラスの自動生成です
    • SwiftSyntaxつらみポイントの解説(浅め)
  • 自動生成の仕組みに関してメリット・デメリットや業務に組み込めるかどうかについても考察する
    • SwiftSyntax は 最強魔法のツールになりえるのかどうか。
  • ソースコード自動生成の仕組みをチームで運用するのは一旦諦めた話

SwiftSyntaxはSwift言語のアップデートと共に割と大きめのアップデートもガシガシやってる仕組みです。
僕の苦しみから他の人の開発効率化案、もっと良いコードが生まれることを願って、発表します。

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

出前館アプリの決済機能の改善から見る、E-commerce決済の過去と現在

kuroFront46 Shinji Kurosawa

決済は、物理的な商品の購入を行うE-commerceアプリでは、必須かつ重要な機能です。
出前館アプリでも、決済機能はユーザにとって重要な機能として位置付けられています。

アプリ開発者として決済機能を運用する際は、アプリだけでなく、トランザクション処理全体の把握など、サービス全体を通じた知識が求められます。

また、近年の決済機能は、3D SecureやSMS認証などの多要素認証によって、よりセキュアに価値を提供することが求められています。
複雑な決済フローをユーザに認識齟齬なく継続的に提供するためには、バックエンドの処理に加えて、アプリで各種例外処理の考慮をするなど、様々な工夫を行う必要があります。

本発表では、決済機能の運用について、出前館アプリの決済機能の運用を例に、以下の話をします。

  • 決済の基礎(決済とは何か/AuthorizationやCaptureの話)
  • 決済の近年の傾向
  • 出前館の決済機能での改善例
  • 複雑なドメインをチームに共有する際のノウハウ

発表者は、出前館アプリの決済機能のアプリ開発・リードを経験する中で、決済機能の運用例には、複雑なシステムを運用するためのノウハウとして共通の学びがあると考え、本プロポーザルを提出しました。
決済に関わっている方に限らず、複雑なシステムをどう運用するか興味のある方など、本発表を聞いていただけますと幸いです。

6
LT(5分)

SwiftでPlaydateのゲームをビルドしてネコを走らせる

Kyomesuke Kyome

Panic社のキャッチーな黄色い筐体のモノクロ携帯ゲーム機『Playdate』はご存知でしょうか?
組み込み言語のサポートにより、実はSwiftでこのPlaydateのゲーム開発ができます!

本LTでは以下の内容をさっくり伝えます。
・SwiftでPlaydateのゲーム開発をするための環境づくり
・PlaydateKitを用いたゲーム開発の仕方
・Playdateのディスプレイ向けの画像を用意する方法
・Playdateでネコを走らせるデモ

Playdateに興味があるけれどまだ手を出していない方、小型ガジェットなどのソフトウェア開発に興味がある方、普通のiOSアプリ開発には飽きてきて新しい刺激が欲しい方など、Swiftでのゲーム開発の世界を少し覗いてみませんか?

3
LT(5分)

SwiftでOpenCVに挑む

kntkymt kntk

有名な画像処理ライブラリの一つにOpenCVがあり、高速な画像処理を多数提供しています。
しかし、OpenCVはC++で書かれています。

そうです...。Swiftではないのです...。

このことに大変なやるせなさを覚えた私は、pureなSwiftで画像処理を記述しOpenCVにベンチマーク (実行速度)で挑みました。
CoreGraphicなどのライブラリも一切使いません。なぜならCoreGraphicの実装はObjective-Cだからです。
本当にSwiftのみを用います。

このLTではその一部始終を乗り越えた困難などを含めお伝えします。

3
ルーキーズLT(5分)

手軽に実装!CryptoKitを使ったCore Dataのデータ保護術

Takahiro_Kato15 Takahiro Kato

永続化されたデータの保護は、現代のiOSアプリ開発において必要不可欠な要素です。
しかし、Appleが提供する永続化フレームワークであるCore Dataは標準でデータの暗号化を提供しません。
そこでこのトークでは、最もお手軽に導入できるCryptoKitによるCore Dataの暗号化手法について詳しく紹介します。

参加者は以下の内容を学ぶことができます。

  1. データ保護の重要性
  2. CryptoKitを利用するメリット/デメリット
  3. CryptoKitによる暗号化と復号化のコード例
  4. CryptoKitによる暗号化と復号化のパフォーマンス検証

このトークを通して、「Core Data」の暗号化に「CryptoKit」を利用する利点やパフォーマンスについて理解を深めて頂ければ幸いです。

LT(5分)

ユーザー毎にApp Storeのサブスクリプション無料試用の利用状況を判別する方法

SatoHikaruDev Hikaru Sato

サブスクリプションの無料試用の利用状況を判別するための具体的な方法を、アプリ側とサーバー側のコードを交えて説明していきます。

発表予定の内容:

  1. サブスクリプションの無料試用の判別方法

    • iOSアプリ側の実装方法
    • サーバー側の実装方法
    • シーケンス図を用いた処理の流れ
  2. 実際に起こったエラー内容と発生率

    • 主なエラーの種類
    • エラーの発生率とその対応方法
  3. verifyReceipt APIの不安定さに対する対策

  4. 開発中のsandboxアカウントでの確認方法

    • sandbox環境用のデバッグ機能実装
    • テストの際に注意するポイント
1
ルーキーズLT(5分)

Mastering Query Parameters in Swift: Arrays and Dictionaries with Moya

kent_strong_dev Kent Strong

Unlock the power of Moya by learning how to correctly pass arrays and dictionaries as query parameters in Swift. This talk will guide you through best practices, common pitfalls, and real-world examples to ensure your iOS apps handle complex queries with ease. Perfect for iOS developers aiming to streamline their network layer and to quickly implement API clients for your app. This session is definitely useful when the server side requires complex query parameters.

ルーキーズLT(5分)

Swift Macrosで最高の定数宣言をしよう

dsxsxsxs デスクス

デザイン定数をマジックナンバーのままベタ書きしていたり、enumなどで定数化していますか?
読み取るのも大変、書くのも大変、使うのも大変だと感じることもあるでしょう。

そんなあなたに、コードの可読性を向上させつつ、書きやすく、読みやすい方法をご紹介します。

このLTでは、Swift 5.9より実装されたAttached Macrosを活用して、最高に読みやすく、使いやすい定数宣言の方法を紹介します。
定数宣言することがいかに幸せなことか、この5分で実感していただきます!

以下の内容について紹介します。

  • デバイスによって異なる画面サイズに対応した定数の管理方法
  • Member MacroやAccessor Macroを活かした組み合わせ構文
  • Macroをより使いやすくするための例外処理とFixitボタンの実例
4
レギュラートーク(20分)

FlutterプロジェクトでSwiftの最新技術を活用する方法 - Swift 6とSwiftPM対応の現状と展望

ynoseda 野瀬田 裕樹

FlutterはDartで実装するクロスプラットフォームのフレームワークです。
通常、Flutterプロジェクトは主にDartで開発されますが、既存のSwiftで書かれたiOSプロジェクトに対してadd-to-appアプローチを用いることで、Flutterを一部の画面に統合することも可能です。
また、ネイティブ機能を利用するためにSwiftの実装が求められることもあります。

iOSエンジニアとして、Flutterプロジェクトに参画した際にSwiftの最新技術を使いたくなることは多いでしょう。
そうした場合、最新のSwift機能を利用できるのかを知りたくなるのではないでしょうか?
本セッションでは、特にSwift Package Manager (SwiftPM)とSwift 6の新機能に焦点を当て、Flutterプロジェクトにおける現状と今後の展望について詳しく解説します。

【話す内容】

  1. Flutterにおけるパッケージ管理の現状とSwiftPM対応の展望
  2. 全ての-enable-upcoming-featureを有効にした状態でFlutterプロジェクトがビルド可能かどうか
  3. FlutterプロジェクトでSwiftコードと連携を取る際にSendableやActorをどう適用すればいいのか
レギュラートーク(40分)

Clean Architecture x SwiftPM のマルチモジュール構成でビルド時間を短縮しよう!

ikuraikuraaaaaa Suguru Takahashi

【概要】
iOS アプリケーション開発におけるビルド時間の短縮は、開発効率を大幅に向上させる重要な要素です。本セッションでは、Clean Architecture と Swift Package Manager (SwiftPM) を組み合わせたマルチモジュール構成による実践的なアプローチを紹介し、具体的な実装例を通してビルド時間を短縮する方法を解説します。

【対象者】
・ ビルド時間に課題を感じている方
・ アーキテクチャの選定に悩んでいる方
・ Clean Architecture や SwiftPM によるマルチモジュール構成に興味がある方

【トーク内容】
・ Clean Architecture x SwiftPM のマルチモジュール構成がもたらすメリット
・ MVVM からのリアーキテクチャを通した具体的な実装方法
・ 実装する上での課題とその解決策の紹介

ルーキーズLT(5分)

Swift Package Pluginだけで完結する機密情報難読化ツールの開発

aikawa_Japan Masami Yamate

アプリ内でAPIキーやその他の秘密情報を扱う際、難読化やリポジトリ内での直接保持を避けることは情報漏えいリスクを低減するために重要です。従来、これらの対策には「cocoapods-keys」や「arkana」などのツールが使用されてきました。これらのツールはCocoaPodsのプラグイン機能やRubyによって機能が実現されているため、別途CocoaPodsやRubyの環境構築が必要です。

Swift Package Managerの機能だけで実現できれば、環境構築も簡単になり、パッケージ管理ツールをSwift Package Managerに統一することも容易です。Swift Package Managerの機能のみを使用することで、追加の環境構築が不要となり、プロジェクトのシンプルさと一貫性が向上します。

本LTでは、Swift Package Manager Onlyな環境を目指すべく開発した、Swift Package Pluginを活用した機密情報の難読化ツールの開発手法について説明します。

・ハードコードしてはいけない理由、難読化の必要性
・Swift Package Pluginを用いた難読化ツールについて

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

Revolutionizing AR: Building a Dice App in visionOS

kent_strong_dev Kent Strong

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.