「SwiftってAppleデバイスでしか動かないじゃん?」
そう言われ続け10年、しかし現状は大きく異なります。
Swiftは現在、LinuxやWindowsのような他OSでも動作することに加えて、組み込み機器での利用を想定した軽量なバージョンも提供されています。
つまりSwiftは多種多様な環境で実行できるポテンシャルを秘めているのです。
そして、それはゲームボーイアドバンス(以降、GBA)のようなレガシーなデバイスも例外ではありません。
GBA開発は誰でも手軽に実行環境を用意できるという魅力があります。
今年4月からApp Storeでのエミュレータ配布が認められたのは記憶に新しいかと思います。
しかし、GBA向けに開発をするにはいくつかの工夫が必要です。
GBA向けにコンパイルの設定をしたり、リンク時に参照できないシンボルの解決をする等、開発環境を整えるのにも一手間かかります。
本セッションでは、SwiftのプログラムをGBAで動作するようにコンパイルする方法を解説します。また、Swift Packageを使った開発環境構築、BreakPointの貼り方等のデバッグ方法、および具体的なプログラム例も併せて紹介します。
このセッションを通じてGBAの開発環境を構築する方法や、swiftcやEmbedded Swiftについての知識を得ることができます。
2015年にサービスを開始したTVerは現在では月間4.5億回再生を超える大きなサービスに成長しました。
TVerのiOSアプリ開発における生産性と品質をさらに向上させ組織やプロダクトをスケール可能にするための取り組みとして、2024年度からはiOSアプリのリアーキテクチャに取り組んでいます。
本セッションでは、多くのユーザー/ステークホルダーを抱えるTVerアプリにおいてどのように事業リスクを最小化しながらリアーキテクチャプロジェクトを推進しているかについて紹介します。
<現在のアーキテクチャと目指すアーキテクチャ、その採用背景について>
・SPMを用いたマルチモジュール化
・UIKitからSwiftUIへの移行
・Design Systemの導入
<リスクを最小化するための戦略について>
・モジュールごとの段階的なリリース
・Feature Flagを用いた開放率のコントロール
・iOSのversion戦略
これまで主にWebサイトやWebアプリのデザインをしてきた私は、業務でiOSアプリをデザインするにあたり、エンジニアと「iOSアプリらしいデザイン」について議論する機会がありました。しかし私には「iOSアプリらしさ」とは何か理解できず、戸惑いを感じました。ただiOSのパーツを使うだけではiOSらしくはならず、見た目だけの問題ではないようです。
そこで私は、iOSアプリらしいデザインを分析し言語化することにしました。さまざまなアプリを観察し、Human Interface Guidelinesを読み込むことで、iOSアプリ特有の特徴があることに気づきました。
例えば、奥行きを感じる表現で直感的なインターフェースを提供し、タッチジェスチャーの活用で操作感を向上させることなどが挙げられます。これらの特徴を理解することで、見た目だけでなく、操作性やユーザー体験全体を通じてiOSらしいデザインを実現できます。
この登壇では以下の内容をお伝えします。
iOSらしいデザインを理解し、実践することで、提供するアプリをより魅力的にしていきましょう!
私たちのチームでは来たるべき超巨大アプリの開発に備え、向こう5年間は大規模なリファクタリングを必要としない堅牢な設計を目指してPoCを去年から開始しました。
PureなSwiftUIが全面的に採用され、基盤となるアプリアーキテクチャはどうするべきかという議論も重ねました。
本セッションではあまり聞き馴染みのないアーキテクチャである「MV State Pattern」について視覚的に分かりやすく解説しつつ、以下のポイントに的を絞ってお話しします。
【ポイント】
・MV State Patternとは
・なぜ採用したのか
・SwiftUIとの親和性
・実際の使用感はどうなのか
これらの知見が今後アプリアーキテクチャを考える皆さんの意思決定の一助となれば幸いです。
iPhoneの進化により、位置測定技術は著しく向上しています。
GPSをはじめ、Wi-Fi、Bluetooth、そしてLiDARを利用した位置測定機能が搭載されています。 しかし、GPSは屋内で正確に計測することが難しく、Bluetoothは事前に機器の設置が必要です。LiDARなどの深度センサーはレーザー光を飛ばして反射光を計測するため、センサーを常に外部に向けておく必要があります。
今回は、これらの外部信号を用いずに、iPhone内蔵のジャイロセンサーと加速度センサーのみを使用して位置測定と距離測定を行う方法についてお話しします。 具体的には、xyz方向の3軸加速度データと3軸角速度データを用いて位置測定を行います。
このトークでは、以下の内容について詳しく説明します。
特に測定誤差に関する部分では、実際に計測をしたところ、大きな測定誤差が発生して大変苦戦しました。 どのような誤差が発生したか、そしてそれにどのように対処したかについて具体的な事例を交えて説明します。 これにより、同様の技術を利用しようと考えている方々にとって有益な情報を提供できると思います。
永続化されたデータの保護は、現代のiOSアプリ開発において必要不可欠な要素です。
しかし、Appleが提供する永続化フレームワークであるCore Dataは標準でデータの暗号化を提供しません。
また、Core Dataのデータ暗号化には、「データベース全体を暗号化する方法(SQLCipher)」や「保存するデータを個別に暗号化する方法(CryptoKit)」があります。
このトークでは、それぞれのメリット/デメリットを比較した上で、Core Dataにおけるデータの暗号化手法とその選定方法について詳しく紹介します。
参加者は以下の内容を学ぶことができます。
このトークを通して、「Core Data」の暗号化に必要なナレッジや各利点について理解を深めて頂ければ幸いです。
Apple Vision Proで空間ビデオを見るのは、まるでその場にいるかのようなリアルで素晴らしい体験です。この空間ビデオの記録にはMV-HEVC(Multiview High Efficiency Video Coding)という規格が用いられています。「Multiview」とは左右の目それぞれのフレームを指し、視差まで再現できるため、平面的なディスプレイにはないリアルさを感じられるようになっています。
では、どのように撮影を行えば良いのでしょうか?配信時に注意すべき点は?さらに、Vision Pro以外のユーザーにはどのように対応するのでしょうか?本トークではこれらの疑問に答えつつ、MV-HEVCに焦点を当て、この規格を理解し、空間ビデオの持つポテンシャルと具体的な活用方法について考察します。
規格自体のリリースは2014年と古く、両目の視差を利用した立体視に関してはさらに前から研究が行われており、ステレオスコピック動画の撮影のコツや、どんな表現に向いているのかについてはそれらを参考にできます。AVFoundationとVideoToolboxのAPIを使って2台のカメラで撮った動画から空間ビデオを作成する方法も紹介します。
このトークが、空間ビデオを活用した新しい魅力的な体験を構築する一助となれば、非常に嬉しく思います。
みなさん、UIWindowというクラスについてご存知でしょうか。
グローバルに画面最前面に要素を表示するHUD(Head up display)の実装を行う際などにUIWindowを用いることがよくあります。しかし、通常の開発で直接触ることは少ないためUIWindowについてあまりよく理解せずに使われていることも多いのではないでしょうか。
例えばUIWindowにおける表示順はUIViewのsubViewsにおける表示順などとは少し異なっているため注意が必要です。 isKeyWindow
がtrueなUIWindowが最前面であると思われたり、 UIApplication.shared.windows
の順番がUIWindowの表示順であると思われたりしがちですがどちらも間違っています。
また、複数のUIWindowを表示している際のステータスバーの挙動にも一癖あります。特定の画面でステータスバーを非表示にしたいようなケースでUIWindowの特性をちゃんと把握していないと意図した挙動を実現できないことがあります。
このトークではUIWindowがどういうものなのか、UISceneやUIViewとの関係性を踏まえて話しつつ、UIWindowの表示に関する挙動や利用する際の注意点について紹介します。
5月に発表されたように、Appleウォレットでマイナンバーカードを利用できるよう準備が進められています。
このトークでは、iPhoneにマイナンバーカードを搭載する際に重要となる以下の点について詳しく解説します。
これらの規格についての理解を深めるとともに、関連するAPIや実装方法についても紹介します。
このトークを通じて、iPhoneでのマイナンバーカードの利用に関する技術的な知識を習得し、
実際の開発や実装に役立てたり、デジタル身分証明書の未来を想像するきっかけになれば幸いです。
CPUにはSIMDと呼ばれる、一つのCPU命令で複数の値を演算できる高速演算機能が存在し
画像・動画・音声処理などパフォーマンスが求められるシーンで広く活用することができます。
実はSwiftにもSIMDがStandard Libraryに存在しており、VisionOS開発にも用いるRealityKitでも必要になることがあります。
このトークでは、SwiftのSIMDの利用方法を解説し、
パフォーマンスが求められるシーンでSIMDを利用できるようになったり
RealityKitなどでSIMD出てきた際に恐れず正しく使えるようになることを目指します。
具体的には以下のトピックを取り扱います。
・SIMDの基本的な型と役割
・SIMDの演算子と用途
SIMD自体の概要も説明しますのでSIMDを知らない人でも理解できる内容にしています。
また、SwiftのSIMDの設計アプローチも同時に解説することでSIMDへの理解を深めます。
Swiftは演算子オーバーロードやジェネリクスなどを活用し、C++などのSIMDに比べ簡潔にSIMDを利用することができます。
iOS/iPadOS向けにアプリ開発を行う際に、「ViewController」を意識しないことはほぼないのではないでしょうか?
iOS 2.0の「UIViewController」を皮切りに、様々なViewControllerが提供されてきました。
私たちはこれらを実装し、カスタマイズして利用してきたかと思います。
では、これまでどれだけのViewControllerが登場し、どのような機能が実装可能になったのでしょうか?
このセッションでは、これまでに登場したViewControllerを機能紹介とサンプルコードとともに振り返ります。
想定する方々:
・iOS/iPadOS、それら以外のプラットフォーム向けアプリ開発・企画者
ゴール:
・知らなかったViewControllerを知り、今後の参考にできる
・提供できる画面・機能の概要を把握できる
アジェンダ:
※対象は「UIViewController」または「UINavigationController」を継承したクラス
近年、デジタル空間における個人認証の需要が増す中、iOSではiOS 15.4からWalletアプリへ運転免許証や州IDの搭載ができるようになりました。
更には、iOS 16からWallet APIを通じた個人情報の共有、そしてiOS 17からはVerifier APIを用いた対面での個人情報の共有が可能となりました。
これらの機能はまだ米国でしか使えませんが、マイナンバーカード機能がiPhoneに搭載されることが発表されるなど、日本でもIDカードのデジタル化に対する期待が高まっています。
そこで、このセッションでは上記のデジタルIDに関連する機能が日本でも利用可能になった場合に備えて以下の内容を話します。
このセッションを通じて、日本におけるデジタルID時代を一緒に妄想し、将来に備えましょう!
Apple から WebKit 以外のブラウザエンジンを搭載したアプリを作成するためのフレームワーク「BrowserEngineKit」が登場しました。
この機能は EU 地域で、かつ Apple の定めた要件を満たしたサービス提供者のみに限られているものの、開発者は独自のブラウザエンジンを作成することが可能になります。
しかし BrowserEngineKit はセキュリティ向上のために複数の Extensionを組み合わせてアプリが構成されるため、どのように作成すればよいのかが難解です。
本トークでは Apple が公開したサンプルをベースに独自のブラウザエンジンの作り方が学べます。具体的には以下の内容をカバーします。
オーディオビジュアライザーとは、音楽のリズムや振幅、周波数成分などを視覚的に表現したものです。音楽系のアプリを使ったことがある方なら一度は見たことがあるウニョウニョ動くカッコいいあれです。
本トークでは、音楽ファイルを読み込み再生しながら、リアルタイムで高速フーリエ変換を実行し、オーディオビジュアライザーを表示するまでの方法について紹介します。高校数学レベルの数学的知識とSwiftでのアプリ開発経験があることを前提として、Swiftで一歩踏み込んだ表現をしてみたい方を対象とします。
話すこと
あなたのアプリは本当に安全に作られていますか?
Webアプリに比べて、おろそかになりがちなネイティブアプリのセキュリティ。
脆弱性診断を行うセキュリティエンジニアは、セキュリティに関するオンラインコミュニティ「OWASP」が発行する検証基準「MASVS」などをもとに、脆弱性診断を行っています。
また、彼らは、開発者が特に気をつけるべきセキュリティリスクを「OWASP Mobile Top10」として公開しており、これらを理解することは、セキュアなアプリケーション開発を行ううえで非常に重要です。
このセッションでは、実際にiOSアプリの脆弱性診断を行っている筆者が、OWASP Mobile Top10の中から特によく見かける脆弱性を紹介します。
そのうえで、それらに対する対策方法を解説し、各種脆弱性への理解を深めることを目的とします。
iOSアプリには、カメラを使ってQRコードの検出・読み取りを行う機能がよく組み込まれます。
しかし、この機能をアプリ内で実装するには、AVCaptureSessionを用いた入力デバイスや出力データの管理、AVCaptureVideoPreviewLayerを用いたカメラプレビューの表示、AVCaptureMetadataOutputからQRコードの情報の取得...など、多くの関連するクラスを扱う必要があり、複雑な実装を行わなければなりませんでした。
そこで登場するのが、VisionKitフレームワークです。
iOS 16以降に利用可能なDataScannerViewControllerを使うことで、カメラを使った検出・読み取りの機能をシンプルかつ簡単に実装できます。
このトークでは、以下の内容についてお話しします。
QRコードの読み取り機能に苦労していた日々は今日でおしまいです。
みんなで楽しくVisionKitフレームワークを学びましょう!
皆さんは声優さんになりたいと思ったことはありませんか?例えば、自分が声を当てたキャラクターがゲームで活躍する妄想をすると、ワクワクしてこないでしょうか。しかし、アフレコの実力や膨大な文章の収録などの技術面・コスト面の障壁があり、素人がキャラクターに声を当てるのは簡単ではありません。
本トークでは、誰でも自分の声のキャラクターをアプリに登場させる手段として、iOS 17にて追加されたアクセシビリティ機能「パーソナルボイス」を使用し、ユーザの声で自由に語句を発話させる方法について説明します。また、「誰でもゲームアプリ声優になれるアプリ」のデモを通じて、パーソナルボイスの実際の活用例をご紹介します。
具体的には次のトピックについて話します:
このトークを通じて、iOSの「パーソナルボイス」の導入および利活用方法と、ゲームキャラクターに命を吹き込む新しい方法を理解していただけます。「パーソナルボイス」があなたのアプリに「自分の声での発話」という新しい価値をもたらし、多くのユーザの夢を叶える一助となれば幸いです。
みんなー リョムキャットのパーフェクトSwiftネーミング教室はじまるよー
Swiftの関数名、どのように命名していますか?
本LTではSwiftの関数名の命名時に考えるべきことについて紹介します。
弊社には全くコメントを使わずに名前だけで全てを表しているプロジェクトがあり、弊チームでも追随してコメントをなくしていこう!という風潮になりました。
コメントを完全に消すのはまだ議論の余地があるところですが、たしかにコメントがないと処理がわからない関数名は是正していくべきでしょう。
そこから命名について思い悩む日々が始まりました。
体を名で表すのは至難の技で、もはや芸術の域です。
そんな中、 Apple は Swift API Design Guidelines という指針を提示しています。このガイドラインを読み解きながら、Swiftらしい良い命名について一緒に考えていきましょう。
このLTを通じて、パーフェクトでSwiftライクなグッドネーミングセンスを身につけられます!
LTで話すこと:
みなさんはCore Audioを利用してiOSで音声を扱ったことはありますか?
iOSではCoreAudioをはじめ、AVAudioPlayer/AVAudioRecorderやAVAudioEngineなどさまざまな音声を扱うAPIが存在しますが、どのAPIを使ってどのような音声処理ができるのか?を語られることは少ないと思います。
このセッションでは、オーディオデータの取得と処理技術、リアルタイム録音技術、再生技術を学び、iOSアプリケーションのオーディオ機能を強化するための実践的な例とベストプラクティスを紹介します。
本セッションを聴き終わった際にはあなたもiOSで音声処理を試してみたくなることでしょう
Swiftで組み込みシステムが開発できるようになると、どのような環境でもSwiftの強力な言語機能を活用できます。これにより、開発の効率性やコードの再利用性が向上し、多くの開発者にとって魅力的な選択肢となります。
これまで、Swiftは組み込みシステムなどのベアメタル環境で利用することが難しいとされてきました。しかし、最近では組み込みシステム向けのSwiftが登場し、新たな可能性が広がっています。
従来、組み込みシステムの開発は主にC言語が使われていましたが、現在ではSwiftでの実現も近い将来の話ではありません。
このトークでは、以下の内容をお伝えし、皆さんがSwiftで組み込みシステムを開発するための第一歩を踏み出せるようにサポートします。