0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

初リモート開催の iOSDC 2020 景色

Last updated at Posted at 2020-09-23

参加動機

  • そもそも人見知りすぎてコンファレンスなど嫌がり
  • 会社チームで強引された

特記

  • 一般参加者としては多分初めての完全リモートコンファレンス
  • ニコ生、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 で設定
  • 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だった
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?