iOS は一見、テキスト入力や表示のような基本的実装はとても簡単に思えますが、実際には一度はその動作に頭を悩ましたことがあるでしょう。
iOSDC 2020 では「iOS のキーボードと文字入力のすべて」と題してこれらの問題について詳細に検討しました。
そして、この3年間で iOS は大きく変化し、SwiftUI が広く使われるようになり、全く新しいAPI、TextKit 2 が登場しました。
TextKit 2 は大きく変化しおり、互換性に関して注意すべき点が多くあります。
このセッションでは、過去の事例と比較して、多くのユーザが使う iOS アプリにおけるリッチテキストの実装などを踏まえて、
キーボードの挙動や SwiftUI、そして TextKit 2 によって変わったテキスト処理について実装例を用いて検討していきます。
対象とする方: iOS アプリ開発の経験がある中・上級者
AVPlayerでHTTP Live Streamingを再生する際、ネットワーク、暗号化、コーデックなど様々な事が原因でエラーが発生します。しかしこのエラーについては十分なドキュメントがありません。
実際に観察してみるとエラーが起こるタイミングが再生開始時か再生中かによっても内容が変わってきます。しかもエラー発生時にAVPlayerは内部でリトライなどの復帰のための高度な試みを行っているようにさえ見えます。
どんな場合に、どのような挙動になるのか?エラーは検知可能か?そのハンドリング方法は?
これまでAVPlayerを利用してきた中で知った知見を共有しつつ、皆さんとも是非「ここが大変だったよ」「こんなエラーがあったよ」といった内容でワイワイ出来たら嬉しいです。
2021年、AirPodsにヘッドトラッキング機能が付いた際「空間オーディオ」という単語が注目を浴びました。頭を動かしても音源の位置が変化せず、あたかも現実世界に存在するかのような自然な体験…今思えばこれはApple Vision Proへの布石だったのかもしれません。
Appleによる空間オーディオは、ハードウェアとソフトウェアを組み合わせた統合的な体験であり、そのベースには映画館でもお馴染みのオブジェクトベースの音のレンダリング技術、Dolby Atmosなどが利用されています。
今一度、空間オーディオとは何かを技術的に捉え、どんなAPIがあるのかを詳しく見て行きましょう。
visionOSの話?いえいえ、実はiPhoneはiPhone XSからDolby Atmosをサポートしています。アプリやサービスに空間オーディオを活用できないか、その可能性を一緒に探ってみませんか?
iOS16からMetalの新しいシェーダおよびパイプラインであるオブジェクトシェーダ・メッシュシェーダ・メッシュレンダーパイプラインが追加されました。
これは既存のレンダリングパイプラインをさらに柔軟に扱えるようにするもので、この適用例としてスタンフォードバニーに毛を生やした画像が印象に残っている方もいるはずです。
セッション中では説明をシンプルにするために平面上に毛を生やす例を挙げて本機能の説明がされていました。
「これは…これは毛というより草じゃないか!草だ!!草が生やせるぞ!!!」
と、喜び勇んでリンクされていたサンプルコードをダウンロードしてみたのですが、そこにあったのは残念ながら本機能を使った別の適用例でした。
文字通りまさに草も生えません。
しかし手段があると知ってしまった以上、そこで諦められるわけがないのです。
「iOSDCで…伝えなければ…草を生やす方法を…!」
長く運用されるサービスのアプリは、iOSやSwiftのバージョン・ビジネスのフェーズ・メンバーの入れ替えなど、さまざまな変化に追従しなければなりません。
一方で、日々機能の追加や改善を積み上げる中で同時に変化へ対応するのは難しく、ある時点での保守的な意思決定が後に負債となって跳ね返ることもよくあります。
このトークでは、様々な理由によって積み上がってしまった負債を解消するためにリアーキテクチャを行う選択した時に考えたこと・行ったことをお伝えします。
これらを実例とともに提供することで、聴衆の皆様が大小様々な負債を戦略的に解消していく助けとなることを期待しています。
標準NavigationBarにできないことをしたくてカスタムNavigationBarを作ってみました。挙動を標準NavigationBarに近づけるためにしたこと、カスタムしたことによる不具合への対処法をお伝えします。
最近のXcodeは動作可能な最小のOS要件が厳しく、最新に近いmacOSのバージョンが求められます。
現実的な悩みで、昔のプロジェクトを動かす時に当時の古いXcodeをインストールできず、少し試したいだけでも新しいXcodeに対応する改修が必要になってしまいます。
そこで救世主となるのがAppleが提供してる仮想マシンを作成するためのVirtualization Frameworkです。これを利用することで任意のmacOSを仮想マシンにインストールできます。
これらを試しているうちにもしかして「Xcode 1.0」もインストールできるのでは!と思い立ち、試行錯誤を繰り返しました。
はたして2023年に Xcode 1.0を動かせたのか!?その奮闘記をお送りいたします。
最近のXcodeは動作可能な最小のOS要件が厳しく、最新に近いmacOSのバージョンが求められます。
現実的な悩みで、昔のプロジェクトを動かす時に当時の古いXcodeをインストールできず、少し試すだけでも新しいXcodeに対応する改修が必要になります。
そこで救世主となるのがAppleが提供してる仮想マシンを作成するためのVirtualization Frameworkです。これを利用することで任意のmacOSを仮想マシンにインストールできます。
これらを試しているうちにもしかして「Xcode 1.0」もインストールできるのでは!と思い立ち、試行錯誤を繰り返しました。
トーク内容
・2023年にXcode 1.0をインストールするための試行錯誤
・少し古いXcodeを動かす方法とTips
はたして2023年に Xcode 1.0を動かせたのか!?その奮闘記をお送りいたします。
tvOSアプリ開発ではiOSアプリではあまり気にする必要のなかったフォーカスシステムへの理解が必須で、それがtvOSアプリ開発を難しくする所以でした。
そしてWWDC23で発表されたvisionOSでもフォーカスシステムへの理解が必須になると予想されます。
というのも、visionOSにはEye Trackingが採用され、目で特定のオブジェクトにフォーカスを合わせ、指で選択・決定するというUIが基本となるためです。
このLTでは3分で簡単にtvOSアプリのフォーカスシステムに入門し、後半2分でvisionOSではフォーカスをこう扱うという予想をお伝えできればと思います。
iOS15で登場したSharePlayについては iOSDC Japan 2021でも紹介しました。
そして先日のWWDC23で念願のApple Vision Pro/visionOSが発表され、SharePlayの一連の仕様はこのためだったのか!と全てが繋がりました。
このトークセッションではSharePlayを未知のかたでもわかるようSharePlayの歴史を振り返り、SharePlayについて簡単に復習した後、後半のメインディッシュはApple Vision ProでSharePlayはこう使われる/使える!という部分にフォーカスし、SharePlayについて堪能する20分をお届けします。
普段開発をしていると触らない方が難しいOSS。
XcodesApp などアプリ自体を OSS で開発しているものもあります。
業務の開発では重宝されながらもOSSアプリプロジェクトではなかなか実現できない手法、それは Beta 版アプリ配布です。
証明書の問題、配布先の問題をはじめとした様々な問題がありますが、それを乗り越える方法が存在します。そう、 Xcode Cloud と TestFlight です。
このトークでは、実際にOSSのアプリプロジェクトで行ったBeta版アプリ配布の経験をもとにOSSアプリプロジェクトでBeta版アプリ配布を安全に行うにはどうすれば良いかについて話します。
このトークの内容をもとにご自身のOSSアプリプロジェクトに対してBeta版アプリ配布を入れてみませんか?
では、良いOSSライフを!
私は普段Androidアプリ開発を生業としています。「iOSもできるようになりたい!」と思いつつも、時が経ち、Compose for iOSといったマルチプラットフォーム技術も台頭してきました。そして「iOSを学ぶ意義」を考える機会が多くなりました。「KotlinでiOS開発もできるじゃん!」と思いつつもSwiftでSwiftUIを書き、ネイティブ開発を理解しておくことは重要だと考えています。そこで本LTでは、そんな今だからこそAndroidエンジニアもiOS開発を学ぶ必要があると考え、Compose for iOSによるiOS開発とSwiftUIによるiOS開発を比較しつつ、両者の違いやそれぞれのメリット・デメリットを整理することを目指します。どちらの技術も将来性があり、今後より活用されていくと予想されるため、この機会に両者を理解し、適切な技術選定ができるようになりましょう!
iOSアプリ開発でもユニットテストによるテスト自動化の考え方が一般的になり、モバイルアプリ開発専用のCIサービスの存在やGitHub Actionsなども気軽に使えるようになったため、みなさんも開発する機能に対して多くのテストコードを書かれていることでしょう。しかしそれにより大量に書かれるテストコードの一部が、CI上でたまに失敗するなど、その原因究明に時間を割かなければならない新たな問題も発生しているのではないでしょうか?
私自身、昔はどうしても解決する時間がないテストを放置したり、無効にしてしまったこともあります。しかしそれに向き合って解決することで、安定したテストコードを簡潔に書くという学びを得られました。
本トークでは、不安定なテストコードの原因と対処について話したいと思います。みなさんのテストが安定し改善できるきっかけになれば幸いです。
「モバイル開発に入門するならiOS?Android?」あるいは「SwiftとKotlinってどう違うの?どっちを学べばいいの?」そんな質問をする機会・される機会は多々あるのではないでしょうか。私はAndroidを専門にやっており、Android・Kotlinが大好きです。どちらかと言われたらAndroid・Kotlinを勧めますが、正直iOS・Swiftの良さを理解できていないのが現状です。両者の違いや共通点を深く理解し、どちらから学ぶかを選べることは、エンジニアとして必要な素養だと思います。そこで本セッションでは、Kotlin Multiplatformの台頭やiOS人気の高い日本という市場などの情勢はもちろん、iOS・SwiftやAndroid・Kotlinの仕様・デザインガイドラインを整理し、モバイル開発に入門するならどちらか疑問に適切に答えられるようになることを目指します。
「swift-markdown」は、Apple自身が開発を進めているSwiftでMarkdownドキュメントのパース・編集を行うためのライブラリです。
swift-markdownは、Swift言語との親和性が高く、かつGithubで使用可能なMarkdown構文に準拠していることが特徴です。開発が開始されてまだ日が浅いものの、今後、iOSでMarkdownに関連したアプリを開発する上では有力な選択肢となることが期待されます。
本稿では、Markdown機能を組み込みたいとお考えの方へ向けて、他のMarkdown機能実装手法との比較を通じて、swift-markdownの特徴や利用シーンについてご紹介します。
また、簡単なMarkdown構文を題材に、SwiftUIを使用してMarkdown表示を行うことを目標に、サンプルコードを交えてアプリに組み込む方法についてもご紹介します。
Swiftのenumは強力ですが、case名の動的取得が直感的ではなく、開発者にとって不便な点となっています。
この問題を解決すべく、SwiftSyntaxMacrosを用いてenumのcase名を効率的に取得する方法を紹介します。
私たちがenumを用いて開発を進める中で、enumのcase名を必要とする場面がありましたが今までのSwiftの仕様では難しいものとされていました。
しかし、今回のWWDC23ではSwift Macrosが登場し、簡単に取得できるようになりました。
本発表では、Swift Macrosを使用した具体的なコード例と、使用の注意点について解説します。
これにより、聴衆の皆様にはSwift開発の品質向上と効率化を実現する新たな視点を提供できることを期待しています。
Swift Macrosの魅力を共有し、Swiftの世界をさらに深く探求していきましょう。
Swift OpenAPI Generatorとは、Appleから提供されているSwift Package Managerプラグインで、OpenAPIドキュメントからSwiftのクライアントとサーバーのコードを生成することができます。
他にもあるOpenAPIドキュメントからコード生成するツールとは違いSwiftPM製のプラグインなのでXcode内で利用することができます。
このLTでは、以下の内容を話します。
ユニットテストのテストコードにおける3-Aパターン、Arrange-Act-Assertについて知っていますか?Arrangeは前提条件と入力、Actは処理の実行、Assertは期待した結果が得られているかを検証します。さてこのパターン、何かに似ていますよね? そうです、サウナ-水風呂-外気浴というパターンそのままなのです。
まだあります。浴室では必ず先に体を清めますが、これXcodeのXCTestでsetupメソッドにより状態をクリアするのと実質同じですし、サウナのセットを繰り返すことは、Xcodeにもテストを自動で繰り返す機能が備わっているのと本質は同じでしょう。さらにスタブ、これはもうバスタブから来てるのは誰でもわかりますよね。
本トークは私のおすすめなサウナ利用について紹介することで、皆さんがテストコードだけでなくサウナで心身をととのえるられる事を目的としています。
WWDC2023でSwiftDataが発表されました。
なぜ多くの人がSwiftDataに期待するのかといえば、それはCore Dataが辛い(つらい)からでしょう。
特にCore DataはSwiftUIやSwift Concurrencyなど一緒に使おうとすると工夫が必要です。
データ更新の監視と再描画、マルチスレッドでのデータ操作などには多くの困難を伴います。
またスキーマ定義がGUIなことなど、昔ながらの辛いポイントもあります。
このセッションはCore Dataの辛さ、困難を認識し、その視点からSwiftDataがなぜ必要かを感じるためのものです。
具体的にSwiftDataについては触れませんが、その必要性を感じていただけるものを目指します。
Xcode Cloudは言わずもがなAppleが提供するCI/CDサービスです。
このXcode Cloudをみなさんは最大限活用できていますか?
Xcode CloudはGitHub Actionsと併用することで非常に強力なデプロイ環境となることをご存知でしょうか?そしてその環境の構築は非常に簡単です。
本セッションではXcode CloudとGitHub Actionsを併用する弊社のデプロイ環境を題材に実際に環境構築しながらその使い方や実際のデプロイ環境について解説を行います。
具体的には下記について話します。
・ リリースフローの解説
・ 環境構築の方法
・ Xcode CloudとGitHub Actionsを併用するメリット
・ ミニマルにデプロイ環境を構築するメリット
これを機にみなさんのプロジェクトにもXcode Cloudを「より効果的に」導入してみませんか?