「あなたが一番使い慣れたIDEは何ですか?」この質問に対する私の答えは「Visual Studio」です。Swift以外の言語をメインで開発していた人がiOS開発を始める際、基本的にXcodeを使うことになると思います。
しかし、Xcodeで開発をしているとき、無意識に慣れ親しんだショートカットキーを押してしまうことがありませんか?
Xcode以外のIDEからXcodeを使うことになった開発者は、そんな経験をしたことがあるのではないでしょうか。
本LTでは、元々Visual Studioユーザーだった私が、Xcodeで開発する際に、Visual Studioと同じ使用感で開発できないかと試行錯誤した取り組みをご紹介します。
具体的には、以下のポイントをカバーします。
・XcodeのKey Bindingsカスタマイズ方法
・Visual StudioのショートカットキーをXcodeに再現する方法
これらのポイントを通じて、Xcodeを自分にとって快適なIDEにする方法をお伝えします。
皆さんはThe Composable Architecture(TCA)をご存知でしょうか?TCAはSwiftでアプリケーションを構築するためのライブラリで、状態管理が容易、コードが小さく分割できる、テストコードが書きやすいなどのメリットがあります。こちらのライブラリはリリースされてから4年が経過していますが、頻繁にアップデートされており、これまでに7回のマイグレーションガイドが発表されています。
私も個人開発でTCAを使用しながら学習を進めていますが、最新の実装方法がわからずに苦労することがありました。
本LTではTCAのマイグレーションガイドを読み解き、以下のポイントについて発表します。
・TCAの実装方法の変遷
・TCA最新版での実装方法
TCAの変遷と現時点での最新の実装方法を知ることで、これからTCAを導入したい!という方の負担を少しでも楽にしたいと思います。
海外で作られたアプリで、デザインのクオリティは高いのに日本語フォントが残念でチープな見た目になっているアプリを見たことはないでしょうか?
グローバルに展開するアプリではローカライゼーションはもちろんのこと、現地に馴染みがあるフォントを選ぶこともアプリの魅力度を上げる1つの手段です。
本セッションでは各言語ごとに異なるフォントをどのように管理しているかについてご紹介します。
【ポイント】
・ロケールごとに異なるフォントを用意するべきケースとは?
・メリット&デメリット
・iOSプロジェクトでフォントの使い分けを簡単に管理するには
Webフロントエンド開発からiOSアプリ開発への移行は、技術的な視点のシフトが必要となります。例えば、Webフロントは主にDOMベースの操作が中心ですが、iOS開発ではユーザーのタッチ操作など直接的なインタラクションが求められるため、iOSのネイティブAPIなどに対して知見が必要です。
このようににSwiftUIとWebフロントエンド技術(Next.js)の比較を通じて、SwiftUIの特性とWeb開発者にとっての利点・欠点を掘り下げます。
本トークでは以下の三点について重点的に取り上げます。
1.SwiftUIのファーストインプレッション: Webフロントエンド技術者が初めてSwiftUIを使った際の直感的な感想と具体的な違いをまとめます。
2.機能比較: React.js, Next.jsとSwiftUIで開発した場合の違いを比較します。特にタッチ操作やジェスチャーの応答性、アニメーションの実装のしやすさなど、直接的なユーザーインタラクションが重要な要素としてどのように扱われるかを見てみます。
3.コミュニティサポート:それぞれの開発者コミュニティの規模感や活発さについて取り上げます。
本トークにより、Webフロント技術者以外にも今までiOS開発にあまり触ってこなかった方々がSwiftUIを利用した開発に興味を持つきっかけを提供できれば幸いです!
モバイルクロスプラットフォーム技術でシェアを拡大しているFlutterですが、既存アプリを一気に乗り換えるのはコストがかかります。Flutterには「Add-to-app」という画面単位でFlutterを組み込む仕組みが用意されており、これを利用することでリスクを抑えつつFlutterを導入することができます。
「Add-to-App」を利用することで、コストを押さえつつクロスプラットフォームの導入を小さく始める事ができます。
しかし、良いことばかりではありません。例えば以下のデメリットも存在します。
・OS毎に別々のUIデザイン適応が困難
・Flutter(Dart)有識者不足
・サードパーティ製パッケージへの依存
Flutter 1.0がリリースされてから5年が経った今、実際に「Add-to-app」を使用してFlutterを導入する中で判明したメリットとデメリットを詳しく紹介します。特に導入時の課題や注意点についても触れ、Flutter導入を検討している開発者にとって役立つ情報を提供します。
カメラアプリを開発する際、広角カメラ(builtInUltraWideCamera)でQRコードやレシートなどの小さな被写体にピントを合わない問題があります。
従来のiPhoneでは最短撮影距離が10cmでしたが、最新のiPhone 15では15cm、iPhone 15 Proでは20cmと、カメラの進化に伴い最短撮影距離が増加しています。このため被写体に近づきすぎるとピントが合わずボケてしまいます。
Appleの標準カメラアプリは被写体との距離に応じて自動的に最適なカメラを切り替える機能を持っていますが、自作のカメラアプリではこの機能が自動で提供されません。そこで開発者が対策を講じる必要があります。
このセッションでは、小さな被写体を撮影する際の対応方法を紹介します。
具体的には最短撮影距離から被写体に最適なカメラ設定を行う方法を詳しく解説します。これによりカメラアプリ開発者がユーザーに高品質な撮影体験を提供できるよう支援します。
Gradleのプラグインとして開発されたAmperというプロジェクトを構成するためのツールが登場しました。
AmperはKotlin Multiplatform(KMP)のプロジェクトを構成することを前提としています。
従来のGradleファイルを用いて構成する場合と比べ、構成ファイルがシンプルになるため、特にiOSアプリ開発者への恩恵は大きいです。
本LTでは、Amperに関する知見を共有いたします。
以下の内容を中心にお話しします。
このLTを通じて、参加者の皆様がAmperを使ったKMPプロジェクトの構成方法を理解し、実際のプロジェクトに活用できるようになることを目指します。
iPhoneやApple Watchから簡単にクレジットカードなどを利用できるAppleウォレットにはイベントのチケットも登録できます。
そう、iOSDCのチケットも今年からAppleウォレットに保存できるようになりました!
受付時にメールが見つからなかったり、チケットサイトにログインできなかったりして困った経験がある方もいらっしゃるのではないでしょうか。
Appleウォレットにチケットを保存すればそうした困りごとからも解放されます。
筆者はiOSDC Japanが運営に使用しているWebシステム「fortee(フォルテ)」のAppleウォレット・Googleウォレット連携を実装しました。
しかし、Appleウォレットは公式ドキュメントの奥深くに潜らないとデバッグ方法が見つからなかったりと、初見だと実装時にハマるポイントがいくつかありました。
この発表では
を通して一般的なWebシステムからAppleウォレットにチケットを保存する方法を解説します。
「あのモジュールは負債まみれで入れたくないけど、この型や定数が必要で仕方なく使っている…」
そんな悩みを抱えていませんか?
技術負債から脱却するためには、大規模な改修がつきもので、その分リスクも高くなります。
このLTでは、コードベース全体に破壊的な変更を抑えつつ、ほぼ無傷でレガシーモジュールへの依存を剥がす方法を紹介します。
皆さんは iOS Osushi をご存知でしょうか?
有志で運営を行っている、週1回更新で iOS の技術ニュースを発信しているサイトです。
そんな iOS Osushi ですが、その記事の作成・まとめ作業の大半は手作業で、まとめるまでにかかる時間はおよそ1時間ほどかかる場合もあり、少なからず管理メンバーたちの負担になってしまっています。
このセッションでは、負担になってしまっている特に「リリース情報の要約」の作業を生成 AI を用いて自動化し、効率化している取り組みについてご紹介します。
このセッションでは以下の内容を話します。
最近採用されることが多くなってきた UI フレームワークFlutterですが、その Flutter で iOS の UI をどう実現しているかご存知でしょうか?
Flutter での iOS の UI の実現は実は独自に描画されたもので、全てが iOS 標準の UI をそのまま使っているわけではないのです。
このセッションでは、そんな Flutter での iOS の UI の実現方法について Flutter の描画エンジンの話から実際の UI を見てどのような差異があるのか説明していきます。
このセッションは以下のような流れで行います。
Method Swizzlingはメソッドの実行時の挙動を動的に変更する強力な機能ですが、複数のライブラリが同じメソッドに対してSwizzlingを行う場合競合が発生しやすく、アプリケーションの安定性に影響を与える可能性があります。Method Swizzlingを行うライブラリがSwift Package Managerのマルチモジュール構成を採用する場合はこのアプリケーションへの影響を考える必要があります。
本トークではMethod Swizzlingのようなアプリケーション全体に影響を与えるAPIを利用したライブラリにおいて、Swift Package Managerのマルチモジュール構成を採用した場合でも正しくSwizzlingが行われるよう、各モジュールが独立して機能するように設計した事例について紹介します。このアプローチによりMethod Swizzlingを用いたライブラリでも、安全にマルチモジュール構成下での利用ができるようになります。
【内容】
・Method Swizzlingを用いたライブラリの例
・Method Swizzlingがアプリケーション全体に与える影響
・Method Swizzlingが正しく動作するマルチモジュール構成
本トークによって、開発者の皆さまがより良いモジュール設計ができるようになると幸いです。
iOS14での登場以来、Widgetはユーザー獲得とエンゲージメント向上のために重要な役割を果たしています。
これまでも、Widgetのサイズ追加、スタンバイWidget、ロック画面Widgetなどの機能が追加され、ユーザーとの接点を拡大してきました。
しかしながら、今までユーザーはWidgetを受動的に利用しており、ユーザーがアクティブな操作をするためには、必ずアプリ本体を起動することが必要でした。
iOS17で、この制約を打破する「Interactive Widget」が導入され、直接Widgetからデータ更新や表示切替といったアクティブな操作が可能になりました。
この変化は、Widgetの利用価値を大きく高め、開発者にとって新たな可能性を開くものと考えています。
このLTでは、以下の内容に焦点を当てて解説します
参加者は、Interactive Widgetを通じて、アプリの魅力をさらに引き出せるかについての具体的な知識と技術を得ることができます。
個人アプリ開発において、収益化は非常に難題です。広告を置いて収益化したいけどUXは損ねたくない、、、!
そんな誰しもが持つ悩みをこのLTで解決します!
僕自身、動画広告やアプリ内課金を導入するほどではないけどなんとかしてバナー広告は避けたい!と何度も思ってきました。
そこでたどり着いたのが、Native Adsです。
Native Adsは広告のUIを自由にカスタマイズでき、アプリ内に自然に配置することが可能です。
自身でカスタムした広告は、好きな場所に配置することができアプリの世界観やUXを損なうことなく、広告を配置することができます。
しかし、その自由さがゆえにバナー広告よりも少し実装が手間であったりレイアウト崩れが起きてしまったりします。
このLTでは、僕自身がアプリにNativeAdsをどのように組み込んだのか、レイアウト崩れをどのように解決したのかをお話しします。
具体的には次のトピックについてお話しします。
皆さんも、Native Adsを実装してアプリのUXを高めてみませんか?
WWDC2023で発表されたSwiftDataは、iOS17以降で使用可能なアプリ内でのデータを永続化するための新しいフレームワークです。
アプリ内でのデータ保存には既存のRealmやCore Dataがありますが、ではなぜSwiftDataを選ぶべきなのでしょうか?
本LTでは、SwiftDataの基礎知識を整理し、デモアプリを用いてSwiftDataの魅力を伝えることを目指します。
LTで話すこと
・Swift Dataとは
・SwiftDataを使うときに考慮したいこと、詰まった所
・SwiftDataのいいところ
・従来のアプリ内データ保存(Realmなど)とSwiftDataの比較
swiftUIで pull to refresh を実現するにはApple純正のrefreshableを使うのが一般的です。
ただし、私が開発しているアプリでは、この純正機能を使用することで、レイアウト崩れや予期しない動作が発生していました。
具体的には、リフレッシュした後にスクロールview の画面が下にずれる問題が発生していました(詳細はこちら: https://stackoverflow.com/questions/76943913/swiftui-scrollview-refreshable-doesnt-work-appropriately)
他にも対応している、アプリがiOS15以下も対応していたため、そもそもScrollViewのリフレッシュが使えない。
私のUIKit経験値が低いために、UIKitでのリフレッシュバグが起きた際に対応しきれなかった。
そのためswiftUIのみでcustomRefreshableを作ろうと思いました。
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.
注意!! プロポーザル期間中に発表が聞けないため、タイトル詐欺になる可能性があります。
5月から6月にかけて多くのビッグテック企業が発表を行い、その中でも生成AIに関連するトピックが注目されています。これまで私たちが開発してきたアプリは、私たちの意図通りに動作していましたが、今後はシステムが私たちの予想を超える応答を返す時代へと移行しています。ビッグテック企業が生成AIについてどのようなテーマで語ったか、そして6月に開催されるWWDCで生成AIがどのように扱われるか語らせてください。
はたして発表日当日トークタイトルどおりの内容のセッションになるでしょうか。
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.
Kotlin Multiplatform(KMP)はここ数年で導入事例も増え、ノウハウも多く公開されるようになりました。
2023年末に安定版となったこともあり、その導入のハードルもかなり下がってきているのではないでしょうか。
しかし、アーキテクチャやSwiftとの互換性について語られることが多い一方で、その他の部分のノウハウは少ないです。
その中でもサイズの最適化は特に重要なトピックの一つです。
可能な限りサイズを小さく保つことは、ユーザ・アプリ提供者の双方にとってメリットに繋がります。
このトークでは、サイズ制約の厳しいApp Clipの開発にKMPを使った経験を踏まえ、
以下のポイントに焦点を当てサイズ最適化のノウハウをご紹介します。