WebPは、画像に対する高品質な可逆圧縮と非可逆圧縮を実現する、モダンな画像形式です。
WebP画像形式は同品質のPNG画像より約23〜26%小さく、非可逆圧縮の場合はJPEG画像より25〜34%小さくできるため人気の画像形式です。
iOS 14から標準でWebP画像の読み込みがサポートされ、UIImageで直接WebP画像を扱えるようになりました。
では、今から新しくWebP画像を扱うライブラリを作るということは無意味でしょうか?いいえ、そんなことはありません。自分で作るという行為は動作の原理や仕組みを学ぶことに非常に優れた手法です。
学習だけでなく実用の面でも、自作の場合は特定のユースケースに処理を最適化してパフォーマンスを発揮したり、標準のライブラリで発生する問題を回避できます。特にiOS 18では標準の方法では特定のケースでパフォーマンスが大きく悪化する問題があることがわかっています。
この講演ではWebPファイルフォーマットの基本仕様と構造、Swiftで構造を解析する方法、画像を圧縮する技術の原理と仕組みをステップバイステップで実際のコードを用いて解説します。
WebPのコーデックを実装することは「画像圧縮の理論」「ビット操作の職人技」「高速化・安全化の実務」を一気に学べる実践的な場です。特にSwiftで実装する場合は安全なメモリ管理と低レベルの最適化の両立というノウハウまで得られます。
普段のプログラミングとは一味違う、低レイヤーの実装を楽しんでみませんか?
Swift で日時・数値・名前などの情報を String との間で変換(フォーマット)してくれる仕組みのひとつである「FormatStyle」は、2021年の Swift 5.5(iOS 15.0 等)から使えるようになりました。
これまでのフォーマットでは Objective-C ベースの DateFormatter・NumberFormatter といったものを使ってきました。これを Swift のプログラムから使おうとするとき、高度なカスタマイズについて学習する必要があったり、型安全性などのコンパイラの支援が足りなかったり、また Formatter 自身のキャッシュについて考慮する必要もあったりと問題も抱えていました。
新しい「FormatStyle」は Swift ベースで構築されており、それらの問題へアプローチされパフォーマンスが良いとされています。また、フォーマットしたい形式を SwiftUI の View の Modifier のようにチェーン式で記述してカスタマイズするインターフェイスを備えています。
一方で、従来の Formatter とは使い方が異なるため、これまでと同じフォーマットを FormatStyle を使うように移行する際に、混乱しているようすも見受けられます。
登場から4年経った今、FormatStyle へ移行するのにぴったりな時期が訪れました。このトークでは、Swift でのフォーマットについてこれから勉強される方や、従来の Formatter からの移行を検討している方、移行に困っている方などを対象に、FormatStyle の使い方、カスタマイズの仕方、作り方について述べます。さらに、従来の Formatter との比較や、移行の際の考え方・勘所のノウハウ、そして FormatStyle の内部実装についても解説します。
iOSアプリにおいて Bluetooth 接続のレシートプリンターで印刷するにあたって、私は各メーカーのSDKに頼らず、 Foundation Framework に含まれる Stream API を使用したアプローチを採用しています。
複数メーカー製プリンターを共通の仕組みでサポートするためのプロトコルを定義し、 OutputStream に印刷データを書き込むことでレシート印刷を実現しました。
この方法は、各メーカーSDKの仕様変更や機能差異に左右されにくいという大きなメリットがあります。
一方で、 Stream API の仕組みや Bluetooth を使用したiOSアプリとレシートプリンター間通信の特徴を正しく理解していないと、私が実際に経験したように「印刷が途中で止まってしまう不具合」に遭遇することもあります。
本トークでは、レシートプリンターとの通信に必要な Stream API の基本知識を整理しつつ、複数メーカー製プリンターを共通の仕組みで制御する方法、そして印刷が途中で止まってしまう不具合の対処法について具体的に紹介します。
トーク内容
・Stream API でバイナリデータを送受信する方法
・レシートプリンターの特徴と Bluetooth 接続方法
・レシート印刷に必要な技術的な構成
・複数メーカー製プリンターをサポートする仕組み
・印刷が途中で止まる不具合と Stream.Event を用いた対処法
本トークは、iOSアプリでレシート印刷をしたことがない方はもちろん、これから実装したいと考えている方にも楽しんでもらえる内容です。
本トークのテーマであるレシート印刷の内容を通してバイナリデータ通信全般に応用できる技術知見をお届けします!
長年にわたり、みてねiOSアプリにおいて、写真/動画のアップロード中にアプリを開き続けていないとアップロードが中断されてしまう課題に直面してきました。
具体的にはiOSのバックグラウンド実行の30秒制限により、アプリが中断されるとアップロードが停止してしまう問題です。このトークでは、アプリをバックグラウンドに遷移させてもアップロードを完了まで継続できるようにするために実施した解決策、経緯、そして今後の展望について紹介します。
解決策としては、アップロード中にバックグラウンドに遷移した際、ピクチャインピクチャ機能を活用してアップロード進捗を表示することで、バックグラウンド制限を突破しました。このトークでは、そこに焦点を当ててつつそこまでの経緯/苦戦したところ/制限についてお話しします。
このトークを通じて、同様の課題に直面している開発者の皆様に有益な情報を提供できれば幸いです。
身分証をApple Walletをはじめとしたデジタルウォレットに搭載する動きが、近年世界的に広がっています。アメリカでは一部の州において、州発行の運転免許証の搭載が進んでいます。各国での実証実験が進行しており、これらはISO/IEC 18013-5や-7、23220といった国際標準で定められ、セキュリティやユーザープライバシーに配慮しながら世界中で互換性を持たせる動きが進んでいます。
こうした流れの中で、2025年6月24日から、日本でもiPhoneへのマイナンバーカードの搭載が始まりました。Apple WalletにNational IDを搭載するのは、日本が世界で初めての事例であり、デジタル庁とAppleとの協業によって実現されました。
マイナンバーカードを持っていれば、誰でもApple Walletにmdoc(Mobile Document)として搭載することができ、iPhoneだけでさまざまな行政サービスを利用できるようになります。
これに限らず、開発者もAppleが提供するID Verifier APIを使えば、自分のアプリに年齢確認や本人確認といった機能を国際標準に準拠した形で実装することが可能です。たとえば、酒類購入時の年齢確認や、オンライン口座開設時の本人確認など、民間サービスへの応用が期待されています。
このトークでは、「iPhoneのマイナンバーカード」を活用し、アプリ内、対面、ブラウザの3種類のVerifier APIの使い方とユースケースを紹介します。
また、mdocとはそもそも何であるか、そのデータ構造と検証手法など実装詳細にも触れていきます。
さらに、電子証明書をiPhoneから取り出して利用できる日本のために作られたAPIについても紹介しながらBehind the Sceneにも少し触れてみたいと思います。
Swift 6と共にComplete Concurrency Checkingが導入され、1年が経ちました。これまで曖昧にしておくことができたSwift Concurrencyも、きちんと理解して正しく適用する必要性が高まっています。
Swift Concurrencyの関連仕様は多岐にわたり、Swift EvolutionのProposalも膨大です。それらのすべてを正確に把握するのは非常に困難です。しかし、Swift Concurrencyのコアとなる考え方はシンプルです。それさえ押さえてしまえばSwift ConcurrencyとComplete Concurrency Checkingについての見通しがよくなり、その挙動を体系的に理解しやすくなります。
本トークでは、Swift Concurrencyの根幹を成すものとして、Isolation Domain・Isolation Boundary・Sendableとは何か、それらを利用してコンパイラがどのようにデータ競合を防ぐのか(Complete Concurrency Checking)を解説します。
その上で、Actorがどのような仕組みで動作するのか、ActorとIsolation Domainの関係、Global Actor(特にMainActor)およびTaskについて解説し、Swift Concurrencyについての理解を深めます。
さらに、その説明の延長線上として、WWDC25の様々なセッションでも取り上げられたSwift Concurrency関連の新機能SE-0461・SE-0466について解説し、Swift 6.2のSwift Concurrencyにおけるそれらの役割を示します。
最後に、iOSアプリでそれらをどのように組み合わせて活用するのか、一例を示します。
旧ログシステムから新しいシステムへ移行する際、新システムにはiOS SDKが提供されておらず、なんとログ基盤を自作することに!
そんな大規模なサービスの基盤を構築することは、実際にはそれほど怖くありません!
このセッションでは、5000万ダウンロード規模のiOSアプリにおけるログ基盤移行の実践事例を紹介します。
このセッションでは以下の内容について詳しく説明します。
このセッションを通じて、中〜大規模サービス基盤刷新の具体的な手順と注意点を理解し、実践に役立てていただければ幸いです。
アプリ開発において、ユーザーの操作を極力減らし、よりスムーズで摩擦の少ない体験を提供したいと考えたことはありませんか?
UWB(Ultra-Wide Band)は、ナノ秒単位で到達時間を計測することにより、高精度で距離と方向を取得することが可能です。
iOSでは、Nearby Interactionフレームワークを利用してこれらのデータにアクセスできます。この技術により、以下のようなタップレス操作が可能になります。
しかし、DiscoveryTokenの共有方法やセッションの開始・維持など、通常のアプリ開発ではあまり馴染みのない実装が多く、これがハードルと感じるかもしれません。
本セッションでは、UWBの基本的な知識から、Nearby Interactionを用いた具体的な実装方法をデモを交えて紹介します。
さらに、実装時のハードルを下げるためのTipsもご紹介いたします。
このセッションを通じて、“タップレスなアプリ開発” の第一歩としてNearby Interactionフレームワークの可能性を探ってみませんか?
本セッションでは、位置情報アプリを開発しているアプリエンジニア、または位置情報技術に興味を持つ方を対象とし、位置情報の「精度」や「時刻の取り扱い」について解説します。
スマートフォンで取得できる位置情報は、地図アプリ、交通サービス、IoT、防災など、日常生活を支える多くのアプリで活用されています。しかし、その位置情報がどのような仕組みで得られているのか、特に時刻情報がどのように関わっているのかについては、普段意識することが少ないかもしれません。
本セッションではまず、古代より人類がどのように時刻を求めてきたかを述べ、位置と時刻を求める人類の挑戦として、18世紀イギリスで制定された「経度法」と、それにより始まった経度問題の解決に向けた競争、そしてジョン・ハリソンによる海洋クロノメーターの開発を振り返ります。次に、電波を使った測位方法の歴史と、GPSをはじめとするGNSS(全地球測位システム)の基本原理を解説し、衛星信号を用いて端末の位置を特定する仕組みを解説します。
さらに、GNSSの生データを取得・解析するための専用ツール「GNSS Logger」と「GNSS Analysis」を活用し、端末が捕捉している衛星の数や種類、方向、信号強度といったデータを可視化します。これにより、都市環境でのマルチパス反射、大気遅延(電離層・対流圏)、衛星の配置や補足数不足といった精度劣化要因が、どのようにデータに現れるのかを具体的に解説します。
最後に、センチメートル級の高精度測位の仕組みと、それがもたらす未来の可能性についての展望を語ります。
聴講後には、位置情報と時刻情報の本質的な関係を理解し、位置特定にまつわる歴史と技術の知識が身につきます。
多言語対応をしていると、いつかはRTL(Right To Left)言語、つまり右から左に書く言語への対応が必要になる場面に出会います。私が担当しているiOSアプリでもその対応が求められました。
ではRTL言語対応って具体的に何をすべきかご存知でしょうか?iOSでは、OSやフレームワークによってある程度「自動対応」がされます。しかし、UIの崩れ、画像の反転、レイアウトの意図しない挙動など、エンジニアが「手動対応」しなければいけない場面も存在します。
このトークでは次のような観点から、私が調査、実装をしたRTL言語対応の知見を共有します。
このトークを聞けば、初めてRTL言語対応に取り組む方でも迷わず対応できるでしょう。逆向きUIの世界、覗いてみませんか?
Apple Vision Pro上で180°立体動画を体験できるViewerをSwiftネイティブで実装し、100名以上に実際に体験いただきました。
その事例をベースに、Apple Vision Proを初めて体験する方でも楽しめるアプリを作るための数多くの工夫を解説します。
40を超える具体的改善ポイントがありました。
そこから、操作ミスや混乱を生まないための徹底したUIのシンプル化、カルーセル形式のコンテンツ選択UI、空間上で押しやすくしたカスタムボタンの設計などをソースコードとデモを交えて紹介。
Vision Pro上での空間コンピューティングUIを実装する上で得た知見と、ブラッシュアップを余すことなくお伝えします。
このViewer実装では、体験者のフィードバックから得た改善点の反映を数ヶ月に渡って行いました。
多くの時間を使って得た知見を皆に共有することがこのセッションの目的です。
このセッションを見ることで、visionOSでカスタムUIコンポーネントを作る際の要素が整理でき、Apple Vision Pro未体験者でも使えるアプリを作成する知見が得られます。
Vision Proアプリ開発の実例に興味がある方、立体動画や空間UIの最適化に取り組んでいる方に特におすすめのセッションです。