ルーキーズLT(5分)

Method Swizzlingを行うライブラリにおけるマルチモジュール設計

yoshikma28 松原 良和

Method Swizzlingはメソッドの実行時の挙動を動的に変更する強力な機能ですが、複数のライブラリが同じメソッドに対してSwizzlingを行う場合競合が発生しやすく、アプリケーションの安定性に影響を与える可能性があります。Method Swizzlingを行うライブラリがSwift Package Managerのマルチモジュール構成を採用する場合はこのアプリケーションへの影響を考える必要があります。
本トークではMethod Swizzlingのようなアプリケーション全体に影響を与えるAPIを利用したライブラリにおいて、Swift Package Managerのマルチモジュール構成を採用した場合でも正しくSwizzlingが行われるよう、各モジュールが独立して機能するように設計した事例について紹介します。このアプローチによりMethod Swizzlingを用いたライブラリでも、安全にマルチモジュール構成下での利用ができるようになります。

【内容】
・Method Swizzlingを用いたライブラリの例
・Method Swizzlingがアプリケーション全体に与える影響
・Method Swizzlingが正しく動作するマルチモジュール構成

本トークによって、開発者の皆さまがより良いモジュール設計ができるようになると幸いです。

2
採択
2024/08/23 17:25〜
Track A
ルーキーズLT(5分)

夢の声優体験!パーソナルボイスでゲームのキャラクターをあなたの声で喋らせる

kuromelon257 岡本 龍太郎

皆さんは声優さんになりたいと思ったことはありませんか?例えば、自分が声を当てたキャラクターがゲームで活躍する妄想をすると、ワクワクしてこないでしょうか。しかし、アフレコの実力や膨大な文章の収録などの技術面・コスト面の障壁があり、素人がキャラクターに声を当てるのは簡単ではありません。

本トークでは、誰でも自分の声のキャラクターをアプリに登場させる手段として、iOS 17にて追加されたアクセシビリティ機能「パーソナルボイス」を使用し、ユーザの声で自由に語句を発話させる方法について説明します。また、「誰でもゲームアプリ声優になれるアプリ」のデモを通じて、パーソナルボイスの実際の活用例をご紹介します。

具体的には次のトピックについて話します:

  • AVSpeechSynthesizerを使用して学習したパーソナルボイスで発話させる方法
  • AVSpeechSynthesisVoiceで定義された他の音声合成機能との共存方法
  • パーソナルボイスを活用したゲームアプリの実例
  • パーソナルボイス導入における課題

このトークを通じて、iOSの「パーソナルボイス」の導入および利活用方法と、ゲームキャラクターに命を吹き込む新しい方法を理解していただけます。「パーソナルボイス」があなたのアプリに「自分の声での発話」という新しい価値をもたらし、多くのユーザの夢を叶える一助となれば幸いです。

ルーキーズLT(5分)

Interactive Widget:iOS17から始まるWidgetの新たな可能性

Takahiro_Kato15 Takahiro Kato

iOS14での登場以来、Widgetはユーザー獲得とエンゲージメント向上のために重要な役割を果たしています。
これまでも、Widgetのサイズ追加、スタンバイWidget、ロック画面Widgetなどの機能が追加され、ユーザーとの接点を拡大してきました。
しかしながら、今までユーザーはWidgetを受動的に利用しており、ユーザーがアクティブな操作をするためには、必ずアプリ本体を起動することが必要でした。

iOS17で、この制約を打破する「Interactive Widget」が導入され、直接Widgetからデータ更新や表示切替といったアクティブな操作が可能になりました。
この変化は、Widgetの利用価値を大きく高め、開発者にとって新たな可能性を開くものと考えています。

このLTでは、以下の内容に焦点を当てて解説します

  1. Interactive Widgetで実現できることとは?
  2. 実用的なInteractive Widgetの事例とそのメリット
  3. 実際のコードを用いたInteractive Widgetの実装方法

参加者は、Interactive Widgetを通じて、アプリの魅力をさらに引き出せるかについての具体的な知識と技術を得ることができます。

1
ルーキーズLT(5分)

UXを落とさず、収益化したい!Native Adsを用いた、広告UXの改善

tommy__yj Yuto Tomita

個人アプリ開発において、収益化は非常に難題です。広告を置いて収益化したいけどUXは損ねたくない、、、!
そんな誰しもが持つ悩みをこのLTで解決します!

僕自身、動画広告やアプリ内課金を導入するほどではないけどなんとかしてバナー広告は避けたい!と何度も思ってきました。
そこでたどり着いたのが、Native Adsです。

Native Adsは広告のUIを自由にカスタマイズでき、アプリ内に自然に配置することが可能です。
自身でカスタムした広告は、好きな場所に配置することができアプリの世界観やUXを損なうことなく、広告を配置することができます。
しかし、その自由さがゆえにバナー広告よりも少し実装が手間であったりレイアウト崩れが起きてしまったりします。

このLTでは、僕自身がアプリにNativeAdsをどのように組み込んだのか、レイアウト崩れをどのように解決したのかをお話しします。

具体的には次のトピックについてお話しします。

  • Google Admob Native Adsとは
  • Native Adsの実装方法
  • 実際にハマったポイントとその解決策
  • 実際のアプリで使われているNative Adsの具体例

皆さんも、Native Adsを実装してアプリのUXを高めてみませんか?

2
採択
2024/08/23 17:55〜
Track A
ルーキーズLT(5分)

Screen Time APIで生活習慣改善アプリを作ってみた!Screen Time APIって何ができるの?

tommy__yj Yuto Tomita

iOS15とともに登場したScreen Time APIですが、皆さんは使ったことがありますか?
iPhoneにデフォルトで搭載されているScreen Timeではアプリの起動時間を制限したり、アプリの利用時間を取得することができます。
そんなScreen TimeはAPIが公開されており、アプリからも使用することができます。
APIを利用すると、アプリのロック画面をカスタマイズすることができたり、Screen Timeを利用する時間やタイミングをより細かく調整することができます。

Screen Time APIは便利なAPIですが、現状使っているアプリが少なく、あまりメジャーではないため知見があまり出回っておりません。また、ドキュメントに記載されていないが、知っておくべきポイントというのもたくさんあります。

このLTでは、Screen Time APIとはなんなのか、一体何ができるのか?、どのようにすれば使えるのかなどScreen Time APIを使うにあたって知っておくと便利なことを実際に生活習慣改善アプリを開発した話を交えながらお話しします。

ルーキーズLT(5分)

個人開発アプリでSwiftDataを使ったデータ永続化を導入してみた

marunomi_ maru

WWDC2023で発表されたSwiftDataは、iOS17以降で使用可能なアプリ内でのデータを永続化するための新しいフレームワークです。
アプリ内でのデータ保存には既存のRealmやCore Dataがありますが、ではなぜSwiftDataを選ぶべきなのでしょうか?
本LTでは、SwiftDataの基礎知識を整理し、デモアプリを用いてSwiftDataの魅力を伝えることを目指します。

LTで話すこと
・Swift Dataとは
・SwiftDataを使うときに考慮したいこと、詰まった所
・SwiftDataのいいところ
・従来のアプリ内データ保存(Realmなど)とSwiftDataの比較

2
採択
2024/08/23 17:30〜
Track A
ルーキーズLT(5分)

プロジェクトで遭遇した奇妙で面白いバグたち

nekodoko315 レイ

プロジェクトを進めていると、時折奇妙なバグに遭遇することがあります。。
今回のプレゼンテーションでは、最近出会った興味深いバグをいくつか紹介し、その解決策についてお話しします。
これらのバグはすべて、私たちのミステリーと挑戦の精神を刺激し、コードの再考を促すものでした。

  1. 絵文字を表示するとレイアウトが崩れた!
  2. 画面録画をするとレイアウトが崩れた!
  3. 特定の条件ではアプリをバックグラウンドからフォアグラウンドに切り替えると画像が表示されない!

他にも興味深いバグがいくつかあり、その詳細についても触れます。

このような興味深いバグを通じて、私たちはコードの特異性を発見し、より良いソリューションを見つけることができました。
このプレゼンテーションでは、これらの挑戦的なバグに対する解決策と学びを共有し、共に成長する機会を提供します。

ルーキーズLT(5分)

swiftUIでCustomRefreshableを作ってみた

昆野 佑樹

swiftUIで pull to refresh を実現するにはApple純正のrefreshableを使うのが一般的です。
ただし、私が開発しているアプリでは、この純正機能を使用することで、レイアウト崩れや予期しない動作が発生していました。

具体的には、リフレッシュした後にスクロールview の画面が下にずれる問題が発生していました(詳細はこちら: https://stackoverflow.com/questions/76943913/swiftui-scrollview-refreshable-doesnt-work-appropriately)
他にも対応している、アプリがiOS15以下も対応していたため、そもそもScrollViewのリフレッシュが使えない。
私のUIKit経験値が低いために、UIKitでのリフレッシュバグが起きた際に対応しきれなかった。

そのためswiftUIのみでcustomRefreshableを作ろうと思いました。

1
ルーキーズLT(5分)

If you don't know, you're in trouble! Understand Objective-C grammar

kent_strong_dev Kent Strong

Are you a Swift developer looking to expand your skills into Objective-C? Join us for a comprehensive session that bridges the gap between Swift and Objective-C. This talk will demystify the complexities of Objective-C grammar. It includes method declarations between Objective-C and Swift, memory management with ARC, and understanding header and implementation files, and more. You will learn the key differences and similarities between the two languages, enabling you to maintain and integrate Objective-C code in your Swift projects with confidence.

ルーキーズLT(5分)

WWDC24での生成AIネタを語りたい

kana_cll かなみー

注意!! プロポーザル期間中に発表が聞けないため、タイトル詐欺になる可能性があります。

5月から6月にかけて多くのビッグテック企業が発表を行い、その中でも生成AIに関連するトピックが注目されています。これまで私たちが開発してきたアプリは、私たちの意図通りに動作していましたが、今後はシステムが私たちの予想を超える応答を返す時代へと移行しています。ビッグテック企業が生成AIについてどのようなテーマで語ったか、そして6月に開催されるWWDCで生成AIがどのように扱われるか語らせてください。

はたして発表日当日トークタイトルどおりの内容のセッションになるでしょうか。

ルーキーズLT(5分)

You still don't know this? Findings from a TikTok clone in Flutter

kent_strong_dev Kent Strong

Flutter is a multi-platform system that allows you to write code once to output a variety of applications for iOS, Android, and the Web. Here are some insights gained from building a clone of the famous TikTok app in Flutter. I will share the information on user registration and login, uploading videos and thumbnails, uploading attached information to a cloud database, state management and screen transitions, other libraries used, and more. Some of the content is directly applicable to iOS native app development, so even those who have never touched Flutter will be able to see it.

ルーキーズLT(5分)

Kotlin Multiplatformを導入したアプリのサイズ最適化に挑む

shumpei_nagata Shumpei Nagata

Kotlin Multiplatform(KMP)はここ数年で導入事例も増え、ノウハウも多く公開されるようになりました。
2023年末に安定版となったこともあり、その導入のハードルもかなり下がってきているのではないでしょうか。

しかし、アーキテクチャやSwiftとの互換性について語られることが多い一方で、その他の部分のノウハウは少ないです。
その中でもサイズの最適化は特に重要なトピックの一つです。
可能な限りサイズを小さく保つことは、ユーザ・アプリ提供者の双方にとってメリットに繋がります。

このトークでは、サイズ制約の厳しいApp Clipの開発にKMPを使った経験を踏まえ、
以下のポイントに焦点を当てサイズ最適化のノウハウをご紹介します。

  • SwiftとKotlinの言語仕様的な違い
  • KMPで生成するFrameworkのビルド設定
  • KMPコードを導入するiOSアプリ側の設定
7
採択
2024/08/23 17:25〜
Track B
ルーキーズLT(5分)

リョムキャットのパーフェクトSwiftネーミング教室

__ryomm Ryomm

みんなー リョムキャットのパーフェクトSwiftネーミング教室はじまるよー


Swiftの関数名、どのように命名していますか?
本LTではSwiftの関数名の命名時に考えるべきことについて紹介します。

弊社には全くコメントを使わずに名前だけで全てを表しているプロジェクトがあり、弊チームでも追随してコメントをなくしていこう!という風潮になりました。
コメントを完全に消すのはまだ議論の余地があるところですが、たしかにコメントがないと処理がわからない関数名は是正していくべきでしょう。
そこから命名について思い悩む日々が始まりました。

体を名で表すのは至難の技で、もはや芸術の域です。
そんな中、 Apple は Swift API Design Guidelines という指針を提示しています。このガイドラインを読み解きながら、Swiftらしい良い命名について一緒に考えていきましょう。
このLTを通じて、パーフェクトでSwiftライクなグッドネーミングセンスを身につけられます!

LTで話すこと:

  • Swift API Design Guidelines で言及されている命名規則の紹介
  • 自然に読める関数名にする工夫
  • 英語力がなくてもいい感じの命名をするには
ルーキーズLT(5分)

iOSエンジニアが知るべき生成AIの力 — Pull Request要約で言葉の壁を乗り越えろ

TRAsh___ Hiroya Hinomori

チームエンジニアリングでグローバルなメンバーと連携していると、どうしても言語の壁が辛いことが多々あります。そういった壁を今、勢いのある生成AIの力を使って乗り越えられるのではないか。
さまざまな手法を試しました。その中で特に効果的だったのが生成AIのPull Request要約ツールでした。

今回は数あるPull Request要約ツールの中の「PR Agent」を使って、グローバルメンバーとのGitHub上のコミュニケーションを円滑にした話をします。

  • セキュリティとか大丈夫なの?
  • Swiftに対応してる?
  • 使うとどうなるのか?
  • でも生成AIって嘘つくんでしょ?

といったiOSエンジニアにとって気になるポイントを解説します。

このトークを通じて、生成AIのコーディング以外での活用方法を知っていただき、少しでもチームのコミュニケーションが円滑になる助けになればと願っています。

ルーキーズLT(5分)

WWDC24のアップデートを組み合わせてアプリを作ってみた

touyou_dev 藤井陽介

アップデートをいち早く理解する一番簡単な手段といえば、そう!小さなアプリを作ってみることです。
このLTではWWDC24で発表されたアップデート内容のいくつかを組み合わせて作ったアプリをもとに、アップデート内容を紹介していきます。

つまり!現時点ではどんな内容になるかわかりません!笑

できうる限り強みを生かしたいいアプリに仕上げるつもりなので、どんな内容になるのか?どんなアプリになるのか?そんなところをぜひ想像しながら一緒にWWDC24を振り返りましょう!

2
ルーキーズLT(5分)

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

touyou_dev 藤井陽介

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

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

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

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

4
採択
2024/08/23 17:40〜
Track A
ルーキーズLT(5分)

InputMethodKitとTCAを使ったmacOS上で動作するIMEの開発

Tatsumi0000

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

InputMethodKitでは主に、IMKInputController、IMKCandidates、IMKServerの3つのクラスを使って開発します。実際に開発をする中で、特にロジックが集中するIMKInputControllerのコードが肥大化していき、コードの見通しが悪くなるという問題に直面しました。

そこで、この問題を解決するためにThe Composable Architecture(TCA)を導入しました。

本セッションでは、これらの開発体験をもとに、InputMethodKitでよく使う項目に対しての解説と、UIKit/SwiftUIを使用していないコードに対してどのようにTCAを適用するかを中心に発表します。

ルーキーズ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 形式でまとめて紹介します。

ルーキーズLT(5分)

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

atsuki_seo 瀬尾 敦生

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

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

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

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

1
ルーキーズ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」を利用する利点やパフォーマンスについて理解を深めて頂ければ幸いです。