初心者iOSエンジニアにとって、サーバー周りの知識や環境構築はハードルが高いと感じていませんか?この課題を乗り越えるために、 昨年リリースされたVSCodeのポートフォワーディング機能を使って簡単にサーバーレスでユニバーサルリンクを実装する方法を設定手順からデモ、応用事例まで紹介します。
来年からDynamic Linksが廃止されるため、スマートバナーへの移行が急務となっています。
この変化に迅速に対応するためには、新しい技術とツールを活用することが重要だと思います。
個人開発はもちろん、チーム開発でもバックエンドの準備を待たずにスマートバナーの実装を進められるため、開発スピードを加速させる可能性を秘めています。
サーバーの複雑さに悩まされることなく、iOS開発をもっとスムーズに進めましょう。
アプリサービスを運営する中で次の施策を検討する際には、Google Analytics for Firebase 等のアプリ測定ソリューションを使用してデータ分析することが多いです。アプリからイベントを送信して蓄積し、あとで SQL 等で分析できるソリューションですが、イベント送信の実装は注意深く行う必要があります。特に iOS アプリと Android アプリの両方がリリースされており、コードベースが異なる場合、実装差異に注意する必要があります。
実装差異を防ぐ方法の1つに Firebase のコンソールを利用した iOS / Android エンジニア間の相互確認があります。しかし表示に遅延が生じるため、細かい条件やタイミングが同じかどうかを確認するのは困難です。そこで、私たちのチームではイベントを送信するとすぐにその内容をアプリに表示するデバッグ機能を開発しました。この機能は、ユーザから見えるアプリの表示を崩さないようにオーバーレイ(最前面に半透明)で表示され、必要に応じてドラッグで移動できます。
この LT では、このデバッグ機能開発の経緯と iOS での実装方法を解説します。これにより、ユーザから見えない内部実装で iOS / Android 間の差異が発生することへの対策をしたいモバイルエンジニアに向けて、開発体制構築のヒントを提供することを目指します。
ObservationとSwiftマクロは、WWDC23で発表された新機能です。ObservationはSwift 5.9から導入されたデータ監視の新しいフレームワークです。Observationは対象の型にObservableマクロを付与することで、簡単に値監視可能なコードを生成し、これまで以上にシンプルなモデルを作成することができます。
Observationがどのようにプロパティを監視しているのか?に焦点を当て、Observableマクロの生成するコードを展開し、Swiftマクロで生成されたコードの解説を行います。
このLTでは、以下の内容をお話します。
・ Observationの概要
・ Expand Macroで、Observableマクロの生成するコードを展開し、のぞいてみよう!
・ 展開したObservableマクロの生成するコードの解説(Observableマクロ・ObservationTrackedマクロ・ObservationIgnoredマクロ)
・ 計算プロパティを初期化する新しい方法(SE-0400 Init Accessors)
Observationの裏側で生成されているSwiftマクロの世界がどのように広がっているのかを共有できれば幸いです。
無料5分で、ディレクトリ構造の重要性や実際にプロダクトを整理した時の流れが分かる「ライトニングトーク」。
掛けた時間は40時間を突破!
効果もすぐわかると大人気だ。
CHECK!
あなたのプロジェクト構造はきれいですか?
本トークでは私が担当しているiOSアプリのプロジェクトにおいて、どのような流れでソースコードディレクトリを整理できたのか、どのような知見を得られたのかを共有します。ちょっと関係なさそうで、実は大きく関係ある熱力学の法則「エントロピー増大の法則」から始まり、ここからどのように私がディレクトリ構造に向き合い、そして解決していったかについて紹介します。
本トークを通じて、あなたのディレクトリ構造も整理するきっかけにしませんか?
Unlock the Power of Query Parameters with Moya: Dive into the intricacies of crafting dynamic API requests using Moya, the elegant networking library for iOS development. Learn how to effortlessly handle arrays, dictionaries, and complex nested structures within query parameters. Sometimes the server side demands the app's native side pass these kinds of complex parameters. This knowledge is not written on the internet enough, so you must check out this session. Elevate your app's networking capabilities and streamline your code for maximum efficiency in just 5 minutes!
人類は数多のマルチ・クロスプラットフォームに夢を見てそして枕を濡らしてきました。
今宵、もう少し夢を見ましょう。
KotlinはJVM互換の言語かと思いきや、iOS・WebフロントなどのプラットフォームでもKotlinでかける技術「Kotlin Multiplatform(KMP)」のプロジェクトが始まり、つい最近Stableバージョンまでたどり着きました。
アプリ全体をKotlinにする必要は無く、ビジネスロジックの一部分だけの置き換えでも使えるというのが大きな特徴です。
また、Androidアプリ開発では、Googleが開発しているAndroid Jetpackと呼ばれるライブラリ群があります。
これらにはAndroidアプリでの推奨アーキテクチャを実現するためのライブラリ(ViewModel)やSQLラッパー(Room)などが存在します。
そして、これらのJetpackライブラリ群も最近KMPに対応したバージョンがどんどんリリースされており、iOSプラットフォーム上でも使えるようになっています。
このLTでは、そのようなKMP対応のJetpackライブラリの使い方を紹介します。
そして、KMPとJetpackライブラリを既存のiOSアプリに組み込むことで、Android側とどの段階までコードの共通化ができるのかを紹介します。
夢が現実になるといいですね。
「あなたが一番使い慣れた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の標準カメラアプリは被写体との距離に応じて自動的に最適なカメラを切り替える機能を持っていますが、自作のカメラアプリではこの機能が自動で提供されません。そこで開発者が対策を講じる必要があります。
このセッションでは、小さな被写体を撮影する際の対応方法を紹介します。
具体的には最短撮影距離から被写体に最適なカメラ設定を行う方法を詳しく解説します。これによりカメラアプリ開発者がユーザーに高品質な撮影体験を提供できるよう支援します。
その昔iPhoneのRAM容量は512MBや1GBしかなく、メモリ管理は非常に重要でした。しかし、近年では3~8GBの容量が一般的になり、メモリ不足に悩むことは少なくなりました。
それでも開発者にとって適切なメモリ管理は重要です。メモリリークや不要なメモリ使用を避けることで、アプリのパフォーマンスを向上させることができます。
iOS開発ではARC(Automatic Reference Counting)によってメモリ管理が自動化されていますが、オブジェクトが解放されずに残ってしまうケースがあります。
このトークでは、特に注意が必要な5つのポイントについて解説します。
これらのポイントを押さえて、アプリのパフォーマンスを向上させましょう!
Gradleのプラグインとして開発されたAmperというプロジェクトを構成するためのツールが登場しました。
AmperはKotlin Multiplatform(KMP)のプロジェクトを構成することを前提としています。
従来のGradleファイルを用いて構成する場合と比べ、構成ファイルがシンプルになるため、特にiOSアプリ開発者への恩恵は大きいです。
本LTでは、Amperに関する知見を共有いたします。
以下の内容を中心にお話しします。
このLTを通じて、参加者の皆様がAmperを使ったKMPプロジェクトの構成方法を理解し、実際のプロジェクトに活用できるようになることを目指します。
「Simulatorアプリでマウススクロールを使えたらいいな」
普段アプリ開発をしている中で、このようなことを思ったことはありますでしょうか?
Simulatorアプリで画面をスクロールするには、マウスのドラッグ&ドロップで操作する必要があります。
慣れてしまえばなんてことないですが、マウスをいちいち動かすのは地味に不便です。
本LTでは、この問題をmacOSのCore Graphicsの機能で解決していきます。
Core Graphicsを使えばユーザイベントを変換することができ、擬似的にSimulatorアプリ上でマウススクロールを使うことができます。
「Core Graphicsなんてグラフィック系のライブラリでしょ?」と思ったら大間違い。実はユーザイベントにも深い関わりがあるんです。
あなたの知らないmacOSのハック術、お教えします。
スクロール。
それはUI操作の核とも言えるジェスチャーの一つであり、それを実現するためのフレームワークもまたiOSアプリ開発において欠かせない存在です。
しかし、SwiftUIのScrollViewはiOS13で登場した当初、非常に使いづらいものでした。
基本的なスクロールの機能は提供されていたものの、カスタマイズ性に乏しく、UIScrollViewで実現できた多くの動作を再現することは困難でした。
しかし時は2024年。iOS17の登場でScrollViewも進化を遂げました!
このセッションでは、iOS17で追加されたmodifierを中心に、SwiftUIのScrollViewがどのように進化したのかを具体的な例を交えてご紹介します。
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 を見てどのような差異があるのか説明していきます。
このセッションは以下のような流れで行います。