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
お読みいただきありがとうございました。
この記事が気に入ったらサポートをしてみませんか?