レギュラートーク(20分)

iOSエンジニア視点から見るデザインシステム構築とその関わり方

komaji504 komaji

UI実装において、同じViewを複数箇所で実装してしまうと、デザイン変更に対する更新漏れや、実装箇所ごとにUIの差異を生んでしまうことがあります。こうした一貫性の欠如は、ユーザーにストレスを与える要因となります。これらの課題に対するアプローチの一つにデザインシステムがあります。デザインシステムとは、コンポーネントやスタイルガイドなどのプロダクト開発に必要なリソースセットです。デザインと実装がシステムとして相互連携することで、一貫性のあるUIを効率的に実装できます。

しかし、デザインシステムの構築は容易ではありません。さまざまなリソースが必要で、構築には時間がかかります。また、デザインと実装が相互連携できるようにコンポーネントを作成する必要があります。さらに、プロダクトの進化に合わせて継続的に改善できるようにする必要があります。

本トークでは、以下のトピックを中心に、私が携わるプロダクトのデザインシステム構築におけるiOSエンジニアの具体的な取り組みをお話しします。

  • 機能開発と両立させるデザインシステムの部分的な導入
  • 相互連携のためのスタイルレビュー会とコンポーネントのAPI設計
  • SwiftUIの標準APIを活用したメンテナブルなコンポーネント実装

このトークが、デザインシステムの構築、そして一貫性のあるプロダクトを効率的に開発するための参考になれば幸いです。

2
LT(5分)

Apple Vision Proの現地購入レポート

nkjzm Nakaji Kohki

今年の2月にApple Vision Proがリリースされましたが、残念ながら日本での販売はありませんでした。しかし、VR元年の頃からApple製のHead Mounted Displayを心待ちにしていた私は、どうしても「いち早く手に入れたい!触りたい!!」という想いから、はるばる日本から現地へ飛び購入をしてきました。

このセッションでは、国外でガジェットを購入する際に必要となる様々な知見(具体的には決済方法、関税、技適マークなど)について、現地のリアルな体験を交えながらご紹介します。ぜひ皆さんが同じようなチャレンジをする際の参考にしていただければと思います。

レギュラートーク(20分)

MEet Flutter Add-to-App: Unlocking Our Productivity

ichi

Flutter Add-to-App(以下A2A)は、既存のネイティブアプリにFlutterを部分的に統合する機能です。
2023年2月、マネーフォワード MEは新サービスのリリースに伴い、A2Aを導入しました。

この技術的挑戦から1年以上にわたる開発において、iOS/Androidの実装の共通化による開発速度の改善や、例えばアプリの仕様策定やデザインなどの業務の大幅な削減など、全体的な開発生産性が飛躍的に向上しました。
また、新しい技術を取り入れることで生じた課題にも迅速かつ効果的に対処するため、GitHub Actionsなどのツールを活用したいくつかの自動化プロセスを導入しました。
A2Aの導入はさらに、iOS/Androidエンジニア間や他チーム、他部門とのコミュニケーションを促進し、プロジェクトチーム全体の協力体制を強化できました。

今回のトークでは、これらA2Aの導入による開発環境の改善や、具体的な自動化プロセスやAndroidの連携方法などについて詳しく説明します。

1
レギュラートーク(20分)

ABEMAにおける新課金商品の設計とAB検証プロセスの実践

kangnuxlion 康 建斌

ABEMAは「新しい未来のテレビ」として多様な動画コンテンツを提供しています。2024年2月から「ABEMAプレミアム」に加え、新たな課金商品の提供を開始し、課金商品の設計とAB検証が重要な役割を果たしています。本セッションでは以下の内容を解説します。

  1. 課金商品設計
    ABEMAの課金商品設計は、ユーザーの利便性とビジネスの持続可能性を両立させています。サブスクリプションと都度課金の2つの商品を採用し、ビジネス面とアプリ内課金のバランスをどのように取るかを説明します。
  2. AB検証の重要性
    AB検証は、課金商品の効果を測定する重要なツールです。異なる商品をユーザーにランダムに割り当て、その結果を比較して最適な設計を見つけ出します。AB検証の設計、実施、結果の解釈について詳しく説明します。
  3. 課金商品設計とAB検証の実例
    具体的な事例を通じて、ABEMAの課金商品設計とAB検証のプロセスを解説します。
  4. 今後の課題と展望
    最後に、課金商品設計とAB検証における今後の課題と展望を議論します。新たな課金モデルの開発や、精緻なAB検証の実施など今後の取り組みについて述べます。

このセッションを通じて、参加者がABEMAの課金商品設計とAB検証の具体的なプロセスを深く理解し、自社のアプリ開発やビジネス戦略に応用するための実践的な知識を得られることを目指します。

2
ルーキーズLT(5分)

Apple Vision Proの現地購入レポート

nkjzm Nakaji Kohki

今年の2月にApple Vision Proがリリースされましたが、残念ながら日本での販売はありませんでした。しかし、VR元年の頃からApple製のHead Mounted Displayを心待ちにしていた私は、どうしても「いち早く手に入れたい!触りたい!!」という想いから、はるばる日本から現地へ飛び購入をしてきました。

このセッションでは、国外でガジェットを購入する際に必要となる様々な知見(具体的には決済方法、関税、技適マークなど)について、現地のリアルな体験を交えながらご紹介します。ぜひ皆さんが同じようなチャレンジをする際の参考にしていただければと思います。

レギュラートーク(20分)

SwiftUI時代だけどViewControllerをコードで書いてみよう

coffeegyunyu 日向強

2019年にiOS 13とともにSwiftUIがリリースされ、早くも5年が経過しました。
SwiftUIは年月を重ねるごとに改良や進化を続け、今や多くのSwiftUI情報が世の中に溢れかえっています。

そんな時代だからこそ、少数派になりつつも、依然として使われ続けているUIKitに着目します。
UIKitにはStoryboardやxibなどのInterface Builderを使ったUI生成方法がありますが、
このトークではコードによるViewControllerの作成に焦点を当てます。

  • Storyboardのコードへの移植
  • loadView、viewDidLoadなどのsuperメソッドの使い分け
  • コードで柔軟なレイアウトを構築する

などなど、SwiftUIの普及が進む中で、失われつつあるViewControllerのコード生成方法をまとめたいと思います。

レギュラートーク(20分)

アプリへ最新のカメラ撮影機能を搭載する

Naoya_Maeda_app Maeda Naoya

iPhoneのカメラは年々進化しており、iPhone一台で高品質な写真を撮影することが一般的になっています。

例えばハードウェアの性能が向上したことで、48MPの高解像度撮影や、Apple ProRAWやApple Logなどの特殊な撮影機能も利用できるようになっています。

こうした進化したカメラ機能を自分のアプリに組み込むことで、独自のUIを使ってカメラを操作するだけでなく、標準のカメラアプリでは実現できないホワイトバランスや焦点位置の細かな調整、VisionやDockKitなど他のフレームワークと連動したユニークなアプリの開発が可能になります。

しかし、カメラの性能が向上しているにも関わらず、開発者がどのような新しい機能を利用できるのかについてはあまり知られていません。こうした新機能はAVFoundationやAVCaptureのAPIを利用してアプリに組み込むことができますが、実際にドキュメントを読んで実装しようとすると、不十分な記述に惑わされ、試行錯誤してなんとか実装することになります。

このセッションでは、近年のAVFoundationやAVCaptureのAPIのアップデートについて体系的に紹介します。48MP撮影やApple ProRAW / Apple Logなどの最新のカメラ機能の概要と実装方法についてデモを交えて説明します。

1
ルーキーズLT(5分)

Unity初心者のiOSエンジニアが、UnityからSwiftのコードを呼び出してみた

Kaito Kishimoto

Unityを使って開発をしている際に、Swiftのあの機能が使えたらな...と思う時がありませんか?
今回はUnityからSwiftのコードを呼ぶにはどうすればいいのかを調べて実装した経験をお話しします。

このトークでは、以下の内容について紹介します。

  • C#で記載したスクリプトからSwiftのコードを呼ぶための準備や必要なコードなどを紹介します。

このトークを通じて、UnityとSwiftの連携方法を学び、UnityプロジェクトでiOSのネイティブ機能を活用することで、アプリ開発に役立てていただければと思います。

LT(5分)

DJコントローラーでアプリを操作したい!!!!!

EXCode013 mori

最近、弊社ではDJ部が立ち上がりました。
ということで自分もDJコントローラーを購入したのですが、ふと思ったのです「これでアプリを操作してみたい」と

このLTではMIDIを単語しか知らないエンジニアがiOSアプリにどうやって信号を渡すか
実際にリストをターンテーブルで操作できるのか?入力だけじゃなくて出力もできるのか?
などCoreMIDIと格闘した末にゲームコントローラー以外でアプリを操作するのを実演したいと思います。

  • CoreMIDIについて
  • MIDIコントローラーの操作を受け取る方法について
  • MIDIコントローラーへの出力方法について
ルーキーズLT(5分)

App Review Guidelines 「違反」なるべく集めてみた

mrs1669 しろくま

アプリ完成 → App Storeに提出
「これで全世界に公開だ!」と 悦に浸っていると、その後に審査でリジェクトされてリリースできない経験をした方も多いのではないでしょうか?

リジェクトされた際、「ガイドライン 1.2.3 に違反」 (1.2.3は架空の例です) のように、ガイドラインの条文だけが添付されることがあります。 そのため、具体的に何が問題でリジェクトされたのかがわからないこともよくあります。 何度かAppleとやりとりをして修正したり、丁寧に説明して再審査をお願いした結果、審査を通過した経験を持つ方もいるかと思います。

リジェクトの経験は次回に活かすことができ、どのような行為がリジェクトされるかを理解していれば、次のリリース時には注意を払うことができます。 App Review Guidelines自体、定期的に更新されます。 また私の体感ですが、同じレビューガイドラインの文言でも、時代が経つにつれて審査基準も変わってきているように感じます。

このLTでは、最近アプリを作成してリリース審査に提出した際に経験した様々なガイドライン違反についての知見を共有いたします。

1
レギュラートーク(40分)

SwiftでCI/CD環境を作ろう!

nato_ring ring

みなさんのチームではどのようにアプリを配布・リリースしていますか?
便利なCI/CDサービスの恩恵に預かる、自前で環境を構築する、Xcode Cloudを利用するなど様々かと思います。

いずれの場合でも普段のiOSアプリ開発とは異なる知識・経験・技術が必要となるためこの領域は属人化しやすく、多くの方がメンテナンスに苦労した経験を持っていることでしょう。
これがもし、iOSアプリ開発と同じ感覚でCI/CD環境を構築することができたならどうでしょうか?

弊社ではアプリの配布・リリース自動化のほとんどをSwiftで実装しており、アプリの定期配布、デザイナー向けテスト配布、リリースノートの作成からアプリ申請までのほとんどの作業が自動化されています。

本トークではSwiftを使ってCI/CD環境を構築する方法と導入・運用する際に得た多くの知見についてお話しいたします。特にCD環境の構築に焦点を当て、自動化の面白さとSwiftを最大限活用する方法を余すことなくお伝えします。

話すこと
・App Store Connect APIの基本機能と進化の歴史
・App Store Connect APIの認証プロセス、エラーハンドリングとSwiftでの実装例
・セキュアなCDパイプラインの設計と構築方法 ~GitHub Actionsを添えて
・具体的な導入事例、運用方法、その効果と実績

5
ルーキーズLT(5分)

「百聞は一見にしかず」に一石を投じる

Mika

私たちは普段、視覚を通して多くの情報を得ていますが、実は聴覚には情報処理の面で視覚を超える優れた特徴があります。聴覚は音の時間変化を理解する能力に優れ、音程や音量の変化を鋭敏に感じ取ることができるため、新たなデータの理解につながる可能性があります。

皆さんは Swift Charts の VoiceOver 機能を試したことがありますか?その中には Audio Graph というアクセシビリティ機能の一つで、視覚に障がいのある方々向けに、データの分布や推移を音のピッチを用いて表現する機能があります。実のところ、この機能は全てのユーザーにとって非常に興味深いものです。私が初めて Swift Charts の VoiceOver 対応を行ったとき、その音がまるで音楽のように聞こえたことに驚きました。

本トークでは以下の内容についてお話しします。

  • チャートごとの Audio Graph が奏でる音色
  • さまざまなデータの音を聴いてみる
  • Audio Graph を用いた音楽活動

視覚的なチャートや文章だけでは伝わらない情報を、音を通じて受け取ることで、今まで見えてこなかった新しい側面が見えてくるかもしれません。皆さんもAudio Graph という新たな表現の形を体験してみませんか?

2
レギュラートーク(20分)

公式ドキュメントの裏側を知る〜DocCを支える技術たち〜

charlie_dev_ios チャリオ

iOSエンジニアであれば誰しも一度はApple公式のドキュメントやSwiftUIのチュートリアルを読んだり、プロダクトやライブラリのドキュメントをDocCを用いて書いたりしたことがあるのではないでしょうか。swift-doccはこれらのドキュメント生成をSwiftベースで実現する強力なライブラリです。

本トークではswift-doccの仕組みに着目し、その動作原理について解説します。ドキュメント作成にはシンボル生成やMarkdownのパースなど、普段のアプリ開発ではあまり触れる機会のない技術が関わっています。それらについても一つずつ丁寧に取り上げます。

このトークを通じて、swift-doccのコードを理解し、OSS貢献やSwiftを使用したツール開発への第一歩を一緒に踏み出しましょう!

内容

  • DocCの概要
  • APIリファレンスや記事、チュートリアルを生成するまでの流れ
  • ArgumentParserについて
  • SymbolKit、swift-markdown、swift-docc-render、swift-nioなど重要な構成要素について
    • 記事(Article)の生成方法
    • .tutorialファイルのパース方法
    • Web上でのプレビュー機能の仕組み
  • swift-doccの本当の役割
1
レギュラートーク(20分)

現役高専関係者が考える、高専モデルコアカリキュラムにSwiftとiOS開発を組み込むことで起きる変化とメリットに関する考察

atsuki_seo 瀬尾 敦生

当方は某企業でiOSエンジニアをしている傍ら、某離島にある商船高専の情報工学かでテクニカルアドバイザー的なことをしています。アドバイスをしている中で、実践的な教育カリキュラムをどう実現するかというのがちょこちょこ話題に上がることがあります。

高専には教育の質を担保するモデルコアカリキュラムというものが設定されています。
その中にはプログラミング・アルゴリズムに関する項目も定義されています。

参考文献
https://www.kosen-k.go.jp/nationwide/main_super_kosen

ただし、ここにはカリキュラムとして最低限学ぶべき内容が定義されているのみであり、実現方法などについては言及がありません。
今回はMac, Xcode, Swift Playgroundsを使った高専生のモデルコアカリキュラムの具体的な実現について考察した内容を発表します。

1
レギュラートーク(20分)

Swift Concurrencyで複雑な認証ロジックをシンプルに魅せる

Swift Concurrency が導入されてから「Swiftが難しくなった」という声をよく耳にします。
実装者はこれまで見えていなかったデータ競合や再入可能性などの問題に対処する必要が出てきており、これまで以上に高いレベルの言語知識が求められています。
しかし、実装者がSwift Concurrency を正しく活用することで、複雑なロジックやユーザーの操作が絡んだ非同期なフローを抽象化し、再利用性の高い形でよりシンプルなインターフェースを利用側に提供することが可能です。

本トークでは、タップルの認証フローをフルスクラッチで刷新した事例を通じて、以下のような複雑な課題を Swift Concurrency を活用して解決した方法を共有します。

  • 認証SDKを通じた状態の更新や判定など、クライアントから切り離せないロジックの肥大化
  • Sign in with Apple、SMS認証などの画面呼び出しを伴う認証フローの共通化
  • 外部SNSや認証SDK周りのエラーハンドリング

このトークを通じて、Swift Concurrency のポジティブな側面や柔軟なコード表現力を学び、
自分たちの業務での複雑なユースケースに活用するイメージを持つことができるようになるきっかけを提供します。

5
ルーキーズLT(5分)

iOS 17で進化したCoreLocationAPIの紹介

shake__551 shake

iOS 17で変更された新しいCoreLocationAPIについて、その機能と改良点を紹介します.

話すこと

  • Core Location APIの変更点について
    • バックグラウンドで位置情報を取得する方法
    • ライフサイクルの変化

話さないこと

  • 具体的な導入事例
  • 「ドキュメントに書かれていることやWWDC2023で話されている内容」以外のこと
ルーキーズLT(5分)

「xcrun simctl」を活用してiOSシミュレータをより便利に操作しよう

glassfiber2023 glassfiber

iOSシミュレータを操作するための便利なコマンド「xcrun simctl」をご存知でしょうか?

例えば、ローカルストレージにデータを保存しているとき、開発中にデータ構造を変更することがあります。そのとき、古いデータを削除したくなることが多いでしょう。通常、アプリを削除するとすべてのデータが消えてしまいますが、一部のデータを残しておきたい場合はシミュレータのフォルダをFinderで探し、特定のファイルだけを手動で消す必要があります。
この手間のかかる作業も、「xcrun simctl」を使えば、シェルスクリプト一発で簡単に行うことができます!

さらに、「xcrun simctl」を使えば、アプリの削除と再インストールを自動化することも可能です。これにより、開発効率が大幅に向上することは間違いありません。
本トークでは、これらの便利な使い方を具体的なコマンド例とともに詳しくご紹介します。

レギュラートーク(20分)

RealityKit入門

shoryu927 tatsubee

RealityKitはiOS・visionOSにおいて、ARアプリケーションを開発する最適解の一つです。

ARと聞いて少しハードルを感じるかもしれませんが、RealityKitはSwiftネイティブなAPIで提供されているため、3D空間を扱うための座標や行列計算などの独特な要素はありますが、普段のiOS開発とほとんど変わらない方法で記述することができます。
この独特な要素に関しても、概念を理解し、ちょっとしたコツを知るだけで簡単に扱えるため、RealityKitを使ったARアプリケーションの開発は本当にとても簡単なのです。

本セッションでは、「好きなイラストを現実世界に呼び出すARアプリ」を例に、RealityKitを用いた基本的なARアプリケーションの作り方と、開発中に直面しがちなハマりどころを、以下のステップに沿って解説します。

  1. ARKitとRealityKitの役割と関係性
  2. 現実世界の特定の場所にオブジェクトを配置する方法
  3. オブジェクトにテクスチャを貼り付ける方法
  4. オブジェクトに環境効果を適用する方法
  5. オブジェクトの位置や方向を自由に変える方法

日本でのVision Proの発売に備え、今こそRealityKitに入門しましょう。

3
LT(5分)

これだけは伝えたい! Interactive Widget 開発の肝

monoqlo monoqlo

みなさんは日頃ウィジェットを活用していますか?

iOS 17ではウィジェット上にButtonやToggleの設置が可能となり、ついにユーザーとインタラクティブなやりとりができるウィジェットをつくれるようになりました。

一方で、ウィジェットには様々な制約があり、無理なものは無理と割り切った上で設計する必要があります。SwiftUIで通常のiOSアプリを開発するのと同じように書ける部分もあれば、そうではない部分もあるため、その違いを認識することは非常に重要です。

例えば、ユーザーのボタン押下後にネットワーク通信が必要な場合や、何度か画面遷移が必要な場合、あるいはiPad向けに広いスペースを使ったウィジェットをつくる場合… ウィジェット開発ではどんなことに気をつけた方が良いでしょうか。

このLTでは、英語学習アプリにインタラクティブなウィジェットを追加した際の経験をもとに、「これだけは押さえておきたい」というポイントをギュッと5分に詰め込んでお伝えします。

1
ルーキーズLT(5分)

App Clip Codeを解析してみた!

mrs1669 しろくま

みなさん、App Clip Codeってご存知ですか? WWDC2020で発表されたApp Clipは、アプリをインストールせずにちょこっとだけ使える便利な機能です。 そして、このApp ClipをQRコードのように読み取るだけで、すぐに使用できるコードがApp Clip Codeです。 開発者のみなさんであれば実は自分で簡単に作れます!

ところで、「え、QRコードなら読めるけど、App Clip Codeって読めるの?」って思いますよね? え、思わないですか?? App Clip Codeは残念ながら読め..ないですが、一定の規則性があることはわかりました。

このLTでは、私が様々なApp Clip Codeを生成して解析する中で見つけた法則性についてお伝えします。 みなさんと一緒にこの法則性を解き明かしていけると嬉しいです!