[{"data":1,"prerenderedAt":77},["ShallowReactive",2],{"issue-435-2026-07-05":3},{"id":4,"number":5,"url":6,"title":7,"closedAt":8,"description":9,"issues":10},"MI_kwDOB4jhdM4A_L8E",435,"https:\u002F\u002Fgithub.com\u002FAndroidDagashi\u002FAndroidDagashi\u002Fmilestone\u002F435","435 2026-07-05","2026-07-05T11:40:07Z","暗号化・自動リフレッシュ対応のAndroid認証アーキテクチャ, KMPで作った受付アプリをiPadに対応させた話, Compose DesktopはなぜAWT\u002FSwingを使うのか？, など",{"totalCount":11,"pageInfo":12,"nodes":16},5,{"startCursor":13,"endCursor":14,"hasPreviousPage":15,"hasNextPage":15},"Y3Vyc29yOnYyOpLPf________5vPAAAAAR7apVI=","Y3Vyc29yOnYyOpLPf________gvPAAAAAR7bZjI=",false,[17,32,41,53,66],{"url":18,"title":19,"body":20,"labels":21,"comments":27},"https:\u002F\u002Fgithub.com\u002FAndroidDagashi\u002FAndroidDagashi\u002Fissues\u002F3790","暗号化・自動リフレッシュ対応のAndroid認証アーキテクチャ","https:\u002F\u002Fproandroiddev.com\u002Fan-android-auth-architecture-with-encrypted-tokens-auto-refresh-and-reactive-navigation-b5dcb7704f83\n\n暗号化トークン保存・自動リフレッシュ・リアクティブなナビゲーションを備えたAndroid認証アーキテクチャの解説。DataStore + Tinkによるトークン暗号化、認証状態をFlowとして監視し画面遷移を駆動する設計、KtorのAuthプラグインによる透過的なトークン再取得などを、Compose・Ktor・Koinのリファレンス実装をもとに紹介している。",{"nodes":22},[23],{"name":24,"description":25,"color":26},"Kotlin","","EC953C",{"totalCount":28,"pageInfo":29,"nodes":31},0,{"startCursor":30,"endCursor":30,"hasPreviousPage":15,"hasNextPage":15},null,[],{"url":33,"title":34,"body":35,"labels":36,"comments":38},"https:\u002F\u002Fgithub.com\u002FAndroidDagashi\u002FAndroidDagashi\u002Fissues\u002F3791","AndroidでBluetoothプロトコルをリバースエンジニアリングする","https:\u002F\u002Fproandroiddev.com\u002Freverse-engineering-the-bluetooth-protocol-on-android-680275f129e0\n\nAndroid 9から14へのデバイス更新後、Bluetooth接続の決済端末に繋がらなくなった事例の調査記録。原因はAndroid 10\u002F12で導入されたMACアドレスのランダム化により端末のIPアドレスが毎回変わることだった。APIやARPファイルへのアクセスが制限される中、bt-panインターフェースのサブネットにpingを打ってIPを特定する回避策の実装を紹介。",{"nodes":37},[],{"totalCount":28,"pageInfo":39,"nodes":40},{"startCursor":30,"endCursor":30,"hasPreviousPage":15,"hasNextPage":15},[],{"url":42,"title":43,"body":44,"labels":45,"comments":50},"https:\u002F\u002Fgithub.com\u002FAndroidDagashi\u002FAndroidDagashi\u002Fissues\u002F3792","設計書から始めるレガシーFragmentのリファクタリング","https:\u002F\u002Ftechblog.zozo.com\u002Fentry\u002Fdoc-first-fragment-refactoring\n\nZOZOTOWN Androidアプリのレガシー画面をKotlin + Jetpack Compose + MVVMへリファクタリングした事例。実装前にAIと協働で仕様調査・設計書・タスク分解を書ききり、UIを仮データで先にCompose化して段階的に接続する工程を採用。sealed interfaceによる型安全な状態設計やClaude Code活用Tipsも紹介されている。",{"nodes":46},[47],{"name":48,"description":25,"color":49},"Jetpack Compose","006b75",{"totalCount":28,"pageInfo":51,"nodes":52},{"startCursor":30,"endCursor":30,"hasPreviousPage":15,"hasNextPage":15},[],{"url":54,"title":55,"body":56,"labels":57,"comments":63},"https:\u002F\u002Fgithub.com\u002FAndroidDagashi\u002FAndroidDagashi\u002Fissues\u002F3793","KMPで作った受付アプリをiPadに対応させた話","https:\u002F\u002Ftech.stmn.co.jp\u002Fentry\u002F2026\u002F06\u002F26\u002F152302\n\nスタメンのTUNAG受付アプリがKMPで共通化したロジック資産をそのまま活かし、SwiftUIのUI層を追加するだけでiPad対応を実現した事例。expect\u002Factualによるプラットフォーム差の吸収、SKIEを使ったStateFlowのSwift連携、Xcode CloudでのKMPビルド環境構築など実践的な知見がまとまっている。\n2022年に「将来のiOS展開を見越してKMM採用」した設計判断が今回回収された、という文脈が面白い記事でした",{"nodes":58},[59,60],{"name":24,"description":25,"color":26},{"name":61,"description":25,"color":62},"X-Plat","efd4a0",{"totalCount":28,"pageInfo":64,"nodes":65},{"startCursor":30,"endCursor":30,"hasPreviousPage":15,"hasNextPage":15},[],{"url":67,"title":68,"body":69,"labels":70,"comments":74},"https:\u002F\u002Fgithub.com\u002FAndroidDagashi\u002FAndroidDagashi\u002Fissues\u002F3794","Compose DesktopはなぜAWT\u002FSwingを使うのか？GLFWベースの代替実装をめぐる議論","https:\u002F\u002Fslack-chats.kotlinlang.org\u002Ft\u002F34112953\u002Fi-ve-been-wondering-for-a-long-time-why-does-compose-desktop\n\nCompose DesktopがAWT\u002FSwingに依存する理由を発端に、GLFWベースの代替ホスト実装が議論されたスレッド。投稿者はWaylandネイティブ対応やタッチ入力を実現するcompose-glfwを公開。Tauriのtaoを使うNucleus 2.0や、JetBrains公式のkotlin-desktop-toolkitによるAWT置き換え計画にも話題が及ぶ。",{"nodes":71},[72,73],{"name":61,"description":25,"color":62},{"name":48,"description":25,"color":49},{"totalCount":28,"pageInfo":75,"nodes":76},{"startCursor":30,"endCursor":30,"hasPreviousPage":15,"hasNextPage":15},[],1783252105024]