採択
2020/09/20 14:40〜
Track A
レギュラートーク(40分)

iPadOSDC: Multiple Windows

hironytic ひろん

<これまでのあらすじ>
2019年9月、iOSが13へと進化するその傍らで、ひっそりとiPadOSは生まれた。それはiOSにない特徴的な機能「Multiple Windows」、すなわち「複数のスペースで同じアプリを開いて作業する」機能を有していた。
2020年4月、Magic Keyboardが発売され、iPadはますますノートPCへと近づいていく。「モバイル」と「PC」の境界が消えつつあるこの世界の中で、Multiple Windowsへの対応の有無がアプリの使い勝手に大きな影響を与えようとしていた——

本トークでは、iPadOSのMultiple Windowsを使ってユーザーがどのような体験を得られるのかを紹介し、その後に実際にアプリをMultiple Windowsに対応させる方法について解説します。そこでは、UISceneを始めとするScene APIを整理して段階的に説明します。

・Multiple Windows…なにそれおいしいの?
・シーンは簡単、そう、iOS 13以降のみならね
・複数のシーンをサポート!戦いの始まり
・シーン状態の保存ならオレに任せろ
・プログラムから新しいシーンを展開!
・シーンのライフサイクル(ゾンビもあるよ)
・シンクロナイズドシーン《状態の同期》
・好きなシーンを選んでね

さあ、みなさん、iPadOSDCの時間です!

採択
2020/09/20 14:40〜
Track B
レギュラートーク(40分)

GitHub ActionsでiOSアプリをCIする個人的ベストプラクティス

the_uhooi uhooi

みなさん、iOSアプリ開発でCIを行っていますか?
なかなかCI環境を構築する時間が取れず、行っていない人も多いと思います。

でもご安心ください!
iOSアプリのCI環境は、どのような規模や種類のアプリでもだいたい同じです。
一度構築すれば他でも使い回せます。

本トークではFastlaneやCIサービス独自の機能をできる限り使わず、スクリプトベースでCI環境を構築する方法を紹介します。
そのため、どのようなCIサービスを使っていても取り入れやすいです。

【アジェンダ】
・CIの概要とメリット
・ライブラリのセットアップ・ビルド・単体テストを実行するスクリプトの作成(Makefile)
・ビルド・単体テストを実行するCIの構築
・★キャッシュを使ってCIの実行時間を短縮する
・★静的解析(SwiftLint)を実行するCIの構築
「★」はGitHub Actions独自の機能を使う

【想定する聞き手】
・iOSアプリ開発でCIしたことがない人
・CI環境の構築に苦戦している人

【ゴール】
・CIしたくなる
・CIの意味とメリットがわかる
・GitHub ActionsでiOSアプリをCIできる
・CIサービスにかかわらずiOSアプリをCIできる

【使っているツール・ライブラリ】
本トークでは以下のツールやライブラリを使います。
使っていなくても応用できるように説明しますが、知っているとトークを理解しやすいです。
・Mint
・Bundler
・Carthage
・CocoaPods
・XcodeGen
・SwiftLint
・xcpretty

本トークを聞いて、実際にCI環境を構築してくださると嬉しいです!

採択
2020/09/20 14:40〜
Track C
レギュラートーク(40分)

一石二鳥: マルチモジュール化, ビルド速度快適化

justfaceit_kr Saryong Kang

TL;DR
Googlerが解説するgoogle/bazelを活用したビルド速度の最適化と, その前提になるマルチモジュールの実践ガイドになります。

  1. 実践マルチモージュル編
    「iOSプロジェクトをマルチモジュール化するとビルド速度が速くなるよ」という話はよく聞こえるが, 意外と実務に適用するには難関があります。マルチモジュール化を最小限の努力で実現するコツ, ファイルが分けてしまってgitから履歴が見えなくなった時の対処方法等を話ます。

  2. ビルド編 - google/bazel
    マルチモジュール化されたプロジェクトだとbazelの恩恵を十分もらうことができます。LINEアプリ等が採用しているbazelの用いて既存の2倍以上のビルド速度を目指しましょう。

  3. テスト編
    マルチモジュール化すると嬉しい所の一つがレイヤ毎にカバレッジが一目瞭然になること。ですが, 以前問題なかったはずの単体テストが動かなかったりする問題もあります。単体テストのトラブルシュートとテスト実行を速くするtipをシェアします。

採択
2020/09/20 14:40〜
Track D
レギュラートーク(40分)

「iOSエンジニアだし、Androidアプリも作れるでしょ?」

akatsuki174 あかつき

もしもこんなことを言われたら「何言ってんだ、できねぇよ」と言うと思います。
しかしながら双方似ている部分があり、とっつきやすいのも事実です。iOSエンジニアの皆さん、Androidアプリも作ってみたくありませんか?

このトークでは、私がiOSエンジニアからAndroidエンジニアに転身した経験を活かし、iOSエンジニアにとってわかりやすい形でAndroidアプリ開発について説明してみたいと思います。もちろん40分ですべて熟知してもらうのは難しいです。なので、Androidアプリを作る上で要になる部分の解説や、躓いたときに自力で原因を探るためのデバッグ手法の説明に重点を置き、自走できる状態へ導きたいと思います。

目次

・Swiftと比較しつつKotlinを学ぼう
・基礎の基礎、Activity、Fragmentを理解しよう
・ConstraintLayoutでUIが組めるようになろう
・よく使うListViewとRecyclerViewを知ろう
・最低限のデバッグができるようになろう

採択
2020/09/20 14:40〜
Track E
レギュラートーク(20分)

iOSアプリのバッテリー消費を意識する

arara_jp Yusuke Arai

皆さんはアプリを使っていて「このアプリを使っているとiPhoneのバッテリー消費早いな」と思ったことはありませんか?
バッテリーの消費は見落としがちな指標ですが、ユーザーにとって非常に重要な影響を及ぼします。

本セッションではバッテリー消費に関するデバッグについて紹介します。
Xcode Energy GaugesやEnergy Logsを活用しアプリの問題点を洗い出していきましょう。

採択
2020/09/20 15:40〜
Track B
レギュラートーク(20分)

効率よくUIKitからSwiftUIへ移行する

yhkaplan josh

SwiftUIが出て、大きなパラダイムシフトになっています。弊社アプリのObjective-C -> Swift移行の知見を活かし、失敗せずにUIKitからSwiftUIへ移行するための計画と考察した内容を共有します。具体的には、以下のとおりです。

Planning

  • まだ移行できない段階でどう計画を立てるか

What not to migrate (yet)

  • まだまだSwiftUIに向いていない処理と画面を理解する

Prototyping

  • 移行以前に、SwiftUIの使い方と違いを理解するうえでの、prototypingの有効性

Swift

  • 値型や関数型プログラミングなど、モダンなSwiftコードにすることで、SwiftUIへ移行しやすくする

Reactive Programming

  • RxSwift/ReactiveSwiftを使っている、又はまったくリアクティブプログラミング経験のない状態から、SwiftUIでよく使われるCombineの導入方法・準備方法

Interop

  • UIKitとSwiftUIの混在と互換性
  • RxSwift/ReactiveSwiftとCombineの混在と互換性

Components

  • コンポーネント化の有効性

Architecture

  • SwiftUIに適したアーキテクチャを評価し、導入する方法
採択
2020/09/20 15:40〜
Track C
レギュラートーク(20分)

無料トライアル施策のしくじりから学ぶサブスクリプション構成 ベストプラクティス

皆さんiOSのサブスクリプションプランの無料トライアルを実施したいと言われたことはありませんか?
Appleは「お試しオファー」という仕組みを提供しており、一見簡単に実装できそうに思いますが、そこにはいくつもの落とし穴があります。

本トークでは僕自身が実際に無料トライアル施策を実施し、盛大にしくじった経験から叶えることのできる / できない要件、サブスクリプションプラン構成のベストプラクティスをお話しできればと思います。

  • Appleの提供する無料トライアルの仕組み知ってますか?
  • プランの購入導線全て知ってますか?
  • Appleの「お試しオファー」で叶えることのできる / できない要件
  • 今回の施策でのしくじりポイント
  • しくじりから学ぶべきポイントとベストプラクティス
採択
2020/09/20 15:40〜
Track D
レギュラートーク(20分)

Migrate Swift 4.2 to 5.x

boc_sho ShoMasegi

Swift 5.0がリリースされてから1年が経ちました。
去年のWWDCでSwift UI, Combineと共にSwift 5.1がリリースされ、今では5.3までリリースされています。(2020/06/22)

・Result
・Ordered Collection Diffing
・Opaque return types
・Property Wrapper
・.....
数多くの便利な機能が追加されていますが、Swift 4.2以降の機能を使っている方は少ないのではないでしょうか?
私もSwift UI, Combineで使用している以外では十分に使いこなせていないと感じています。

そこで今回のセッションでは、Swift 4.2以降にリリースされた機能を一から見直し、
日常使い出来るよう、ユースケース毎に紹介していきたいと思います。

[Target]
・Swift 5.xの機能を使いこなしている自身が無い方
・Swift 5.xでリリースされた機能を振り返りたい方

[Goal]
・Swift 5.xの機能を一つでも日々の業務に持ち帰れる状態

採択
2020/09/20 16:20〜
Track A
LT(5分)

Catalystに対応したアプリをリリースするまでのリジェクト集

fromkk かっくん

WWDC 2018でmacOS Mojaveの一部のアプリケーションにUIKitをmacOSに対応したアプリケーションが搭載されることが発表されました。
さらに、翌年のWWDC 2019にてその機能が開発者向けに「Project Catalyst」として公開されました。
しかし、既存のiOSアプリをCatalyst化してリリースしようとすると立ちはだかる難関があります。
それはiOSアプリをリリースする時と同様の審査です。
本トークでは既にiOSではリリース済みのアプリをCatalyst化してリリースしようと審査に提出した際にリジェクトされた事例とその対応をご紹介します。

7
採択
2020/09/20 16:25〜
Track A
LT(5分)

In App Purchaseのこれからの在り方を考える

redryerye Yuki Yamamoto

6月にメールアプリHeyのアップデートをリジェクトしたApp Storeの審査についてアメリカのBasecamp社が公開した文書は多くのアプリ制作者が抱える「アップル税」の悩みを凝縮したものだと言えます。
この文書はメディアに大きく取り上げられ、議論の必需性を再提起しました。

業務でIAPについて悩んだ時期とこの一連の事件がちょうど重なり、Appleのスタンスと今までの事例について根深くリサーチする機会がありました。
このトークでは以下の点を抑えながら現在アプリに求められているガイドラインをおさらいすると同時に、理想のプラットフォームの在り方について考えます。

  • 既存サービスの実例
  • 私が実装した解決方法
  • SaaSと共存するためのApp Sore Review Guidelines
8
採択
2020/09/20 16:30〜
Track A
LT(5分)

iOS Custom Keyboards でできること/できないこと/やってはいけないこと

Kyomesuke Kyome

App Extensionsの一つであり、iOSのソフトウェアキーボードを自作できるCustom Keyboardsをご存知でしょうか?
昨今、自作キーボード(物理)が流行っておりますが、ソフトウェアキーボードの自作にご興味はありませんか?

本トークでは、Human Interface Guidelinesと私の経験則から、iOSカスタムキーボード開発において実現できること・できないこと・やってはいけないことなどをさっとご紹介したいと思います。

・iOS Custom Keyboardsってどんなもの?
・デフォルトのキーボードより魅力的なところ
・今のところ実装できないこと
・HIG的にやってはいけないこと
・日本語かな漢字変換について

カスタムソフトウェアキーボード開発コミュニティーの発展を願って...

18
採択
2020/09/20 16:35〜
Track A
LT(5分)

DroidKaigiの公式アプリで始めるiOSアプリのOSSコミッターへの道

entaku_0818 遠藤拓弥

開発者にとって、多くの開発者と同じプロダクト/リポジトリで開発することは特別なことではありません。
iOSアプリ開発者にとっても例外ではありません。
しかし、突然OSSにコントリビュートすることは勇気がいることだと思います。
今回のLTでは私がOSSにコントリビュートした時の経験を通して複数人で開発する楽しさ難しさを通じて学んだことを共有することで、みなさんのOSSコミッターへの一歩に貢献できればと思います。

  • 実装するissueの選び方
  • GitHub上でのコミュニケーション
  • 実装方法
  • コミットメントの範囲
  • Pull Requestの出し方
  • まとめ
11
採択
2020/09/20 16:40〜
Track A
LT(5分)

Apple Pencilと左利き対応

_kwzr_ ああうえ

普通のアプリ開発では利用者の利き手を意識することなく、UIを設計していくことが多いと思います。
しかし、時には『利き手』を強く意識したUI設計が必要なこともあります。
そう、Apple Pencilを利用したお絵かきツールです。
このトークでは、お絵かきツールのUI設計をする際に考えたことや実装例についてお話します。

5
採択
2020/09/20 17:10〜
Track A
LT(5分)

ダークモード対応とAutoLayoutアニメーションと私

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

「iOS13のダークモード対応?Asset CatalogのColor Setが使えれば、そんなに手間掛からないでしょ。
…………そんなふうに考えていた時期が俺にもありました。」
しかし、私が仕事で関わったアプリには1つ落とし穴がありました。
それは入力状態の変化に沿って動くUIアニメーションをAutoLayoutで制御していた事です。

このLTでは

  • AutoLayoutアニメーションとダークモードが組み合わさると何が落とし穴なのか
  • 実際の対応方法(traitCollectionDidChangeやupdateViewConstraintsを用いて制約を再設定)
    を簡単なサンプルアプリを交えて共有できればと思います。
13
採択
2020/09/20 17:15〜
Track A
LT(5分)

macOS仮想カメラ「テロップカム」実装方法とその先

shmdevelop 服部 智

Zoomをはじめとしたオンラインミーティングが活用されています。
そこで映像に様々なエフェクトを掛けるアプリを使っている方もいるのではないでしょうか。

エンジニアならば当然自作したいですよね!

macOSで仮想カメラアプリ「テロップカム」を実装しそれがインターネット放送で使用されました。

皆が面白い仮想カメラ作り出すきっかけとなる情報を共有するとと共に
さらに拡張可能な分野について熱く語ります。

6
採択
2020/09/20 17:20〜
Track A
LT(5分)

文字列をコピーできるスクリーンショットを作る

えんどう

iOS 13からSafariなどでPDF形式でフルページのスクリーンショットができるようになりました。PDF形式のためスクリーンショットに写っている文字列もコピーすることができとても便利な機能です。
この機能はUIScreenshotServiceのdelegateを追加しスクリーンショットのPDFデータを作成し渡すことで各アプリも対応することができます。
しかし、viewやwindowのlayerをrenderしてPDFを作るとビットマップ化されたデータをPDFにするために文字列をコピーすることができません。
今回は文字列をコピーできるPDFを作るにはどうすればいいかについて話したいと思います。

採択
2020/09/20 17:25〜
Track A
LT(5分)

あなたのアプリ、✨リブランディング✨できますか?

monoqlo monoqlo

リブランディング。

良い響きですね。
時代の流れにあったデザインへのアップデート、ブランド価値向上、ブランドの再定義、などなど、目的は様々ですが、様々なアプリがリブランディングする様子を我々は目にしてきました。

これは、とあるアプリが通ったリブランディングを伴う複数回に及ぶリニューアルのお話。

「色をほとんど全部変えたいんですが…」
「画像もほとんど全部差し替えたいんですが…(サイズも変わるかも…)」
「UIもこんな感じに変更したいんですが…」

想像してください。

目の前には、リブランディングなんて全く想定しておらず無邪気につくられた150以上のStoryboardやxib。
ひとつひとつカスタム色として手動設定された温かみのある色の数々。
Asset Catalogで色管理していたとしても、一括で色置換してくれないXcodeセンパイ。

なぜか重複している画像たち。
余白の違いやサイズ違いで複数管理されている同じような画像の数々。
Asset Catalogで画像管理していたとしても、名前を変更したらもちろん一括で置換してくれないXcodeセンパイ。

このトークでは、どんな工夫をして立ち向かい、どんな点を諦めたのか、そしてどんな結果が得られたのかお話します。

リブランディングに耐えられるアプリをつくりたい方、
これからリブランディングを控えているのに同じような状況で頭を抱えている方、
ぜひお聞きください。

採択
2020/09/20 17:30〜
Track A
LT(5分)

iOSアプリを譲渡!?失敗は許されない一発勝負!予想外に立ち塞がる様々な罠に挑んだストーリー🙌

koooootake じんむ

iOSアプリを譲渡した経験ありますか?

この物語は、ひとりのiOSエンジニアが絶対に失敗が許されない状況下で、
アプリの開発アカウントを切り替えるアプリの譲渡に挑んだ経験を語ったものです。

いつかはあなたも取り組む時が来るかもしれないアプリの譲渡、
その予想外な罠と解決方法、リアルタイムに起きたAppleからの譲渡条件変更の通知、
譲渡先の法人アカウント設立の小話など、楽しく語りたいと思います🤤

採択
2020/09/21 10:50〜
Track A
レギュラートーク(20分)

詳解Storyboard

coffeegyunyu 日向強

2019年、SwiftUIという新しいUI記述方法が導入されました。
SwiftUIでは宣言型シンタックスを導入し、Appleの各プラットフォームに対し、シンプルなUIコードの記述ができるようになりました。
しかしながら、SwiftUIにない機能を使いたい、あるいはサポートするOSの関係でSwiftUIの導入ができないなど、他の手段でUIを構築することはまだあるかと思います。

そのUIの構築方法の一つであるStoryboardは、GUIベースでのUIデザインツールとしてのイメージを持たれている方が多いと思いますが、UIデザインツールとしての側面だけでなく、様々な機能が盛り込まれています。

  • リストア機能を使って、バックグラウンド状態からKillされても元の状態に戻し、ユーザー体験を損なわない
  • FirstResponderを使って、手軽にUndo、Redoなどを実装する
  • 言語だけではない、ロケールごとの画面遷移方法の設定
  • コードとデザインを分離し、iPhone、iPadなどの様々な画面サイズや、tvOSなどのプラットフォームでコードを共通化する
  • OSバージョン別にUIをデザインする
  • Objectを使って、ViewControllerにコードをFatに書かない、あるいはViewControllerを全く用意しないアプリを作る

など、UIの作成にとどまらない、あなたのコードライティング時間をより多くビジネスロジックに回せるようなStoryboardの活用法をお伝えします。

採択
2020/09/21 10:50〜
Track B
レギュラートーク(20分)

Xcode Preview でUIKitベースのアプリ開発を効率化する

kenmaz kenmaz

iOSアプリ開発の大部分の時間はViewの実装に費やされます。Viewはアプリの状態によって表示内容やレイアウトが動的に変わります。そのためViewの開発中は、頻繁にiOS Simualtorを起動し、実際にアプリを操作して期待通りの表示内容になっているかを確認する必要があります。また、小さい画面の端末での表示時、ダークモード有効時、Dynamic Typeで文字を大きくした際などに、レイアウトが崩れてないかを確認する作業も面倒なものです。何か変更するたびにiOS Simulatorを起動して動作確認する必要があるので非常に大変です。

この問題を解決してくれるのが、Xcode11で導入されたXcode Previewです。Xcode Previewは、様々な状況下におけるViewの表示結果をエディタ上でプレビュー表示する機能です。

Viewの実装を変更すると即座にプレビューに反映されるため、確認のためにiOS simulatorを何度も起動する必要はありません。 そして、Xcode PreviewといえばSwiftUIのための開発支援機能というイメージがありますが、実は従来のUIKitベースのアプリ開発にも使うことができます!あなたの既存のアプリ開発を効率化するための道具として、今日からXcode Previewを使い始めることができるのです。SwiftUIの普及を待つ必要はありません。

このトークでは既存のUIKitベースのアプリ開発にXcode Previewを導入する方法とその活用方法を、デモを交えながら紹介します。