SwiftUIが発表されてからすでに3年が経ちました。
しかしいまだに開発現場から採用が難しいという声が聞こえてきます。
UIKitとSwiftUIの併用も可能ですが、実際に採り入れてみるとさまざまな問題が発生しました。
このセッションではそれらの問題を解決する手法を紹介します。
近年、Human computer interaction(HCI)の研究分野では機械学習を利用しスマートフォンのインタラクションをより豊かにする研究が多く行われています。
・音声認識を利用しスマホで叩いた物体を認識
・画像認識を利用しApple Pencilの機能を拡張
・イヤホンのセンサを活用した行動認識
これらの研究を応用することで例えば、スマホで欲しい物を叩くだけでECサイトでその物を注文できるようになったり、非接触でモバイル端末の操作ができたりと今までのアプリに無いようなインタラクションを実現できます。本セッションではそのような研究事例を紹介し、実際にCreateML/CoreMLで機械学習を使った面白いインタラクションをいくつか実装してみます。
昨年から、iPadのSwift PlaygroundsでiOSアプリの開発ができるようになりました。この際、従来のプロジェクト形式とは異なる「.swiftpm」拡張子のプロジェクト形式が使われるのはご存じでしょうか。実はこの「.swiftpm」は、Xcode 13.2以降で「Swift Playground App」としてXcodeでも作成できるようになっています。
この新しいプロジェクト形式は、どのようなもので、何ができるのでしょうか。従来のプロジェクト形式とは何が違うのでしょうか。
「Swift Playground App」の具体的な情報はあまり公開されていませんが、私が手探りながら調査した知見をご紹介します。
Swift-DocCは、Swiftフレームワークやパッケージのためのドキュメント作成ツールです。Swift-DocCの面白い特徴に、チュートリアルを作成できるという点があります。
このチュートリアルの作成方法の詳細は、今回のパンフレット記事に掲載します。
https://fortee.jp/iosdc-japan-2022/proposal/dfd8c56c-468a-4115-804c-d1ca103eed62
本トークでは、具体的なチュートリアルの作成過程をライブコーディングで紹介します。
パンフレット記事とともに実際のチュートリアルの動きを見ることで、より理解を深められます。
React NativeやFlutterなどを使ったマルチプラットフォームアプリ開発は、1つの言語でiOSとAndroidの両方を同時に開発できるとても魅力的なアプリ開発の選択肢です。
しかし、UIデザインの視点から見るとそう簡単にはいきません。それぞれのOSはそれぞれのUIガイドラインを持っており、開発者はそれに沿ったデザインの実装が求められます。
本セッションでは、マルチプラットフォーム開発におけるUIデザインの違いを踏まえた各OSでの実装のポイントや落とし穴をいくつかご紹介します。
目次(予定)
Human Interface Guidelinesとマテリアルデザイン
デザイン実装におけるポイント・落とし穴
・そのアイコン、マテリアルデザイン?
・3ボタンナビゲーションを忘れるな
・ここまで違うの?DateTimePicker
・それぞれのOSで効果的な通知を!
WWDC2021にて簡潔かつ堅牢に並行処理を記述できるSwift Concurrencyが発表されました。
WWDCのセッションを通してSwift Concurrencyを学ぶことができますが、実世界の問題に対してどうこの技術が使えるかという文献はまだ少ないのではないでしょうか。
このセッションではSwift Concurrencyを用いて実装された実プロダクトで利用されているLoggerの実装を基に、どのように技術を適応したかを紹介します。
また、Swift Concurrencyに触れたことがない人でも理解できるように適宜Swift Concurrencyについての説明も行う予定です。
なお引用する予定のコードはすべてOSSとして公開中しています。
https://github.com/k-kohey/Parchment-swift
DAppとはビジネスロジックやストレージが分散されたアプリケーションです。
ブロックチェーンを使って実装されることが多く、DAppには下記のような利点があります。
このDAppをiOSアプリで構築する際には下記の点が障壁となります。
このセッションではこの障壁を減らすべく、iOSエンジニアの視点からEthereumを使ったDAppの開発に必要な知識と作り方を紹介します。
なお、DAppを作ったことがない人・業務でブロックチェーンを使っていない人を聞き手に想定しています。
チームリーダーになってしまって困ってしまった開発者はいませんか?元々リーダーシップの訓練も受けてないし経験もないのに任命されてしまって困ったことはないですか?
ここでは、(クセのある)開発者と長年仕事をしてきたプロジェクトマネージャーが経験に基づいて、これだけは最低限実行していけばリーダーとしてチームを回せる以下の5ヵ条を紹介します!
・チームビルディング
・役割分担
・デイリーのポイント
・振り返り
・心が折れないために
開発者の皆さん、リーダーやマネージャーに対しての進捗報告、相談に困ったりしていませんか?説明が長くなってしまったり、細かい部分を突っ込まれたり、最悪なケースではちゃんと進捗出してるのに評価してもらえない事もありますよね?
ここでは、(クセのある)開発者と長年仕事をしてきたプロジェクトマネージャーが経験に基づいて、チームで仕事をする際に必要な以下のポイントをお伝えします!
・うまくいかないケースとは?
・チケットの立て方
・チケットの回し方(ステータスや担当者の変え方など)
・進捗状況の可視化のポイント
大規模なアプリを複数人で安定して開発するためには、アプリの設計や実装をある程度統一させることが望ましいです。特定のアーキテクチャの導入もその手段の一つでしょう。
アーキテクチャに沿ったボイラープレートコードを適用することで、実装に統一性をもたせることができます。
タクシーアプリ「GO」の iOS プロジェクトにも様々なボイラープレートコードが存在します。
開発を進めていく中で、ボイラープレートコードの一部の命名を変更する必要が出てきたり、部分的に新たなボイラープレートの追加・削除が発生することがありました。
これらの作業は難しくはありませんが、ボイラープレートコードの量が多いとその手間は無視することができません。単純な作業であれ、開発効率を下げる要因の一つとなり得ます。
この課題をどのように解消し、ボイラープレートコードとうまく付き合えるようになったのかを具体例を交えて紹介します。
高速なアプリ体験の実現やアプリのプライバシー問題などから、オンデバイスで機械学習モデルを動かすことが増えてきています。
iOS上ではCore MLがよく利用されますが、PC上で動かす機械学習フレームワークよりも制約があり、出力が変わる問題が起こったり、
モデルを構築できてもアプリ組込み時に、扱いにくいモデルになっていることもよくあります。
このトークでは特に問題が起きやすい、画像を扱うモデルについて、
・使いやすく、運用しやすいモデルを構築する方法
・Core GraphicsやAccelerateを使ったテクニック
・MLエンジニアと協業方法
・モデルの入出力を高速に変換する方法
などを紹介し、"アプリエンジニア" として機械学習に関われるようになる知識を提供します。
GitHubにある学習済みモデルを自分でCore MLに変換して利用したい方にも役立ちます。
iOS 15 has brought extension support to Safari. In this talk, I will explore the extension API by building a Safari extension that displays Furigana annotations in the browser. I will discuss:
世の中には様々なアプリやシステムがありますが、良いアプリを開発できている会社はどこも良い開発環境を提供しているように思えます。
そこで考えてみましたが、本当に最高の開発現場とはどのようなものなのか?
開発効率の良い、最高の開発環境とは🤔
誰でも最大限のパフォーマンスを発揮できて、最高のものづくりを実現できる環境とは如何なるものなのかを考えてみました。
iOSのSwiftUI、AndroidのJetpack Compose、そしてマルチプラットフォームのFlutter…
モバイル開発は宣言的UIの時代に突入しました。
このセッションではこれら3つのフレームワークで同じUIを構築するサンプルを紹介します。
そこから見えてくる、全てのフレームワークに共通する重要な概念を明らかにします。
Swift-DocCは、Swiftフレームワークとパッケージ用の文書作成ツールです。 現在はオープンソースとして公開され発展しています。
プロジェクトを説明する文書を作成する方法はいくつかあります。 そして最近ではgithubでReadMeをたくさん使っています。 プロジェクトに適切にコメントを作成したら、Swift-DocCでプロジェクトの説明文書を作成できます。
Appleの公式文書を見るのに慣れているapple platforms developerのために、私たちのプロジェクトの説明にもDocCを活用する方法について説明します。
実際のプロジェクトを説明するリンクを提供して、プロジェクトのoverViewを行います。
sample: https://github.com/M1zz/SampleSwiftUI
昨今話題のFlutter。
このセッションではそのFlutter内部を、UIKitやMetalといったiOS技術をベースに紐解きます。
「タッチイベントはどのように処理されてる?」
「どうやってレンダリングしてる?」
そこが分かればもう怖くない!
Swift Packageはライブラリのバージョンを管理するだけでなく、プロジェクトの構成もになうことで、
マルチモジュール構成を柔軟かつ簡単に構築することができます。
この構成によるモジュールの柔軟性を活用すると、アプリを1つのプロジェクトで複数管理しやすくなります。
1つのプロジェクトで複数のアプリを管理することができれば、
コードの共有や、CI/CDのセットアップが簡単になり、メンテナンスもしやすくなります。
うまく基盤を作ると、全く異なるプロダクトを混在させることも可能ですし、
デザインのカタログのようなアプリや、特定の機能や条件を再現した小さなアプリにも活用できます。
このトークでは、Swift PMによるマルチモジュール構成を活用して、1つのプロジェクトで複数のアプリを管理してみます。
実例も交えながら、みなさんのプロジェクトにも応用できるようにしようと思います。
入社して初めて配属されたプロジェクトがRxだらけのソースでした。
専門学校時代、RxSwiftのソースを頑なに避けていたこともあり全くと言っていいほどソースが読めませんでした。このままでは何もできないと思い非同期処理とRxSwiftについて学習してみました。
このトークでは、Rxを避け続けてきた、新卒がどのような手順を追ってRxについて学習したかをお話しします。
ユーザーの行動分析や広告の効果検証の目的で、多くのプロダクトが Google Analytics for Firebase などの計測ツールを利用していることと思います。
蓄積したデータを多様な分析に活用できるように、数百ものイベントを計測しているアプリもあるのではないでしょうか。
しかし、そんな "イベント計測" のノウハウは個々のプロダクトの仕様に依る側面が大きいのもあり、広く共有されていない印象を持っています。
このセッションでは、僕らが提供するプロダクト「B/43」でのイベント計測の設計と運用の一例を示しつつ、さらなる運用の最適化に向けた試行(イベント定義書からのコードの自動生成など)についてもお話ししていきます。
【内容(予定)】
・「B/43」でのイベント計測の設計と運用の一例
・イベント計測の設計規則と効率的な実装方法の検討
・イベント定義書からのコードの自動生成の試行
iOS 14からSwiftUIに App
が追加され、Full SwiftUIでのアプリ開発が可能になりました。が、UIKitでつくりこまれたUIを移行するのは容易ではなく、移行例はあまり多くないのではないでしょうか。
そんな状況で、私は2021年末に個人開発のノートアプリ「Pieces of Paper」をFull SwiftUIに移行しました。本トークでは実際に移行を行った際に経験した様々な問題を中心に話したいと思います。
@ObservedObject
の意図しない初期化によるバグ