2023年秋に公開されたwatchOS 10では、Apple Watchのインターフェースが大きく変わり、TabViewやNavigationStackなどのUI/UXが大幅に変化しました。
このセッションでは、SwiftUI、WidgetKit、Live ActivityなどのiOSにおける一般的な技術要素をApple Watchでどのように適用していくべきかを体系的に学びます。特に、より使いやすくなったwatchOS 10のアプリ開発における重要なトピックを深掘りします。
また、ComplicationやスマートスタックがApple Watch上でどのように動作するかについても詳しく解説します。
このセッションをご覧いただくことで、iOSエンジニアがApple Watchアプリの開発を始めるための基礎知識を得ることができます。これまでの知識を他のAppleプラットフォームに応用し、スキルの幅を広げる最初の一歩を踏み出しましょう。
iOSDC Japan 2023でご好評いただいた「SharePlayの歴史と進化」の続編です。
このセッションでは、iOS18でのSharePlayの進化や、今年ついに発売されたApple Vision ProでのSharePlayの利用方法について詳しく解説します。
20分のセッションでは、SharePlayの歴史を振り返りながら、iOS18での新機能やアップデート内容、そしてApple Vision Proでの実際の利用シーンを紹介します。SharePlayの最新情報にどっぷりと浸かることができる内容です。
具体的な内容は以下の通りです。
このセッションを通じて、SharePlayの新しい可能性や利用方法について深く理解していただけることを目指しています。ご期待ください。
iOS黎明期、スマホアプリにおいて位置情報・地図は花形の機能でした。多くのiOSエンジニアがMapKitやCore Locationを扱った経験があるでしょう。しかし一方で、我々はそんな古くから知っているはずの位置情報や地図について、実はあまり知らないのではないでしょうか。たとえばポケモンGOのように、人が歩ける・立ち入ることのできる場所に絞ってモンスターを配置するにはどう実装するのでしょうか。
位置情報を持つデータを扱うアプリケーションを総称して、GIS(地理情報システム)と呼びます。本セッションでは、GISの基礎として、地図のようなアプリケーションを構成するデータや技術について紐解き、それらをiOSで扱う方法について解説します。地理情報のデータ形式とその扱い方を学ぶことで、前述の地図へのモンスター配置のような実装方法も分かりますし、国土地理院が配信している地形図や航空写真、JAXAやNASAの衛星データなどの外部データもiOSで活用できるようになります。またPLATEAUで配布されている3D都市モデルの活用についても解説します。
与えられたお題をSwiftで書いてコードが短い方が勝ち、というルールのSwiftコードバトル、決勝戦です。
毎年新しい機能が発表されますが、実際のプロジェクトでは古いOSをサポートしなければならない都合でこれらの機能をすぐに採用することが難しいことが多いです。そこで、導入したい新しい機能を古いOSにバックポートしてすぐに使えるようにする方法について説明します。
iPhoneのカメラは年々進化しており、さまざまな用途で使用されるようになってきています。例えば、近年ではiPhoneのカメラを使用して、映画やYouTube動画を撮影するクリエイターも登場しています。
このようにiPhoneのカメラがさまざまな用途で使われる中、DockKitフレームワークが発表されました。DockKitフレームワークのAPIを組み込んだビデオカメラアプリを、DockKit対応スタンドにセットすることで、人物を自動で追尾するようにDockKit対応スタンドを動かすことができます。
しかし、DockKitフレームワークはWWDC2023で発表されていたものの、DockKit対応スタンドが発売されたのはつい先日で、DockKit対応スタンドを使用して、開発者がどのような機能を利用できるのかについてはあまり知られていません。
このセッションでは、DockKitフレームワークの基本的な概要やAPIの説明から始め、DockKitフレームワークで開発者ができることを体系的に紹介します。セッション中はベルキンのAuto-Tracking Stand Pro with DockKitを使用したデモを交えて説明します。
SwiftUIの登場によって、画面のStateを使ってUIを構築するState-Drivenなアプローチが可能になりました。
クライアントでは、バックエンドからいくつかのAPIをコールし、それらを組み合わせて画面のStateを構成し、SwiftUIのViewに渡すことでUIを表示することができます。
では、画面に一つのAPIで画面のStateをそのまま受け取れる場合、クライアント側にはどのようなロジックが残るでしょうか?
if文やSwitch文のような分岐を持たないアプリは実現できるのでしょうか?
本トークでは、BFF(Backend for Frontend)と呼ばれるクライアント用の中間サーバーを活用し、
可能な限りロジックをバックエンドに寄せたServer-DrivenなUI構築を実務で取り組んだ経験を通して
といった、クライアントが可能な限りプレゼンテーションロジック以外を持たない構成とその活用について紹介します。
さらに、本トークでは実際にBFFの導入が難しい方に対しても、極端な事例を通じて
といった疑問への一つの指針を提供します。
昨年の『複雑さに立ち向かうためのコードリーディング入門』ではコードの読み解き方に焦点を当てましたが、今回はソフトウェア開発全体における複雑さについて詳しく解説します。
私たちエンジニアは、日々さまざまなタスクに取り組んでいます。仕様の理解、ドキュメントの作成、タスクの見積もり、チャットやミーティングでの議論、新しい技術の学習など、多岐にわたる作業があります。このような状況で、「やることが多すぎて頭がフリーズしてしまった」という経験をしたことはありませんでしょうか?
人間の脳には限界があり、その限界を超えると物事を複雑に感じてしまいます。では、この複雑さに立ち向かうために、私たちができることは何でしょうか?
実は、私たちが日常的に行っている活動の中には、必要以上に脳へ負荷をかけているものが多く存在します。この負担を認識し、軽減することができれば、複雑さから解放され、より重要なことに注力できるようになります。
本トークでは、以下のテーマについてお話しします。
本トークが、皆さまの日々をより充実させる一助となりましたら幸いです。
iOSは、SwiftUIやUIKitなど複数のフレームワークで構成される強力なプラットフォームです。私たちのアプリは、これらのフレームワークが公開しているAPIを利用して構築しますが、実際にはまだ見ぬ多くの機能がフレームワークに隠されています。
このトークでは、iOSの隠されたAPIを解き明かし、その活用方法について詳しく説明します。具体的には、以下のポイントに焦点を当てます。
Swift 5.5のリリースから早3年、Swift Concurrencyは日々の開発に普及しつつあります。非同期処理を手軽に扱えるようになりましたが、あなたの実装には大きな落とし穴があるかもしれません!
アプリケーション開発において、メインスレッドの健全性はユーザー体験を左右する重要な要素です。メインスレッドがブロックされると、UIの遅延やフリーズが発生し、ユーザーにとってストレスフルな体験となります。
このトークでは、Swift Concurrencyを使った非同期処理におけるメインスレッドのブロックリスクを見極めるため、クイズ形式で知識を深めます。
以下のトピックを扱ったクイズを出題します。
皆さん、バイナリ形式で配布されるSDKがx86_64のシミュレータしか同梱されていない状況に困ったことはありませんか?
本トークでは、実機向けバイナリをARM64シミュレータ向けに変換する作業を通じて、アプリのバイナリを解析する手法を紹介します。
具体例としてLive2D Cubism SDKを取り上げ、必要なツール(lipoとotool)、バイナリ解析の基礎、バイナリ変換手法、動作確認までを丁寧に解説します。
基本的なiOS開発の経験があれば十分です。ARM64アーキテクチャに関する知識やバイナリ解析の経験がなくても問題ありません。
このトークを通じて、バイナリ解析の楽しさを少しでも伝えられればと思います。お楽しみに!
2024年5月1日以降、AppleはApp Storeへの提出におけるプライバシー要件をアップデートしました。
アプリ本体ではプライバシーマニフェストの追加が必要になり、これに加えてサードパーティーSDKではコード署名も必要になります。
プライバシー要件のアップデートは、すべてのiOSエンジニアにとって重要なトピックと言えます。
ただ、必要な対応についての情報は少なく、各社や個人でどのように対応しているかは掴みづらい状態です。
そこで本セッションでは、ヤプリで5月1日までに進めた実際の対応と、その後の運用体制を紹介していきます!
具体的には以下の内容をお話しします。
プライバシーマニフェストとは?というところからスタートし、一般的なユースケースでの対応フローを理解した後、最後にプラットフォームでの運用体制を知っていただければと思います。
実践事例を通して、ご自身のアプリではどういった対応が必要なのかや、今後どのような運用フローとするかを検討する一助となること間違いなしです!
こんなお困りごとはございませんか?
・ 『サーバー、ネットワークの障害でアプリが使えなくなる』
・ 『現場のWi-Fiが弱く、アプリがサクサク使えない』
・ 『施設が混雑した際にネットが遅くなり、現場の業務に支障がある』
・ 『災害時に備えたいが、ハードウェア追加はコストが合わない』
Dittoは、インターネットなしでの快適なデータ同期を実現するSDKです。
自動的にメッシュネットワークを構築し、データを中継します。
また分散していてもデータがコンフリクトしない仕組みを持っています。
レストランのような、通信が売上に直結する場所、
飛行機などの、インターネットが不安定な場所での活用が増えてきています。
このセッションでは、Dittoの仕組みと使い方について詳しく紹介します。
ウェルスナビは「働く世代に豊かさを」というミッションのもと、自動で資産運用を行うロボアドバイザーサービスを提供しています。
私たちの開発組織はアジャイル開発体制を採用しており、迅速かつ効率的にサービスを提供するための組織作りを進めています。
また、ロボアドバイザーサービスにとどまらず、働く世代の幅広いお金の悩みを中立的な立場からオンラインで解決する総合アドバイザリー・プラットフォーム(MAP: Money Advisory Platform)の開発にも取り組んでいます。
資産運用に特化した一つの「サービス」から、お金の悩みを解決できる「プラットフォーム」にしていくために、モバイルアプリとして必要なことは何か。
サイボウズではkintone、 サイボウズ Office、 Garoonの3アプリを主に開発しています。
これらのアプリは開発開始時期によって利用技術がまちまちで、認証機能など共通の機能であってもそれぞれで再実装していました。
そこで、サイボウズ Officeアプリの開発時に蓄積した経験に基づいて、共通部分をSwift Concurrencyやswift-async-algorithmsを活用した共有のSwift Packageにすることにしました。
抽象度を高めることで複数プロダクトに適用できる、機能の境界が明確な複数のPackageができました。
コードが8000行削減されたり、RxSwift/UIKitからSwiftUIへの置き換えを加速したり、それぞれのプロダクトでの課題解決が進んでいます。
この取り組みの中でWKWebViewをSwiftUIでラップするOSSも生まれました。
このトークでは、以下のトピックでサイボウズでの取り組みを紹介します。
このトークが複数アプリでの共通化、単一アプリでのマルチパッケージ境界設計、共有コードの運用の助けとなれば幸いです。
登壇者: kntk, koher, niw, omochimetaru, まつじ
Swiftの次期バージョンであるSwift 6は、開発者にとって大きな変革をもたらします。特に注目すべきは、Swift ConcurrencyのStrict Concurrencyチェックによる完全なデータ競合の防止です。これにより、コードの安全性が大幅に向上し、開発効率も向上します。また、他にもコードの品質を高めるアップデートがいくつも存在します。
しかし、アップデートをするためには、コードの変更が必要となる可能性があり、「どう対応すればいいのか?」と思っている方も多いのではないでしょうか?
このセッションでは、座談会形式で、以下のテーマについて登壇者ならびに参加者の皆さんと一緒に考えていきます:
Swift 6はオプトイン方式であり、正式リリース後すぐに対応する必要はありません。しかし、今後導入される新機能を活用するためにも、早めに対策を考えておくのはいかがでしょうか?
このセッションが、Swift 6へのスムーズな移行に向けて、皆さんの疑問や不安を解消する一助となることを願っています。
Appleプラットフォームのファイル共有にはSMBプロトコルが利用されています。しかし、ファイルが非常に多いフォルダを開く際に接続が不安定になるなどの問題があります。OSに含まれるライブラリの不具合なので対処は難しいですが、SMBファイル共有を自分で実装すれば問題を根本的に解決でき、快適なファイルブラウジングが実現できます。
SMBファイル共有を実装すると一口に言っても何から始めたらいいかわからない方も多いでしょう。SMBプロトコルはHTTP通信ではなく、URLSessionは使えません。データ構造もJSONなどのなじみのある形式ではありません。
難しそうですが、実は道具が違うだけで通信はHTTPではなくTCPソケットを、データ構造はJSONのデコード/エンコードのかわりにバイナリのシリアライズ/デシリアライズを用いるだけです。TCPソケット通信を理解すると、Bitcoinやメールなど、他の通信プロトコルの実装にも簡単に応用できます。
この講演ではSwiftでTCPソケット通信を行う場合の複数の選択肢の比較、プロトコルに従ったバイナリのシリアライズ/デシリアライズの方法など、SMBクライアントを実装する手順について解説します。最終的にiOSとmacOSの両方で動作し、音楽や動画ファイルをストリーミング再生できる、速くて使いやすいネットワークファイルブラウザを作成します。
iOS 15から導入されたStoreKit2はアプリ内課金の実装を大幅に簡略化できます。オファー機能や複数のプラン提供を行いやすくするために導入・移行を検討している方は多いのではないでしょうか。
ただし課金機能がアプリで完結しない場合、StoreKit2と様々な基盤を連携する必要があります。たとえば有料機能の認証・認可API、課金ユーザー分析、iOSアプリ内課金以外の決済手段が挙げられます。
そのためのバックエンド構築にはApp Store Server APIやApp Store Server NotificationsというApple提供の仕組みが使えます。近年バージョン2といえる抜本的な改善がなされ、アプリ内課金の状態を自社サービスから詳細に分析できるようになりました。
本セッションでは、日本経済新聞社の電子版アプリで提供するサブスクリプションをStoreKit2ベースでフルリプレースして得た知見を紹介します。各種ツールの仕様・アプリ内課金全体の仕組みを理解、クライアントからバックエンドまでどのような手順で安全にアップデートしていくか注意点を確認しつつ解説します。クライアントだけでは把握しづらかった課金状態をAPIで把握したTipsも紹介していきます。
このトークを通して、参加者は自社のシステムにアプリ内課金を連携するための実践的な仕様を理解することができるでしょう。
WWDC23で発表されたMergeable Libraryは、Static/Dynamicに続く新たなライブラリの形式です。
これまで、依存関係にStatic Libraryを利用することで、アプリの起動高速化や、バイナリサイズの圧縮などのユーザー体験を改善する手法が知られていました。
その一方で、この手法はDynamic Libraryのもたらす開発体験とのトレードオフになってしまう部分もありました。
Mergeable Libraryを使うことで、それらの良いとこどりができるのです!
このトークではMergeable Libraryを使った、新しいプロジェクト構成がもたらすメリットと導入のヒントをお伝えします。以下のようなトピックが含まれます。
新たな仕組みを学び、開発者・ユーザー体験の両立を目指しましょう!
iPhoneやApple Watchからクレジットカードやイベントチケットなどを簡単に利用できるようになるAppleウォレット。
Appleウォレットにイベントのチケットを登録すると受付時のQRコード提示が楽になりますが、Appleウォレットに対応しているならGoogleウォレットにも対応していて欲しいですよね・・・?
筆者は昨年末にiOSDC Japanが運営に使用しているWebシステム「fortee(フォルテ)」のAppleウォレット・Googleウォレット連携を実装しました。
つまり、今年からiOSDCではAppleウォレット・Googleウォレットにチケットを保存できます・・・!
この発表では、その実装経験を元にAppleウォレット・Googleウォレットにチケットを保存する方法を解説します。
実装方法から本番運用を始めるために必要な準備、比較して分かる両者の類似点や相違点などなど、チケットが皆さんの端末に保存されるまでには色々な要素が詰まっています。
この発表を聞いてウォレットの世界に飛び込んでみませんか?