見出し画像

3日間 iOSDC2023:Day1

オープニング

TextKit 2 時代の iOS のキーボードとテキスト入力と表示のすべて:@niw Yoshimasa Niwa

  • TextKit2では行単位

  • typographicBoundsはiOS17で治ったがバグっているので注意

  • Attachmentで循環参照に注意

  • 自動フォールバックに注意⚠️

Mastering SwiftSyntax:@k_katsumi katsumi

  • 概要

    • 小要素:statements

    • AST Explorer

    • trivia

    • Swift Parser

    • SwiftSyntaxを使ってシンタックスツリーを部分的に置き換えられる。

  • シンタックスツリー

    • シンタックス型のオブジェクト

    • トークンが最小単位

    • 構文ノード

  • Visitor

    • シンタックスと文字列は比較できない。(エラーにはならない)

  • rewriter

    • ソースコードを書き加えることができる。

    • 小要素の探索をする場合はsuperを返す

    • Base Node

    • Source Location Converter

    • SwiftSyntaxは型はわからない。

    • エラーの構文も自動補完して続行する。

    • hasErrorをチェックしよう!。

  • 実践

    • BasicFormat

    • 自動フォーマット無効もできる。

    • SwiftOperetersという機能がある。

  • SwiftLintルール

    • 違反の検出

    • 自動修正機能

  • メタプログラミング:プログラムでプログラムを操作する。

  • まとめ

    • Class、 Struct、Actor以外の型に適用しない

    • 型につくアクセス修飾子(public、privateなど)とイニシャライザのアクセスレベルを一致させる

    • Computed Propertyを除外する

    • 関数型のプロパティに対応する

サンプルコード


出前館におけるApple Pay運用Tips:@kuroFront46 Shinji Kurosawa

  • 2016年から使えるようにした

  • 運用上の注意点をまとめたい

  • 概要

    • app: Payment processing certificate

    • web: merchant identity certificate, merchant Domain, Payment processing certificate

  • Payment processing certificate

    • 加盟店識別ID

  • merchant identity certificate

    • webのセッションの正しさを証明する。

  • merchant Domain

    • ホワイトリスト登録。

  • 更新の方法・注意点

    • Payment processing certificate

      • 頻度:2年に1回

      • 2つ作成できるがActivateできるのは一つのみ!。(並行運用できない)

      • 新しい証明書をActivateすると古いのが数分でExpireする!。すぐ差し替えないと決済できなくなるので注意!。

    • merchant identity certificate

      • 頻度:1年に1回

      • 2つまで作成でき、2つ運用できる。

    • merchant Domain

      • 頻度:webのSSL証明書が切れるタイミング

      • 同時運用数に制限はない

      • Verificationの手順

        • associationをDL

        • Apple Develoerの画面は開いたまま待機

        • サーバに置いた後にVerificationする

      • Sandbox環境の注意点

        • ドメインの認証不要で使えるが。。。

        • canMakePaymentsWhithActiveCard

        • これはドメインの認証がないと使えない。

      • 結構更新するので大変。

UIのブラックボックスを探る:@noppefoxwolf noppe

  • リバースエンジニアリングの基礎知識

  • ブラックボックス=暗黙の仕様

  • AppleのUIお作法とはHIG

  • Apple製のアプリを分析

    • UIの品質の理想値

  • 観点: ビジュアル・インタラクション

  • よく知ると解像度が上がる。

  • 影の長さ・サイズの共通性

  • Dynamic Typeも活用する。

  • 特定の意味を持つカラーを探す。

  • ダークモードに注意

  • アニメーションSlowAnimationで確認。

  • ビュー階層: lookin, reveal/frida

  • ktool, DyldExtractor

  • インタラクション

  • ジェスチャーをしろう!

    • 補助ジェスチャー

    • 不可視トリガー: シェイクジェスチャーなど

  • 閾値: サイズが見た目より大きくなっていたりする。

  • フィードバック

    • サウンド: ipaを解析するとファイルがある。

    • ハプティック: ないこともあるのでそこも注視する

  • UIの解釈は一致するとは限らない。

  • デザインの追従: カスタムはコスト高い

  • 叶えたいデザインによって増える人数と失われるユーザビリティによって失う人数

  • 定量評価

なぜ、弊社はFlutterを捨ててネイティブ化(Swift / Kotlin)にコミットしたのか:佐藤 直之

  • RIZAPがなぜ、最初にFlutterを選択し、のちにFlutterを捨ててネイティブ化(Swift / Kotlin)を選択したのか

  • 超短納期だった

    • 実質2ヶ月

    • エンジニア1名のみ

    • フラッター起因のトラブルはなかった

    • OSの違いがなくできたのは良かった

    • QAも短くすんだ

  • 問題

    • 人材がいない

    • Bluetoothを利用していて、フラッターだけでは無理だった。。

    • トリプルエンジニアはまあいない

    • webView問題

    • セッション周りの挙動に問題が

    • 他のAPIでも謎のバグが。。

    • ネイティブ化で人材が増えた。

  • ネイティブ使うなら

    • SwiftUI+TCA

      • テストコードが書きやすい

      • TCAはそこまで学習コストは高くなかった

      • Efectが良さげ

    • マルチモジュールもやってるよSwiftPM

    • Jetpack Compose + MVVM

  • 大変だったこと

    • グラフ周りが大変だった

    • テスト工程がかなり時間かかった

    • OSごとの仕様差分がやはり出る。

    • 嬉しい悲鳴としてデザイン議論が起きた。

聴いて話すiOS:現実世界の「音」との連携:@_chocoyama たまねぎ

  • 簡単・強力になっている

  • 音声認識とトランスクリプト

  • 発話によるフィードバック

    • 発話スピードの調整とかもできる。

  • 音声マッチング

    • ShazamKit

    • 楽曲再生などはMusicKit

    • 音源からSignetureを作成

  • 音声分類

    • SoundAnalysis

    • iOS15からすでに学習済みのモデルを使える。

    • リアルタイムだけでなくファイルに対してもできる。

正規表現を"微分"する!?爆速で自作できる正規表現エンジン:@ta_ka_tsu ta_ka_tsu

  • 正規表現エンジンの実装ではオートマトン型と仮想マシン型が主流です。

  • 前者は正規表現から決定性有限オートマトン

  • 後者は、正規表現をバイトコードにコンパイルし仮想マシンを作成する方法

  • 形式言語理論

  • 完全一致のみを取り扱う。

  • 本日のアルゴリズム

    • 正規表現rはcatにマッチする

    • rは無限にある。

    • cで微分した正規表現は存在する。

    • aで微分した正規表現は存在する。

    • tで微分した正規表現は存在する。

    • 最後に空文字とマッチさせればいい。

    • 選択の微分はそれぞれの微分の選択

    • 連節の微分

      • 空文字がマッチしない時とマッチする時が必要

      • 補助関数でるたを定義するとまとまる。

  • 実装

  • 実装の速度に関して

  • 関数ー>微分する→導関数

  • 正規表現を"微分"する


君だけのGFMエディタを作ろう!:@FromAtom FromAtom

  • 2004年に生まれた。

  • カオスになった。

  • CommonMarkが生まれた。

  • GFMベースで作る。

  • swift-markdown

  • ビジターパターン

  • シンタックスハイライト

    • Source Rangeを取得

    • Source RangeをNSRangeに変換


StoreKit testingを使ってアプリ内課金のテストや検証を効率化する方法:@BOBG1018Vi ぼぶ

  • AppStoreConnect介さずに確認できる

  • チェックを入れると実際の商品と同期できる。

  • テストかどうかなどをiOS16からはtransactionが使える。

  • Unit Test

    • Grace Period

    • フレークテスト

    • forceがあるのでトランザクションの時だけスリープすればいい。

  • StoreKitTestはAppStoreConnectに実際の商品を作成する必要がない

  • 生成されるレシート及び、Transactionはダミーである


Today's Update


お読みいただきありがとうございました。

この記事が気に入ったらサポートをしてみませんか?