<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>mobile on Ikoma's Blog</title><link>https://blog.yusukeikoma.com/tags/mobile/</link><description>Recent content in mobile on Ikoma's Blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 30 Sep 2026 11:33:30 +0900</lastBuildDate><atom:link href="https://blog.yusukeikoma.com/tags/mobile/index.xml" rel="self" type="application/rss+xml"/><item><title>Expo's Fingerprint Runtime Version Changes When You Edit extra, Not Your JavaScript</title><link>https://blog.yusukeikoma.com/posts/fingerprint-runtime-version-changes-when-you-edit-extra/</link><pubDate>Wed, 30 Sep 2026 11:33:30 +0900</pubDate><guid>https://blog.yusukeikoma.com/posts/fingerprint-runtime-version-changes-when-you-edit-extra/</guid><description>An over-the-air update is JavaScript that calls into a native binary you cannot change. Treat the runtime version as the ABI version of that binary. Experiments with @expo/fingerprint 0.20.13 show which edits change the hash (extra, version, build numbers, native modules) and which do not (JavaScript, pure-JS dependencies), and a skip list that silently drops a default.</description></item><item><title>React Native's Built-In URL Does Not Resolve '../x'</title><link>https://blog.yusukeikoma.com/posts/react-native-builtin-url-does-not-resolve-dot-dot/</link><pubDate>Sat, 26 Sep 2026 21:31:14 +0900</pubDate><guid>https://blog.yusukeikoma.com/posts/react-native-builtin-url-does-not-resolve-dot-dot/</guid><description>A client library shared between a website and a React Native app usually fails on the boring parts of the Web platform, not on fetch. Reading React Native 0.87.1 and Expo 57 sources shows three layers of runtime, a URL class that returns &amp;lsquo;/b/c/d/../x&amp;rsquo; where the web returns &amp;lsquo;/b/x&amp;rsquo;, and a fetch with no response stream unless Expo replaces it. A small client that checks what it needs, tested against four simulated runtimes.</description></item><item><title>APNs Stores One Pending Notification per App, So Treat Push as a Hint</title><link>https://blog.yusukeikoma.com/posts/push-notifications-are-hints-apns-stores-one/</link><pubDate>Sat, 19 Sep 2026 21:10:16 +0900</pubDate><guid>https://blog.yusukeikoma.com/posts/push-notifications-are-hints-apns-stores-one/</guid><description>Apple and Google both document what happens to a push when the device is offline, the app is killed or the sender is too chatty: messages are replaced, dropped, reordered or delayed. A table of those documented failure modes, and a small simulation showing that a client which pulls from a cursor converges where a client which applies push payloads does not.</description></item><item><title>A Step-Up Challenge Is a 401, and Your Client Needs a Loop Guard</title><link>https://blog.yusukeikoma.com/posts/step-up-authentication-challenge-is-a-401/</link><pubDate>Tue, 15 Sep 2026 13:18:09 +0900</pubDate><guid>https://blog.yusukeikoma.com/posts/step-up-authentication-challenge-is-a-401/</guid><description>RFC 9470 lets an API tell a client that its access token was obtained with too weak or too old a login. Reading the RFC section by section, then building a toy server and client, shows what the document specifies (a 401 challenge, two parameters) and the three things it leaves to you: concurrent challenges, loops, and caches.</description></item><item><title>After Backgrounding, a WebSocket Reporting OPEN Is Only a Claim</title><link>https://blog.yusukeikoma.com/posts/mobile-os-background-sockets/</link><pubDate>Sat, 12 Sep 2026 14:18:24 +0900</pubDate><guid>https://blog.yusukeikoma.com/posts/mobile-os-background-sockets/</guid><description>Apple&amp;rsquo;s and Android&amp;rsquo;s own documentation say a backgrounded app can be suspended, its network access deferred, and its existing connections closed. So when your app comes back, readyState === OPEN is only a memory of the last event, not a measurement. This post derives a small foreground routine (probe, rebuild, catch up) from those documented rules, runs it against a frozen-process stand-in on Linux, and is explicit about what no device was used to check.</description></item></channel></rss>