2021年、AirPodsにヘッドトラッキング機能が付いた際「空間オーディオ」という単語が注目を浴びました。頭を動かしても音源の位置が変化せず、あたかも現実世界に存在するかのような自然な体験…今思えばこれはApple Vision Proへの布石だったのかもしれません。
Appleによる空間オーディオは、ハードウェアとソフトウェアを組み合わせた統合的な体験であり、そのベースには映画館でもお馴染みのオブジェクトベースの音のレンダリング技術、Dolby Atmosなどが利用されています。
今一度、空間オーディオとは何かを技術的に捉え、どんなAPIがあるのかを詳しく見て行きましょう。
visionOSの話?いえいえ、実はiPhoneはiPhone XSからDolby Atmosをサポートしています。アプリやサービスに空間オーディオを活用できないか、その可能性を一緒に探ってみませんか?
非公開の業務用iOSアプリには、長らくADEP(InHouse配布)が使われてきました。しかし、2020年にADEPの新規契約は事実上受付停止となり、2022年からはその更新が審査制に変わりました。
InHouse配布を使ってきた企業はこれから毎年、
という選択を迫られることになります。こうした背景をふまえて本トークでは、ADEP更新の審査基準や更新拒否された後のアプリ挙動、カスタムApp移行の手順や留意点、メリット・デメリット、カスタムApp以外の選択肢(AdHocや非表示Appなど)についてご紹介します。
昨年の「正規表現って結局何なのさ?〜エンジニアのためのコンピューターサイエンス入門〜」では主に理論の面から正規表現が何なのか話をさせて頂きました。
対して今年は実際に正規表現エンジンの実装に関する話をします。
正規表現エンジンの実装ではオートマトン型と仮想マシン型が主流です。
前者は正規表現から決定性有限オートマトンを、後者は、正規表現をバイトコードにコンパイルし仮想マシンを作成する方法です。
いずれの方法でも正規表現からオートマトンや仮想マシンを生成しなければならず、その実装はそれなりに大変です。
しかし正規表現が文字列にマッチするかどうかの判定であれば正規表現を"微分"するという方法があるのです。
本セッションではその原理と簡易的な実装を紹介します。
またオートマトン型、VM型との比較も可能な限りお伝えします。
NSAttributedStringとSwiftUIのMarkdown対応により、
誰もが1度は「僕の考えた最強のMarkdownエディタ」を作る夢を見たでしょう。
エディタには、見出し・太字・リストなどの記法を簡単に入力できるボタンが欲しくなります。
その時に「正規表現で実現できそう」と考える人がいるかもしれません。
そう、過去の私です。
しかし、正規表現を用いた実装は失敗に終わります。
このセッションではその失敗をもとに、
SourceLocation
をUITextViewで扱う方法について話します。
このセッションを聞くことで、みなさんもオリジナルのMarkdownエディタが作れるようになります!
バックグランドURLSessionとは、アプリがバックグランドに行っても、終了されても、別プロセスでデータ通信が可能なURLSessionです。
バックグランドで長時間ダウンロードする必要がある時のみ使われるイメージはありますが、アプリやWidgetに必要な情報の先読み、バックグランドに行ったことによるタイムアウトの回避にも使えます。
Date taskがサポートされず、upload taskかdownload taskを使う必要があるので、使い方は少し特殊ですが、一度対応しておけば普通のURLSessionと同じ使い勝手になるので、バックグランドURLSessionを一般的な通信で使ってみませんか。
本トークでは、以下のトピックについて紹介します。
私たちのチームで開発しているアプリは7カ国向けのローカライズを対応しています。
ローカライズのテキストは外部へ依頼して翻訳してもらった後に、手作業でスプレッドシートからLocalizable.stringsへコピペをする必要があったため
人的ミスが発生する原因となっていました。
そこで、ローカライズファイルの静的検査ツールである、L10nLintというコマンドラインツールを開発し、
実際に自分たちのチームで運用がされています。
このツールには、Baseファイルと比較したときのkeyの抜け漏れ検知や、並び順のチェック、
簡体字と繁体字が混合していないかなどのチェックなどの様々なルールが含まれています。
また、Danger経由でPull Requestへコメントを行うためのプラグインもリリースしています。
本トークではこのツールのご紹介を予定しています。
カフェのような喧騒の中でも、Shazamがどのようにして音楽を精度良く認識しているかご存知ですか?
このライトニングトークでは、WWDC2023でアップデートが発表されたShazamKitの核心となる技術、オーディオフィンガープリントに焦点を当て、その神秘を解き明かします。
わずか数秒のフレーズから全曲を特定し、騒々しい環境でも音楽を正確に認識する方法を、その驚くべき技術と共に掘り下げます。
5分間の発表で、楽曲を視覚化するスペクトログラムから始まり、音楽の「指紋」となる時間と周波数の2次元の星座図について説明し、そして、この「指紋」がどのようにデータベース内の楽曲とマッチングし、最終的に特定の曲を見つけ出すのかを明らかにします。
普段あまり触れることのない音楽認識技術の面白さを共有し、皆さんに新しい発見をしていただけることを期待しています。
パフォーマンスにネガティブな影響のあるコードは、意図せず簡単に書けてしまいます。
例えば、配列の中で条件に合う最初の要素を取得する場合はどうでしょうか?
配列に対し filter を適用した後に first を適用するよりも、first(where:) を用いる方が速いでしょう。
ならば、どのくらい速いのでしょうか?
このトークでは、パフォーマンスが悪化しうる6つのケースを挙げ、どのくらいの差が出るのかを実験・検証します。
実験の対象とする6つのケース
対象者
「せっかく買ったiPadを活用できないまま放置している」、「SwiftUI触る機会がない」、「Macは持ってないけどiPadならある」、「iPadでプログラミング学習をしたい」
そんな方にオススメしたいのがiPadでアプリ開発です!
ついこの前まで私自身もiPadを活用できずに放置ぎみで、SwiftUIも書いたことがない状況でした。
このままiPadをろくに使わずに手放すのは悔しかったので、iPadだけでアイコン作成、スクリーンショット作成、アプリの開発・公開まで全てを完結させるチャレンジをしてみました。
使用したツールや難所の紹介、得られた学びをお伝えできたらと思っています。
これを見て是非皆さんにもチャレンジしてみていただきたいです。
CoreBluetoothは、Appleが出しているiOSアプリでBLEを利用するためのフレームワークです。
BLEを利用することで、消費電力を低く抑えつつ、様々なWebサービスやアプリ、ハードウェアと連携したiOSアプリを開発できます。
しかしながら、BLEに関する用語や概念がわかりにくいと感じることがあるかもしれません。
今回のLTでは、CoreBluetoothを活用したデモアプリのコードを用いて、
BLEプログラミングの基礎から距離推定までをわかりやすく解説します。
まずは、BLEの基礎となる用語や概念を説明します。
その後、デモアプリのコードを用いて、実際にBLEプログラミングを行う方法を解説します。
更に、RSSIとTxPowerからの距離推定についても説明します。
ぜひこの機会にBLEプログラミングを学び、日々の開発に役立てていただけると幸いです。
Apple標準フレームワークでお馴染み「MapKit」ですが、
「ただ地図にピンを立てるだけ」ではなく様々な機能がいくつもあることを、みなさん知っていますか?
実はMapKitには毎年新機能が追加され、年々出来ることも増えてきています。
など、このLTでは実際にプロダクトに導入した経験も踏まえ、
MapKitを使い無料で実現できる様々なカスタマイズや機能についてご紹介します!
オンボーディングでこのような課題に直面したことはありませんか?
私たちのチームではこれらの課題を解決するために、本番のプロジェクトに近いアーキテクチャと構成を持つチュートリアルプロジェクトを作成し、実際の開発に近いフローでのオンボーディングを行なっています。
また、新メンバー向け以外にも課金やCI/CDなどの難易度の高い知識のキャッチアップや新しく公開されたAPIのPlaygroundとしても活用しています。
本トークでは、技術のキャッチアップを促進するためのチュートリアルプロジェクトの具体的な活用方法を紹介します!
このトークが少しでも皆様のチームのオンボーディングの参考になれば幸いです。
iOS15以前では、画面の向きを制御するために shouldAutorotate
を設定したりUIDevice.current.setValue
を使用して強制的に値をセットする方法が取られていました。iOS16では shouldAutorotate
が非推奨になり、
公式から setNeedsUpdateOfSupportedInterfaceOrientations
という新しいメソッドが登場しました。本発表では、以下のような注意すべき点・変更が必要な点を主に解説した上で、このメソッドを使って新しい画面の向き操作について紹介します。
Info.plist
の書き方の違いWWDC23でApple Vision Proが発表されました。Vision Proでは手の動きや音声でUIを魔法のように操作していました。しかし高精度なカメラやセンサーがなくとも手元のMacと標準フレームワークだけでも同様のことは可能です。
皆さんもご存知の通り、Swiftには画像認識、音声認識などが簡単に行えるフレームワークが充実しています。これらを使いユーザの行動を認識しそれに応じてCGEventを発生させることで「非接触でMacを操作する」といったことが実現できます。
本LTでは以下のようなフレームワークを使いMacを非接触で操作する技術を実際のデモを交えながら紹介します。今日から皆さんのMacも未来に近づくこと間違いなしです。
・Visionフレームワーク
・Speechフレームワーク
・Core Motionフレームワーク
UI作成において、Compositional Layout(複数のセクションを一つのUICollectionViewインスタンスで管理するためのレイアウト)を使用すると、特定のセクションだけのスクロールイベントを取得するのが難しいという問題があります。
これは、通常の方法(デリゲートメソッド)では全体のスクロールイベントは取得できるものの、セクションごとのスクロールイベントを直接取得することはできないためです。
例えば、セクションごとにUISegmentedControlを設置するといったケースでは、この問題を解決するために工夫が必要となります。
その一つの方法として、visibleItemsInvalidationHandler(表示中のセルが変わった時に呼ばれるハンドラ)を利用する方法があります。
具体的な使用例とその効果について、このLTで解説します。
みなさんはSwiftUIで非同期処理データの状態管理をどう行なっていますか?
enum DataState { case loading; case success(Value); ... }
LoadingContent(fetch: fetch) { Content($0) }
などがあると思いますが
等の要件で、微妙に異なるバリエーションがいくつか存在する上、それらの方法にはメリットとデメリットがあります。
パフォーマンス低下を引き起こしていることも...。
このトークは、このような状態管理方法を複数個、実装ケースと共に紹介・考察し
それぞれの方法がどのような実装ケースに適しているかを分析・分類していく内容となっています。
WWDC2020で発表されたStoreKit testingは,テスト用のフレームワークです.
UnitTestとして課金テストを実行することはもちろん,StoreKit testingに必要なStoreKit configurationを用いると様々な恩恵を得ることができます.
動作環境がiOS14以上なStoreKit Testing.
導入自体は簡単なため,サクッと皆様のアプリにも取り入れませんか?
Swift OpenAPI Generatorとは、Appleから提供されているSwift Package Managerプラグインで、OpenAPIドキュメントからSwiftのクライアントとサーバーのコードを生成することができます。
他にもあるOpenAPIドキュメントからコード生成するツールとは違いSwiftPM製のプラグインなのでXcode内で利用することができます。
このLTでは、以下の内容を話します。
iOSのオーディオ関連APIを本格的に触るのはしんどいですが、そのしんどさをラップしてくれるフレームワークもいくつか用意されています。2Dゲーム開発用のSpriteKitもその一つで、これを使えば非ゲームなアプリにも簡単に空間を感じる効果音を追加することができます。ゲームエンジン界ではやや日陰な存在のSpriteKitを使って手軽に3D音響をアプリに加える方法をコード例を交えて紹介します。
このトークでは、普段育児に忙しい父親が2歳の娘に向けて開発したレジスターアプリを紹介します。デザインや音声読み上げの工夫を通じて、子供たちが楽しく遊べるアプリを作る方法をご紹介します。具体的には、iOSのHIGを2歳児向けに解釈したシンプルで親しみやすいデザイン、タッチイベントの使い方や誤操作の防止、音声フィードバックの実装、数字や色の認識、その他の試行錯誤と娘の反応フィードバック集の紹介などを行います。最後には、実際に作成したレジスターアプリのデモンストレーションを行います。このトークを通じて、2歳児向けアプリのデザイン原則と音声読み上げの活用方法を学び、親子で楽しめるアプリ開発に役立つ知識を得ることができます。