Library

経歴

PlayKeyboard

iOSエンジニア

2022 - 2024UIKitSwiftUIKeyboardiOS
テーマ
言語

経歴

PlayKeyboard

2022 - 2024UIKitSwiftUIKeyboardiOS

期間

2022.01.03 - 2022.07.15

2023.07.03 - 2023.10.03

2023.12.27 - 2024.09.30

担当業務

2023.12 - 2024.09

  • iOSアプリテックローンチ
    • ユーザーがキーボードで入力してポイントを獲得できるアプリテックをローンチ。
    • アプリテックからスーパーアプリへの移行準備として、様々な機能をサポートするためにPureDI、Combine、OneWayの導入を主導。
  • Web入力フリッカリング軽減
    • 全てのiOSキーボードエクステンションで共通する問題で、誰もが解決不可能と言っていたWeb入力時のフリッカリング問題を分析し、粘り強く解決策を見つけて適用・デプロイ。(世界初)

比較(左:改善前、右:改善後)

Web入力フリッカリング軽減前Web入力フリッカリング軽減後
  • Combine導入
    • レガシーコードを削除しViewをリアクティブにし、将来のSwiftUI移行に柔軟に対応できるコードを作成。
  • キーボードエクステンションにPin&Flex Layoutを導入
    • キーボードエクステンションにPin&Flex Layoutを導入してキーボードパフォーマンスを改善し、安定性を60%台から98-99%に向上。
    • このプロセスでFlexLayoutオープンソースに貢献。
    • Medium記事(KR)
キーボードレイアウト最適化スクリーンショット
  • マルチスレッド管理
    • iOSキーボードエクステンションの限られたリソース内で効率的なリソース活用とパフォーマンス向上のため、Modern ConcurrencyとGCDを使用してスレッドセーフなコードを作成した経験。
  • Swift Concurrency & OneWay導入
    • AlamofireとSwift Concurrencyを導入し、ネットワーキング抽象化で柔軟に使用。
    • MVIアーキテクチャOneWayを導入してConcurrencyをよりクリーンに使用し、ViewとViewModelの役割を分離し、PureDIと併用してテスト可能な環境構築に貢献。
  • PureDI導入 & Storyboardコード削除
    • TDD導入のためにテスト環境を柔軟に構築できるようprotocolを使用したPureDIサービスコンテナを設計し、実装のためにStoryboardコードを削除。
  • キーボードオートコンプリート機能
    • UITextCheckerを使用したキーボードオートコンプリート機能の作成・デプロイに貢献。
  • BaseViewController導入
    • ビュークラスを標準化するためにBaseViewControllerを導入し、全体的なコードスタイルをレビュー。
  • AirBridge導入 & Deeplinkロジック整理
    • 問題のあったFirebase dynamic linkを置き換えるためにAirbridgeを導入し、リンクスキームを使用してdeeplink & deferred deeplinkロジックを整理。
  • キーボードASCIIアート機能
    • キーボードからASCIIアートを送信する機能の作成・デプロイに貢献。
  • CI/CDパイプラインメンテナンス
    • 導入したCI/CDパイプラインをメンテナンスし、環境を更新・最適化。
      • ビルドキャッシュによりビルド速度を20%改善。
  • Realm依存関係削除
    • キーボードの重いRealmライブラリ依存関係を削除し、アプリサイズを縮小しキーボードパフォーマンスを改善。
  • SPMライブラリ移行
    • 将来のTuist導入に備えてライブラリをSPMに移行。
  • その他のバグ修正とメンテナンス

2023.07 - 2023.10

  • マイテーマ機能ローンチ
    • 限られた2週間の期間内でマイテーマ機能を実装・ローンチ。ユーザーが自分の写真を挿入してカスタムキーボードを作成可能に。
    • キーボードの50MBメモリ制限を満たすために画像ダウンスケーリングを使用。
    • サムネイル機能のために画像合成を使用。
    • Gif最適化技術を研究・使用。
  • タッチエリア修正
    • hitAreaの可視化で誤ったタッチエリアを検証し、Viewの間隔を再調整してタッチエリアが元の意図通りに動作するように修正。
  • CI/CDパイプライン構築
    • エラーで動作していなかったFastlaneとCircle CIを使用したデプロイパイプライン自動化を再構築。
  • RxSwiftコード削除とCombineへの移行
    • 業界のトレンドに従ってRxSwiftの一部をSwift ConcurrencyとCombineに部分的に変換。
  • 2022.01 - 2022.07
  • Firebase経由のiOSアプリ管理
    • Firebase Crashlyticsでアプリの充電ステーション進入時のクラッシュを検出し、影響を受けるユーザーの規模を特定し、問題を優先して迅速に修正。 APIがlayoutSubviews()で誤って呼び出されていたのを、適切なライフサイクルで更新するように変更。
    • Firebaseで様々なユーザーイベントを収集し、追加機能のデータ検証に活用。
    • Remote Configでアプリレビューを経ずにアンケートフォームのリンク変更やバージョン管理による強制アップデートなどの作業を実施。
  • ギフト/リクエスト機能
    • キーボード商品の購入コンバージョン率を上げるため、デザインガイドラインに従って新機能を開発。
    • ローンチ後、売上の34%がギフト/リクエスト機能経由。(ローンチ2週間後)
    • Firebase Dynamic Linksを使用して実装。
  • RxSwift移行
  • 一部のレガシーコードを特定の領域でRxを使用したリアクティブプログラミングに変換。
  • 1ページで多くの非同期イベントが同時に管理されており、RxSwiftを使用してよりきれいに整理。
  • キーボード最適化
    • ライブテーマのキーワード応答機能のインデックス速度を配列検索の代わりにハッシュを使用して改善し、応答速度を向上。
    • UI描画の一部をAutoLayoutからPinLayout & FlexLayoutに変換し、以前のメインスレッドのみのUI方式とは異なりマルチスレッド使用が可能になり、キーボード読み込み速度を改善。
  • テーマ無料トライアル機能
    • 以前は人気テーマを使用するには購入が必要だった。高い支払いハードルがアクティブユーザーを減らしていると考え、Google Admobをアプリに追加して広告経由で無料テーマトライアルを提供。
  • ランキングシステム追加
    • 無料トライアルと購入コンバージョン率を上げるためにアプリにランキングシステムを追加。
    • ランキングページを訪問したユーザーとそうでないユーザーを区別すると、無料トライアルが約5.5倍、購入が約2倍増加。
  • NUX改善アップデート
    • ユーザー離脱率を下げるためにアプリのNUXフローを改善。
    • 全体的な離脱率は下がらなかったが、テーマ購入コンバージョン率が3%から10-15%に増加し、キーボード有効化後のメイン画面へのコンバージョン率が約8%増加。
    • 一部のレガシーStoryboardコードを削除し、コンフリクト防止のためにコードベースUIに変換。
  • キーボード絵文字機能
    • キーワードに応答するライブテーマ商品の価値を高めるため、ダウンロードしたライブテーマの絵文字を使用できる機能を追加。
    • 以前はライブテーマはそのテーマが適用されている時のみ使用可能だったが、他のテーマを使用中でも所有する全テーマのステッカーを選択・使用できるようにアップデート。
    • 全てのステッカー(写真)をキーボードに直接表示すると、iOSキーボードの30MBメモリ制限によりキーボードが終了してしまう。 コレクションビューのスクロールごとにメモリが危険レベルまで上昇し、画像ダウンプロセッシングやgifフレーム読み込み管理などのアイデアでメモリ問題で不可能と思われていたステッカー機能を追加。
  • 全体的なiOSアプリメンテナンス
    • 引き継ぎで既存のプロジェクト構造を理解し、追加機能開発とメンテナンスを担当。
    • 内部テストでQAを実施し、デプロイを担当。
PlayKeyboardPlayKeyboard
iOSエンジニアiOSエンジニア