こちらのトークでは簡単な例を使い、低水準言語であるアセンブリ、アセンブラに入門してみます。
ソフトウェアエンジニアとして働いていると、アセンブラを学習する機会はほとんどないかもしれません。
しかし、アセンブラを学習することにより、CPUの機能やOSの役割が手を動かしながら理解できます。
Swiftで簡単なプログラムを記述し、Xcodeでアセンブリを表示させ、それを読めるようになるために、基礎的な箇所を解説します。
こちらのトークが皆様のアセンブラについての理解の助けになれば幸いです。
アセンブリ...言語の名称。
アセンブラ...アセンブリ言語で書かれたソースを機械語に変換するためのソフトウェア。
「passkeys」は、パスワード認証の欠点(使い回しや情報漏洩の問題等)に対応し、パスワード認証を置き換えるべく開発された新しい認証技術です。
Googleのログインシステムがpasskeysに対応したことで、今後、より多くのサービスでpasskeysを採用する可能性が拡がってきました。
passkeysに対応することで、セキュリティだけでなくアカウント作成やログインの手間軽減といったユーザビリティ面でのメリットがありますが、メリットだけでなくpasskeysの仕組みを理解することで、より効果的な導入推進が行えるようになるのではないでしょうか。
本セッションでは、passkeysに興味のある方やこれから導入したいとお考えの方を対象に、passkeysを構成する技術要素(WebAuthn、公開鍵認証など)の紹介から、導入のメリット、アプリやサーバーでの対応方法についてご紹介します。
この発表では、Single Page Application (SPA) において Google Analytics 4 (GA4) を効果的に活用するための基礎知識から、実際の問題解決策までを解説します。
Webアプリを運用している方や、アプリエンジニアで新たにWebアプリの計測を行いたい方の参考になると幸いです。
GA4について
SPAにGA4を導入する方法
拡張イベント計測機能について
イベント計測の実用例
組み込みエンジニアとしてキャリアをスタートさせましたが、
気づいたらiOSエンジニアになってiOSアプリを作って、
気づいたらマネージャーになって組織を見るようになって、
気づいたらCTOになって会社を見るようになってました。
それぞれのフェーズでやってきたこと、何が変わったかをお話したいと思います!
アプリ開発において、ユーザーの認証機能は重要です。セキュリティ上の脅威に対して、堅牢かつ安全に認証基盤を構築することが求められます。
Google CloudのIdentityPlatformは、幅広いセキュリティ機能を持った認証機能を提供するサービスです。多要素認証やOAuth、OpenIDConnectなどの認証プロトコルをサポートしておりiOSアプリのよりセキュアな認証機能の開発に活用することができます。
本トークでは、実際のiOSアプリ開発プロジェクトで、IdentityPlatformを活用したユーザー認証機能の開発を行い、そこで得られた知見や実践的なノウハウを共有いたします。
また悪意のあるユーザーからの攻撃に対してどのようなセキュリティ対策を取ることができるかを具体的にご紹介します。
アプリ開発ではMVPやMVVMといったアーキテクチャのプロダクトが多いですが、SwiftUIの登場によってReduxやTCAといった状態管理ベースのアーキテクチャも浸透しつつあります。
そんな状態管理アーキテクチャですが、スナップショットテストと相性がいいのはご存知でしょうか?
本トークでは、自社で採用しているアーキテクチャを例として以下の内容を話します。
見た目のテストをしたいと思いつつUIテストはそのコストから手を出しづらいという方の手助けになれば幸いです。
ある日、「MFi認証なしでiOSと双方向通信できるUSBデバイスって作れますか?」という相談を受けました。UARTでシリアル通信するUSBデバイスをiOSからも制御できるようにしたいという話だったのですが、この場合はMFi認証が避けられません。そうなると費用もかかるし対応も大変です。
Bluetooth LEを勧めようとしたところ、ワークショップなどではペアリングも電源も不要な有線接続は需要があるそうです。これはなんとか叶えてあげたい…! そこで提案したのがUSB MIDIデバイスでした。MIDIなら双方向通信できるし、一般的なUSBデバイスなのでMFi認証も不要なのです。
本トークでは、USB接続の拡張ボード「AkaDako」をiOSに対応させた経験から、USB MIDIデバイスの作り方や、MIDI上で独自の通信をする方法、MIDI通信プログラミングのポイントなどをお話しします。
Rettyアプリではアプリの開発体験・生産性向上に向けてGraphQLの導入を進めています。
私たちが抱えていた技術負債やGraphQL導入に至るまでの経緯や導入に関わる実装についてご紹介します。
Rettyのシステムについて
Rettyの全体的なシステム構成や、アプリとBFFに関する技術的負債など
REST APIの辛さとGraphQLの導入について
GraphQLの導入
apollo-iosによるアプリケーション実装・モジュール設計・XcodeCoudでのCIの実装について
これからのGraphQLを導入した今後の展望
GraphQLの導入とともに、SPMによるマルチモジュール化なども同時に進めています。
現在はGraphQLを段階的に導入している段階ですが、今後のアーキテクチャの変化など、チームで議論している展望についてお話しします。
「passkeys」は、従来のパスワード認証の欠点(使い回しや漏洩の問題等)に対応し、パスワード認証を置き換えるべく開発された新しい認証技術です。
passkeysは、セキュリティ面だけでなく、ユーザビリティ面でも導入のメリット(パスワード入力が不要、端末間での認証情報の共有、など)があります。
2023年の5月にGoogleのログインシステムがpasskeysに対応したことで、今後、より多くのサービスでpasskeysを採用する可能性が拡がってきました。
本セッションでは、passkeysに興味のある方やプロダクトでのpasskeys対応を検討している方を対象に、passkeysの概要、セキュリティ・ユーザビリティ面での対応のメリット、アプリ側・サーバー側それぞれの対応方法についてご紹介します。
本セッションを通じ、多くの方がpasskeysに興味を持っていただけたら幸いです。
"開発"という言葉が放つ魔力
その力に魅せられた奴等がいる
人は彼等をデベロッパーと呼ぶ
iOS Developerたちの日常をマンガでコミカルに描きます。
SwiftUIのListはUITableViewで実装していたUIをより直感的に書き直すことが可能で、SwiftUI導入の効果が最も感じられるコンポーネントの一つです。
しかし、我々が真に実現したいUIはチュートリアルのようなシンプルな構造のものばかりではなく、公式で用意されているものでは実装が難しい場合があるでしょう。
SwiftUIでもアコーディオンUIを実現するためにDisclosureGroupが用意されていますが、アコーディオンを開閉するためのボタンの位置や表示をカスタマイズできないなど、なかなかかゆいところに手が届かない場合があります。そんな場合でもListの基本機能とSwiftUIのアニメーションを用いて独自のアコーディオンUIを構築することができました。
本トークでは実プロダクトへの導入事例に沿って、その実装を解説します。一見困難なUI構築の際のヒントとなれば幸いです。
弊チームの開発するアプリでは、Flutter Add-to-app を2020年に導入し、ネイティブの実装と Flutter での実装を共用して開発・運用を行っていました。
しかし、メンバーの入れ替わりや、Flutter 起因の不具合などの理由から、Add-to-app をやめ、iOS ネイティブで再実装するに至りました。
本トークでは、Add-to-app の導入時、運用時の良かった点や良くなった点を振り返ります。
そして、ネイティブで再実装する際に Flutter から Swift への書き換えや安全に移行するために行ったことをお話します。
本トークを通じて、Add-to-app が適するタイミングや規模感、メリット・デメリットを実感してもらい、皆さんの技術選定の手助けになる情報を提供します。
対象者: Flutter Add-to-app に興味がある方・チーム
XcodeTargetGraphGenというCLIツールをSwiftで作成し公開しています。このツールはXcodeの.xcodeproj/project.pbxprojファイルからターゲットの依存関係を解釈し、マーメイド記法によって出力することでモジュールの依存関係を可視化するツールです。
project.pbxprojファイルを解釈することによって、プロジェクト内のEmbed Frameworkで作られたモジュールの依存関係だけでなく、Swift Packageで作成されたモジュールや利用するApple製SDKのフレームワーク、Carthageや一部の古いフォーマットのCocoaPodsにも対応しています。
XcodeTargetGraphGenをどのようにして使うとプロジェクトを改善できるかについて紹介できればと思います。
こちらのトークでは簡単な例をもとにパイプライン演算子を自作します。
メソッドの結果を受け取り、その結果をメソッドの引数にわたし、さらにそのメソッドの結果を受け取って...
を繰り返すような処理を行いたいときに、ローカル変数が必要以上に増えてしまったり、入れ子が多くなり読みずらいなといった経験はありませんか?
このような問題をパイプライン演算子という演算子を用いれば、コードの読む順番を処理順にすることができ、可読性の向上が見込めます。
しかし、残念ながら、Swiftにパイプライン演算子は定義されていません。
定義されていないので、自作してみましょう!
さらに、オブジェクト指向プログラミングでよく用いられるメソッドチェーンとも比較し、それぞれのメリットとデメリットを紹介します。
こちらのトークが皆様の演算子の理解のきっかけになれば幸いです。
Swiftはいいぞ!
WebAssemblyによって、SwiftはWeb開発にも利用できるようになりました。
JavaScriptKitによってSwiftからJSをフルに活用できますが、SwiftをメインにWebアプリを開発するのはまだまだ敷居が高いです。
Swiftの活用を広めるにはTypeScriptをメインにSwiftをライブラリとして添え、既存のWeb資産と融合していくべきだと考えました。
このトークでは、SwiftライブラリをReactから用いる手順と、それを使って実際にどのようなアプリケーションが開発できるかを紹介します。
iOS開発者なら一度は使ったことのあるUserDefaultsですが、実は外部から閲覧・書き換えをすることができてしまいます。
クレジットカード番号やパスワードなどセキュアな情報をUserDefaultsで管理してませんか?
App Store Reviewガイドラインにもあるようにユーザーのプライバシーの保護は重要視されています。
このセッションではローカルにデータを保存したいときにどのように実装すれば良いのかを解説します。
・UserDefaults
・Keychain
・Core Data
データを扱う方法は複数ありますが、それぞれの特徴や選び方を説明します。
このセッションを通して安全なアプリづくりを目指しましょう!
Unity as a Libraryは、Unityで書いたコードをライブラリとしてiOSアプリケーションに組み込むことができる仕組みです。
この仕組みによってUnityを用いた3D表現を取り入れつつもSwiftUI / UIKitを用いたネイティブUIの提供を実現することができます。
Unity as a Libraryは強力な仕組みですが、ビルド時間増加や実機 / シミュレーター切り替えが容易にできず開発体験が低下してしまう問題や、ネイティブとUnity間でのデータの取り回しやUnityからネイティブ機能を利用したい場合の課題など、様々な課題が存在します。
このトークでは、Unity as a Libraryの概要を説明した後に、実際にUnity as a Libraryを利用しているアプリを開発している中で直面した課題とその改善について紹介します。
Unity as a Libraryは、Unityで書いたコードをライブラリとしてiOSアプリケーションに組み込むことができる仕組みです。
この仕組みによってUnityを用いた3D表現を取り入れつつもSwiftUI / UIKitを用いたネイティブUIの提供を実現することができます。
Unity as a Libraryは強力な仕組みですが課題も多く、Unity Projectのサイズが大きくなることによりビルド時間の増加やエラーが起きること、実機 / シミュレーターの切り替えが容易に行えずに開発体験を悪化させてしまう、といったビルド関連の課題があります。
このトークでは、Unity as a Libraryの概要を簡単に説明した後に、実際にUnity as a Libraryを利用しているアプリで行ったビルド改善について紹介します。
新規プロジェクトに参画してREADMEの開発環境構築を実施するだけで一日が終わってしまった経験はありませんか?
make コマンドは、長い歴史を持つビルドツールですが、iOSプロジェクトにも簡単に導入することができます。
Makefile の力を借りて知識の共有と開発プロセスのスタンダード化を実現する方法を紹介します。
開発環境構築をコマンド一発で完了したい
あの人の神コマンドをチーム内で共有したい
そんな悩みを Makefile で全てタスク化することで解消し、成功への道を歩みましょう。
モジュール分割していてもアプリの成長とともにプロジェクトの複雑さは増加し、依存関係を把握しきれず、さらに依存関係の改善を後回しにしたり放置することもあるのではないでしょうか。
そこで開発したのがSwift製ツール「XcodeTargetGraphGen」で、GitHub上で公開しています。これは.xcodeprojからモジュールの依存関係を抽出しマーメイド記法で可視化します。開発者はこのツールにより全体像掴みアーキテクチャの改善点を特定でき、もちろんGitHub ActionsによりPR時の自動化も可能です。
このセッションでは.xcodeprojについて解説し、導入方法とCI実行によるユースケースを通じ依存関係の自動可視化がどのようにプロジェクトの理解に役立つか実演します。
依存関係に頭を悩ませている方、あるいは大規模なプロジェクトを手掛ける方へ役立つ情報となるはずです。