参加動機
- そもそも人見知りすぎてコンファレンスなど嫌がり
- 会社チームで強引された
特記
- 一般参加者としては多分初めての完全リモートコンファレンス
- ニコ生、Discord で行われた
- ツイッターで参加者・発表者のアクティビティを誘導
参考
- 本投稿の作成者はアプリ開発者ではない
- 自分がライブで参加したセッションのみメモ
- ケースによって自分がよくわからない・逆にわかっているところはメモが省略されている可能性
- 大体個人的な感想
- Youtube の iOSDC チャンネルなど動画掲載があるらしい
(https://www.youtube.com/c/iOSDCJapan/videos)
1日目(2020/9/20)
iOS にない macOS 独自機能を Catalyst で実現する (D)
- 2018 WWDC から発表された Catalyst
- macOS 特有の Menu bar, Touch bar, Tool bar
- Menu Bar
- UIResponder に buildMenu があるので AppDeletgate ovveride
- UIMenuSystem
- UIMenu
- UIAction
- UICommand
- UIKeyCommand
- canPerformAction (活性化)
- UIMenuの Identifierを指定
- UICommand, UIAction, UIMenu を定義
- Touch Bar
- NSGroupTouchBarItem
- NSButtonTouchBarItem
- NSColorPickerTouchBarItem
- NSTouchBarItem.Identifer を指定
- AppDelegate で makeTouchBar を実装
- Tool Bar
- NSToolbar.Identifier 指定
- AppDelegate で makeToolBar を実装
- autosavesConfiguration=true にして実装を自動保存できるように
- Big Sur の変化
- SplitView 設定ができる!
400 種類のアプリビルド自動化 (B)
- yappli と言う会社
- Slack-bolt.dev とは?
- Dependabot (Github App) の導入検討
- 基本プロセス
- 以前までビルド Mac に直接接続したことで行われたプロセスの自動化
- Slack-bolt で Jira の特定チケットからビルド Mac へのビルドトリガーを連携
- Dependabot でビルドMac の重要依存性アップデートを自動化
- 証明証更新も Slack-bolt で
-
fastlane sigh
で全ダウンロード・repair!
しない理由=契約更新したかしらないから
-
Flutter 移行 (C)
- Flutter は便利で、信頼性あるけど、問題も散在
- タブの切り替えアニメーションが重たい
- アプリクラッシュもあるから避けたい
- タブウィジェットに AutomaticKeppAliveClientMixin を適用 (with で)
- Flutter -> Native -> Flutter の Flutter 表示リセット
- Add-to-app: 既存アプリのネイティブに Flutter 部分的適用
- Flutter 画面落としても FlutterViewController は破棄されるけど、インスタンスは残る
- 初期化には時間が掛かるから、毎度初期化は❌
- Init Page 用意して、Controller teardown で 表示させ
- Network server -> Proxy 経由しない
- なぜか Flutter はパケットモニタリングできなかった
- Flutter で Proxy 経由させるには PAC を明示的に指定する必要
- PAC 指定:
HttpOverrides.createHttpClient(context) ..findProxy = (uri) { return “PROXY xxx.xxx.xxx.xxx:xxxx” }
- Google Map クラッシュ
- Google Map からのメモリリーク
- Google Map の PlatformView で循環参照
- Flutter アップデートで直った
DMM の Debug 関連環境変数注入アプリ (B)
- pixiv ではデバッグ設定データを注入するアプリがある
- UserDefaults と App Groups を含め
- 単に言うとバックドアじゃない?
- App Groups でデータ共有させること
- Developers ページで App groups 設定
- Capabilities -> App Groups チェック
- Xcode の Signing & Capabilities で連携アプリ選択
- userDefaults.set(true, forKey:)
- コツ
- 宣言的に UI 構成する(name, bundleID)
- UITableView に入る項目の constructor を実装
- UITableView に Group を作って constructor 追加
Error Architecture (D)
- error の扱いを改善…
- Error が幅広くラップされている問題
- エラーの詳細が見えるように
- ユースケースの漏れを確認したい
- 必要な設計
- 固有のエラーは個別に処理
- 列挙形の利用
- 形で制約をかける
- iOSで AppUseCaseError を渡すように
Github Actions (B)
- Uhooi(┌|▼▼|┘)の圧がすごい
- CIの長所
- remote repo 問題が確認できる
- 自動だからビルドの手間がかからない
- ローカル違いによる問題が整えられる
- 結果が簡単に確認できる
- CIの短所
- CI 学習のコスト
- 課金
- cmake で整えて Github Actions…
- GHA=1yaml 1ワークフロー
- フォーク元のGHAは動かない
Swift 4.2 -> 5.x (D)
- Swift 6 系では async/await が…
- 5.x 特徴
- Result?: 成功・失敗を返すenum
- Ordered Collection Diff: Collection 中身を insert/remove(Diffable DataSourceでしか使えない)
- Opaque Return: Shape を含める enum, abstract Shapeを返せる(SwiftUIで有用)
- Property Wrapper: カスタム getter/setter の実装
LT 1
- reject の理由=MacOS 甘えんな
- IAP ガイドライン:?
- iOSキーボードの開発で注意事項:30MB 制限
- 左利きのApple Pencil 使い方。これアップルが配慮して欲しい
LT 2
- 仮想カメラ:VirtualCameraSampleMain
- PDF は圧縮:view.layer.renderLayer → view に PDF レンダーする実装を
- リーブランディング:きせかえは Asset Catalog で管理しよう
- アプリの引き渡し:SignInWithApple 解除 / KeyChain の UserDefaults / 課金の国設定
2日目(2020/9/21)
Note のビルド周り自動化 (C)
- テスト用の新端末登録(UDID、機種など取得し)
- ビルド
- changelog 取得し追記
- appstore アップロード
- release
- dsym アップロード
→自分の主務とだいぶ同じ
Bazel と Micro Modular Architecture (E)
- Monolith: 大きすぎるとビルドに時間もかかるし、重たい
- Bazel は Micro-Modularization の期初
- Modularization: Application-Features-Domains-Libraries
- Bazel: Fast+Reliable+Scalable+Extensible
- Plugin 概念なのでいろんな言語で書ける
- Build Cache もリモートで使える
- Pinterest はこれで 20~40% 速度改善できた
- LINE も Bazel 使ってる(あと堀さんも)
- LINE のリポ:https://github.com/line/rules_apple_line
- Bazel 書き方:WORKSPACE ファイルがあったら一旦 Bazel
- bazel build //target
- Xcode で index を切り替える:lyft/index-import
- Bazel の iOS 支援は非公式
- iOS でも Gradle は実は使えたんだ
- 積極的な Cache (Micro Modularized ones ごとにキャッシュ)
- GraphWiz
- https://bazel.build
組織とアプリ開発プロセス(C)
- 13~14人に マーケッターやテスターが含まれる
- リードタイム削減が目的
- 専門レイヤーにチームを分ける
- Scope(UXMap) -> Priority -> Process
- Incremental(1から、いいえ、0から) vs. Iterative(概ねから)
- 最初は結局Incremental, 機能追加は Iterative
- 結局 Priority 想定はこの場面で要る
Firebase Dynamic Links(D)
- In App message に関して
- FDL でできること
- Deep Link かな?→似てるけど少し違う
- 未設置→インストールリンク
- 設置→特定画面へ遷移
- 長所
- iOS/Android 関わらず1つのアドレスで出来る
- 振替ウェブページへの遷移もできる
- イベント、アクセスユーザなどが集計できる
- Firebase 導入方法
- firebase console でケースによる許容リストを作成(
\
要る) - APPID
- アプリに import firebase し Firebase.configure で設定
- firebase console でケースによる許容リストを作成(
- Dynamic Link 生成
- 短縮 URL リンクを設定する
- 両方の動作を定義(iOS, Android系)
- 生成後にイベントのトラッキング情報追加可能
- App 内の設定
- Signing Capabilities で Dynamic link を導入
- 該当画面で handle 処理を行う
- アプリのバージョンチェックで、アップデートさせるかどうかを決定
- 失敗したら crashlytics への報告も設定できる
- 動的リンクの弱点
動的リンクを作ると、 Analytics に含まれなくなるのが辛いところです。
CTIサービスと物理デバイス(A)
- CTI(Computer Telephony Interation) →コールセンターのあれ!
- CTI は:お客からの電話を分配すること、各種情報を収集し保存
- iOS関係=iPad などとCTIの連携
- 実際 iOS の技術的な部分はなかった気が…
Apple Silicon (E)
- Google Stadia Tech solution Engineer さんが語る Apple Silicon
- マジか… iphone の半導体(コア)の話だった…
- でも面白い歴史授業
LT 1
LLDB
- Obj-c のコンパイルで使うLLDB
- pvc で.h を解析
- tv でファイル検証
- vinfo でファイル情報確認
- pc <↑から見えるindex> <メソッド> でメソッド解析
iOS13 Siri ショットカット
- NSUserActivity で shortcut にアクション入れる
- ?(素人すぎてメモできなくなった)
xcrun essentials
- 基本 simctl list/create/delete などの話だった
Swift でわかるSOLID
- Single responsibility(1クラスは 1アクター)
- O
- Liskov Substitute
- I
- Dependency Contrast (
Flutter vs. SwiftUI
- SwiftUI のプロトコルが多すぎ問題
- Flutter はUIレイアウト関連でわかりやすい
- Grid/LazyGrid
LT2
iOS開発の教育
- 教えのコツ
- 知るのが当然(x) 知らないのが当然(o)
- 説明は理解するまで
- Human Interface Guideline?
- Appとは:一言で説明できるように
Feature Flag で A/Bテスト改善
- 特定機能がちゃんと動くかの判定=Feature Flagで
- ライフサイクル順で以下のように分類
- Release
- 本番用
- サイクル短い、変更は少ない
- Experiment
- パーフォマンス・テスト用
- Ops
- システムの動作
- Permission
- 制限・ユーザ権限
CryptoKit / Core Bluetooth でスマートキー
- RXBluetoothKit と言うライブラリで楽にBluetooth 使える
- Challenge → sha256 で有効検証 → 確認したらオープン
- CryptoKit は CommonCryptより書きやすい(swiftだから)
Low-Latency HLS で超低遅延配信
- Periscope: TS を Chunk Transfer Encoding で予め送る
- Apple は逆にごまきれ
着信者表示
- Call Directory Extension で Caller 情報確認
- 0から始まらないと caller directory extension で認識ができない
- ↑ iOS 12までは国番号つけて、13からはしなくてもおkだった