iOSDC Japan 2021 トーク一覧

他イベントOK レギュラートーク(20分)

SwiftUIでアクセシビリティを担保する

el_metal_ elmetal el_metal_

SwiftUIは「Dynamic Type、ダークモード、ローカリゼーション、アクセシビリティに自動的に対応する」と謳われていますが、コード上の対応が不要になったわけではありません。
このトークでは、Dynamic Type、ダークモード、VoiceOver読み上げを担保するためにSwiftUIでやるべきことをサンプルコードを使ってお伝えします。

4
採択 他イベントOK 原稿(2ページ)

誰も知らないASO(App Store Optimization)の話

ahiru___z ring ahiru___z

長い年月と情熱をかけてつくり込んだアプリを満を持してAppStoreにリリースしたものの全くDLされないという経験はありませんか?

多種多様なアプリが膨大に溢れている昨今、個人開発者のアプリが多くのユーザーのiPhoneにDLされるのは非常に難しいと感じています。
しかしながらあまり知られていないだけで「個人でできること」というのは意外とたくさんあります。

この原稿では私が個人開発したアプリの累計が200万DLされるまでに行った取り組みを中心にASO(App Store Optimization)に効果的と思われる手法やアイデアを共有いたします。あなたがつくった素晴らしいアプリをもっと多くの人に使ってもらいましょう!

・効果的なASO(App Store Optimization)
・改善し続ける仕組み
・AppStoreリリース時に意識すること

17
採択 他イベントOK 原稿(4ページ)

Call Directory Extensionデバッグテクニック

kotetu 栗山徹 kotetu

iOSで着信時氏名表示を実現するためには"Call Directory Extension"を利用する必要がありますが、そもそも別プロセスということもあって、通常のアプリよりデバッグが簡単ではありません。私自身、これまでCall Directory Extensionのデバッグには大変苦労してきましたが、長年の試行錯誤の結果、最近ではデバッグの効率がかなり改善してきました。

本稿では、そんなCall Directory Extensionを利用するアプリを開発する上で知っておくとデバッグ効率が上がるようなデバッグテクニックをご紹介します。

コンテンツ(予定):

  1. なぜCall Directory Extensionのデバッグは難しいのか?
  2. テクニックその1: デバッガのアタッチしてデバッグする
  3. テクニックその2: アプリ側でエラーを検知する
  4. テクニックその3: ログを出力する
  5. テクニックその4: AppGroupからファイルをコピーする
  6. テクニックその5: 着信時氏名表示をエミュレートする
2
採択 他イベントOK 原稿(2ページ)

Swift Atomicsで快適なアトミック操作を

kotetu 栗山徹 kotetu

"Swift Atomics" は、Swiftでアトミック操作(不可分操作、英語ではAtomic Operation)を実現するためのライブラリです。アトミック操作とは、マルチスレッド環境下で値の変更時に別のスレッドから操作を割り込まれないようにするために利用されます(簡単に言えばスレッドセーフな変数を作りたい場合に利用されることが多いです)。

Javaなどの言語にはアトミック操作が可能な変数型が公式にサポートされていますが、Swiftにはまだなく、必要な場合は自前で実装するか"Swift Concurrency"といったサードパーティライブライブラリを利用するしかありませんでした。まだバージョン1.0に達してはいませんが、Appleが公式に開発を進めているだけあって、今からでも注目に値するのではないでしょうか。

本稿では、アトミック操作の概要からSwift Atomicsを使ったアトミック操作の実装、さらには(紙面に余裕があれば)ライブラリの内部実装についてご紹介します。

コンテンツ(予定):

  1. アトミック操作とは
  2. Swift Atomics以前のアトミック操作
  3. Swift Atomicsを使ったアトミック操作
  4. Swift Atomicsの実装について(紙面に余裕があれば)
5
採択 他イベントOK 原稿(8ページ)

Webブラウザで動くSwift Playgroundを作ろう

k_katsumi 岸川克己 k_katsumi

Playgroundはプログラミング言語を学ぶ上で非常に役に立つツールです。SwiftはXcodeとiPad・Macアプリとして動くとても高品質なPlaygroundを提供しています。公式のSwift Playgroundsはプログラムをインタラクティブに実行し、結果を途中経過も含めてわかりやすく表示してくれます。

Swift以外の言語に目を向けると、最近のプログラミング言語はどれもPlaygroundのような仕組みを提供しています。しかもほとんどのプログラミング言語にはWebで動作するPlaygroundが提供されています。

Webで動くPlaygroundはさらに強力です。Xcodeやアプリをダウンロードすることなく使え、頭に浮かんだことをiPhoneでサッと書いて実行することもできます。書いたコードを共有したりそれを元にディスカッションすることもより簡単にできます。たいていのWebのPlaygroundは「埋め込み機能」があるので、”実際に実行できるサンプルコード”を埋め込んだドキュメントを作ることもできます。

残念ながらSwiftには公式のWeb Playgroundは提供されていません。しかしサーバーサイドSwiftとWebプログラミングの技術を使って自分でSwiftのWeb Playgroundを作れます!

こちらは私が作成したSwiftのWeb Playgroundです。
https://swiftfiddle.com/

私はこのSwift Playgroundを作成してWebプログラミングやサーバーサイドのテクノロジーについて非常に多くのことを学びました。
本稿ではブラウザで動くコードエディタ、UIの作り方、SwiftによるWebプログラミング、仮想化によるサンドボックス化など私が得たさまざまな知見をお伝えします。

20
採択 他イベントOK 原稿(8ページ)

【SwiftUI or UIKit】フローチャートでわかる最適フレームワーク

AkkeyLab AkkeyLab AkkeyLab

「あ、ここは UIKit じゃないと要件満たせないなぁ」
SwiftUI でアプリを開発していて必ず1回はこのように思ったことがあるのではないでしょうか。

事前にドキュメントを熟読し、実装方針を固めてからコーディングを始めるという流れであれば問題ありませんが、コーディング途中で要件を満たせない事実を目の当たりにした場合、時間の浪費に悔しさを覚えることでしょう。

そんな思いをする SwiftUI チャレンジャーをゼロにすべく、UIKit・SwiftUI のどちらを使えばよいかを一瞬で判断できるフローチャートをご紹介します。(極論 UIKit のみで開発すれば解決するとも考えることが可能ですが、ここでは SwiftUI をできるだけ採用するという方針を前提として解説いたします)
例えば UITextField(UIKit)と TextField(SwiftUI)の場合以下のような条件分岐で利用すべきフレームワークを判断可能です。
======
バリデーションは入力完了後に一度だけで良い
→YES: SwiftUI(v1, v2)
→NO: UIKit(TextField には入力文字の変化を随時ハンドリングする方法がありません)
======

この原稿を元に工数見積の精度向上、開発中の後戻り削減、SwiftUI の現状理解が可能になるでしょう。

14
他イベントOK レギュラートーク(20分)

GoエンジニアがスタートアップでiOSアプリを開発してみた話

konchanxxx konchanxxx konchanxxx

クライアント開発何やってるのか雰囲気しかわからぬ。と思っているサーバーサイドエンジニアの方も少なからずいるのではないでしょうか?
私もそんな一人でしたが、クライアントも開発したい!と思っていたところスタートアップに転職する機会があり直近はカウシェというアプリのiOS開発をバリバリやってきました。
まだ事例も少ないSwiftUIを使った開発にチャレンジしたので、本トークではクライアント開発をやってみたいと思っている人の手助けになるような下記のコンテンツを紹介していければと考えています。

・SwiftUI、MVVMを実践例を交えてどのように実装しているか
・GoとSwiftを実装してみて感じた違い
・スタートアップでサーバーとクライアント両方実装できると何が嬉しいのか

2
採択 他イベントOK 原稿(4ページ)

Swift向けコードリーディング支援ツール「CSExtractor for Swift」

comlopard Masashi Nishimoto comlopard

iOSフレームワークのAPIを使ってアプリをコーディングする際に、どのようにAPIを呼び出すコードを書けばいいのかを悩むことはありませんか?
そんなとき、GitHubなどのリポジトリにあるソースコードを参考にするために、コードリーディングする事でしょう。しかし、コードリーディングは非常に手間や労力のかかる作業です。
そこで、Swiftソースコード内でプログラマが気になるAPI 呼び出しの記述箇所を指定すれば、それ以外に関連がある箇所をハイライトするコードリーディング支援ツール「CSExtractor for Swift」を開発しました。
CSExtractorを使えば、開発者は多くのソースコードから自らが利用したいAPIの実装例を気軽に得ることができることでしょう。

CSExtractorは、ソースコードに対して構文解析を行って得られたデータの依存関係に基づいて、関連のあるステートメント同士を抽出します。
CSExtractorでは、Swiftの構文解析であるSwiftSyntax、WebアプリケーションフレームワークであるVaporなどを使って実装しています。
そして、CSExtractorのデモ用アプリケーションはWeb上で公開されています。

本稿では、CSExtratorの使い方やシステム構成、及びソースコード解析のアルゴリズムなどをご紹介します。
最後に、開発者の皆様が煩わしい作業から解放されてクリエイティブな開発活動ができるように、これからもさまざまな開発支援ツールを提案していきます。

5
他イベントOK 原稿(8ページ)

今さら聞けないBlockchain!? をSwiftで今こそ書いてみる

eitarox Eitaro Yamatsuta eitarox
このトークはスピーカー都合でキャンセルになりました

2021年に入ってからもNFTやDogecoinなど話題が尽きないBlockchain領域ですが、文章や図の説明を見て何となく分かったままにしてる人はいないですか?

私です。エンジニアだから逆に今さら聞きづらいということありますよね。

iOS13からブロックチェーンに必要なハッシュ値生成やデジタル署名などが公式ライブラリのCryptoKitで実装できるようになりました。
得意なswiftでの

  • ブロックチェーン概要
  • ブロックチェーンの作成
  • ウォレットの作成
  • ブロックチェーンサーバAPI作成
  • ネットワークの構築
    を通して、ブロック、Proof of Work、マイニング、アドレスなどのBlockchainの基本的な概念を週末にサクッと理解してしまいましょう!
1
他イベントOK LT(5分)

(あらためて)アプリ内でWKWebViewを使うときに見落としがち・忘れがちな実装まとめ

sussan0416 鈴木孝宏 sussan0416

WKWebView――Webコンテンツを表示するときに使用するViewですが、これをブラウザと同じだと思ってはいけません。
「ブラウザでは(おおむね)当たり前に有効化されているWeb体験」が、実は、初期設定のままでは実現できないのです。
例えば、JavaScriptが動かない、インラインで動画再生ができない、JavaScriptのalert()を呼んでもポップアップが表示できなかったり……と、なにかと手を焼かされます。
ここで今一度、その忘れがち・見落としがちな設定や実装をまとめてみます。特に「ブラウザではできるよね」と思われている部分を、重点的にフォーカスします。
あなたがいつか、WKWebViewを使った画面を新規で実装するときのために。

3
他イベントOK LT(5分)

既存プロジェクトで使っているDIフレームワークをお引っ越し&DIYするお話

fumiyasac 酒井文也 fumiyasac

ある程度の大きさがある規模感の既存プロジェクトでかつ、責務毎に分離されているアーキテクチャにおいてはDIを司る部分は「心臓部分」と言っても過言ではありませんし、サードパーティ製ライブラリをGithubで調べてみても便利で機能が充実している物が多数存在していることを鑑みても、その重要性が窺えるかと思います。

しかしながら、様々な事情があり「これまで利用していたDIフレームワーク部分を自前の物に置き換える」運びとなり、この部分を担当することになりました。
(私自身もサードパーティ製のライブラリを利用した経験はありましたが、最初は正直不安でした)

他の機能開発も並行して行われている事も鑑みて、これまでに慣れ親しんだ実装の形とも大きな乖離が生じないように配慮する必要があったり等々 ... 平素の開発やひいては他のチームメンバーが実装している部分との兼ね合いに影響を及ぼさない様にも工夫する必要がある点を考えると少し悩ましさもあるかと思います。

今回のDIフレームワークに関するお引っ越し&DIYについては式年遷宮の様にかなり大掛かりなものでは決してありませんが、本発表では、

  • 短期決戦でカタをつける戦いに挑むために
  • サードパーティ製ライブラリとの検討比較
  • iOS以外でのDI例からヒントを得る
  • 既存実装の影響範囲をなるべく少なくするために気をつけたこと
  • 既存実装との兼ね合いで実現できなかったこと
  • 今後の方向性として考えていること
  • 実際にお引っ越し&DIYを経験しての所感

といった部分を、実際のプロジェクトにて導入した事例と自分の手でこの様な改修に携わることができた体験を踏まえた体験談や得られた知見等をご紹介できればと思います。

2
採択 他イベントOK 原稿(8ページ)

円滑なUI&機能実装やデザイナーとの共同作業を進めるために心がけてきた事

fumiyasac 酒井文也 fumiyasac

これまでのiOSアプリにおいて、主にUIKitを利用したUI実装とそれに付随する機能開発を担当する機会が多くあり、また直近数年間に私が経験してきた中では、機能を実現するための実装だけではなく、デザイナーをはじめ様々な職種の方々を巻き込みつつもデザインも絡めた仕様部分から考え抜く機会にも多く恵まれたようにも感じております。
本稿では、チームの皆様(プロダクトマネージャー/デザイナー/エンジニア)を巻き込みながら、アプリUI実装と機能ロジックをコラボして仕上げていく際に、

・デザイナーとの仕様すり合わせの際に心がけているポイントと習慣
・デザインデータから実装における勘所を紐解く
・機能ロジックとUI実装を合わせる際に違和感を感じた場合
・自前で準備する?ライブラリを使う?の切り分けと判断
・Webでは頻出での表現をiOSアプリで実現する際に気をつけている事
・Androidアプリで良くお目にかかるUI表現をiOSアプリで実現する場合の勘所

等を紙面が許す限り、そして私自身が業務で利用してきた設計ノート等も交えながらご紹介できればと考えております。
決して特別な事はありませんが、ほんの少しでも皆様のご参考になる事ができれば嬉しく思います。

8
採択 他イベントOK 原稿(4ページ)

約3年続くリファクタリングを引き継いで見えたテクニック

k_koheyi k-kohey k_koheyi

ソフトウェアは一度作ったら終わりではなく,その後もソースコードを保守管理しなければいけないというのは今では常識になりつつあります.
積極的に大きなビジネスインパクトを狙い,日々ソースコードの編集を繰り返し,頻繁にリリースを行うことも珍しくはありません.
このようにソースコードへ頻繁に手を加える必要がある際に,レガシーコードは大きなボトルネックとなります.
そしてそんなレガシーコードに頭を抱える時間が1日の大半を占めるようになったとき,私達はリファクタリングという選択肢を考えはじめるのかもしれません.

本稿では約3年に渡る大規模なリファクタリングを入社直後に引き継いだ筆者の体験を基に,直面した課題と解決策,および安全にリファクタリングを進めるために意識したコーディングスタイルを示します.
また,引き継いだ実装から見えてきた,スプラウトクラス等のリファクタリング手法の有用性についても考察します.
考察や説明には、iOSエンジニアに馴染み深いSwiftのコードやリファクタリングに関する文献を適宜引用します。

なお,具体的には以下のようなトピックについて執筆する予定です.
【トピックプラン】

  • レガシーコードはクラッシュしてくれてサンキュー.
  • リファクタリング中に機能追加が必要!考えられる手段。
  • 宗教戦争?privateなメソッドの自動テストを書きたいときにどうすればよいか.
  • 解体したい神クラス,でもテストが書けないから下手な修正はできない.そんなときの折衷案.
16
採択 他イベントOK 原稿(8ページ)

Combine Operator ガイド

usamik26 宇佐見 公輔 usamik26

Swift のリアクティブフレームワーク Combine についての解説記事です。特に、Operator について詳しく解説します。

Publisher と Subscriber との間のデータ変換処理を行う Operator は、Combine フレームワークの重要な要素のひとつです。Operator は種類が多く、できることが様々であるため、把握するのは案外大変です。この様々な Operator たちを整理して、具体的な動作や使いみちを紹介します。

筆者はこれまで、「Combineをはじめよう」と「CombineとUIKitによるiOSアプリ開発」の2冊の技術同人誌を発行してきました( https://usami-k.github.io/techbook/ )。今回の記事では、これらの本ではあまり詳しく書かなかった内容について扱います。

15
他イベントOK LT(5分)

すぐ使える!functionBuilder 改め resultBuilder

417_72ki 417.72KI 417_72ki

functionBuilderは宣言的プログラミングを実装しやすくするために生まれた言語機能で主にSwiftUIで使われています。
今までは非publicなAPIだったため使うことは推奨されませんでしたが、Swift5.4になってresultBuilderとして正式にリリースされたことで大手を振って使うことができるようになりました。

そこで本トークではresultBuilderを使うメリデメを簡単に解説しつつ、ユースケースとして一番使い勝手のいい NSAttributedString 用の resultBuilder をライブコーディングで実装していきます。

4
他イベントOK レギュラートーク(20分)

今日から使える!チーム開発においてのGit術

lovee 星野恵瑠 lovee

現代のソフトウェア開発において、バージョン管理は必要不可欠です。その中でもダントツに広く使われてるのがGitという分散型バージョン管理システムでしょう。

しかし、個人開発しか経験が無かったり、会社に入ったけどまだ日が浅かったりで、Gitを雰囲気だけで使っていませんか?

とりあえずコミットは特に問題なく使いこなせそうですが、ブランチはどう切るべきか、マージとはどんなものなのか、リベースはなぜ推奨されてない雰囲気なのに使わされるのか、コンフリクトおきたらどうすべきなのか…などなど、Gitの世界は謎だらけです。

このトークは、そんなあなたのために、Gitの入門から上級の入り口までを詳しく解説していきます。これを習得したあなたも、今日からチーム開発でのGitの使い方に迷いが吹き飛びます!

3
採択 他イベントOK 2021/09/18 16:45〜 Track A LT(5分)

Hacking the Tesla API

wa_kinchan きんちゃん。 wa_kinchan

Teslaのハードウェアとソフトウェアの洗練さは、まさに車業界のAppleですよね!
エンジニアなら、誰しも憧れで一度は乗ってみたい、触ってみたいですね?
ちまみに、わたしは持ってません。
このプロポーザルが採択されたら、弊社NOT A HOTELの社長のTesla Model Xを借りて乗ってみようと思います。
Unofficialですが、Tesla APIを使ってハックして遊びます。
以前はFlutter appで自社アプリに組み込んで遊んでみました(Twitter参照)が、SwiftUI nativeなアプリへ移植を試みます。
https://twitter.com/wa_kinchan/status/1366964772894203904?s=20

13
他イベントOK LT(5分)

本番環境でしか起きない問題をFirebase Remote Configで改善する

cutmail cutmail cutmail

様々な不具合と日々戦っている皆さんは、本番環境(この場合だとAppStoreからダウンロードする環境)でしか起きない不具合と遭遇したことはありますか?

クラッシュログは出ているけど、どう直したらいいかわからないなんてことはよくあるかと思います。

そういった場合にFirebase Remote Configを使って効果的に問題の原因の特定、改善をした事例を紹介しようと思います。

  1. 本番環境でしか起きない問題の概要
  2. クラッシュログから見えてくること
  3. Firebase Remote Configによるパターン実装
  4. 検証
  5. 後始末
7
採択 他イベントOK 2021/09/19 10:50〜 Track A レギュラートーク(20分)

ランタイムデバッグのススメ

noppefoxwolf noppe noppefoxwolf

開発者のあなたや、チームメンバーがadhocビルドを使うことは良く見る光景です。
全員がサービスに向かい合い、より良い体験を作ろうとします。
しかし、パフォーマンスに関してはどうでしょうか?
ネットワーク状態や、CPUの使いすぎに対しては開発者であるあなたが気にかけるしかありません。
そんな状態を打開するのが、ランタイムデバッガーです。
画面に常に情報を表示することで、アプリを使う全員がパフォーマンスに対して視覚的に関心を持ち始めます。
それはクラッシュを伴わない問題を解決する糸口にもなるでしょう。
この手法は、AppleやGoogleでも採用されています。
このセッションでは自作のランタイムデバッガーを元に、ランタイムデバッグのコツや運用の仕方を解説します。

採択 他イベントOK 2021/09/18 10:50〜 Track C レギュラートーク(20分)

Source Editor ExtensionとSwiftSyntaxでコード自動生成ツールを作る

kazuhiro494949 林和弘 kazuhiro494949

Swiftではコードの自動生成ツールでボイラープレートを避けるということがよく行われます。
そして方法には様々ありますがXcode上で実行する場合は多くがファイル作成もしくはビルド時にコード生成をします。

しかし、ユースケースによっては実装中のコードからそれに対応するコード生成を行いたいこともあるでしょう。
例えばリファクタリングのためにProtocolで依存を切り出したり、Mockクラスを作る場合などがそれにあたります。

ここではSource Editor ExtensionとSwiftSyntaxを組み合わせたコード生成ツールの開発方法について解説します。
それらを組み合わせると、実装しながら同時にXcode上でコード生成を行うツールが比較的リーズナブルに開発可能です。

また、その方法によって実際に開発したリファクタリングツールを例として紹介します。
皆さんが開発環境改善をしたいと思ったときに検討する手法の一つになるよう話ができればと思います。