<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Tim</title>
    <description>The latest articles on DEV Community by Tim (@timbuilds).</description>
    <link>https://dev.to/timbuilds</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4152691%2F9a80c7df-e87f-4db5-ab11-87960180d830.png</url>
      <title>DEV Community: Tim</title>
      <link>https://dev.to/timbuilds</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/timbuilds"/>
    <language>en</language>
    <item>
      <title>Google Play's API 36 deadline passed — here's the extension and the upgrade checklist</title>
      <dc:creator>Tim</dc:creator>
      <pubDate>Sat, 03 Oct 2026 11:12:40 +0000</pubDate>
      <link>https://dev.to/timbuilds/google-plays-api-36-deadline-passed-heres-the-extension-and-the-upgrade-checklist-1n4a</link>
      <guid>https://dev.to/timbuilds/google-plays-api-36-deadline-passed-heres-the-extension-and-the-upgrade-checklist-1n4a</guid>
      <description>&lt;p&gt;On August 31, 2026, Google Play stopped accepting new apps and app updates that don't target Android 16 (API level 36). If you haven't upgraded yet, you're not reading a warning about the future — your next upload is already blocked.&lt;/p&gt;

&lt;p&gt;The good news: there is a documented way to buy time. The bad news: it's a one-time extension to November 1, 2026, requested through a form in Play Console. It's not automatic, and November 1 is a hard date. If you're blocked, file the extension today — then do the work, because the extension is not a plan.&lt;/p&gt;

&lt;h2&gt;
  
  
  The rule, precisely
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Phones, tablets, foldables: new apps and &lt;strong&gt;all updates&lt;/strong&gt; must target API 36+. The block hits at submission in Play Console — even a one-line crash fix can't ship until &lt;code&gt;targetSdk&lt;/code&gt; goes to 36.&lt;/li&gt;
&lt;li&gt;Wear OS and Android Automotive: API 35+. Android TV and Android XR: API 34+.&lt;/li&gt;
&lt;li&gt;Apps you never touch again don't vanish, but they stop being available to &lt;strong&gt;new users&lt;/strong&gt; on devices running a newer OS than your target. An app left on API 34 quietly stops being installable on current phones — which looks identical to your install rate dying for no reason.&lt;/li&gt;
&lt;li&gt;Permanently private apps restricted to one organization and internal distribution only are exempt.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two companion gates ride the same deadline: apps using Play Billing must be on &lt;strong&gt;Billing Library 8.0.0+&lt;/strong&gt;, and if you ship native code, Play starts refusing uploads without &lt;strong&gt;16 KB page-size support&lt;/strong&gt; on February 1, 2027. Check both while you're in there.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually breaks when you raise targetSdk to 36
&lt;/h2&gt;

&lt;p&gt;Changing the number takes a minute. Everything after that is the work:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Edge-to-edge is now mandatory.&lt;/strong&gt; The opt-out is dead. Deprecated flags like &lt;code&gt;systemUiVisibility&lt;/code&gt; and &lt;code&gt;setDecorFitsSystemWindows(false)&lt;/code&gt; misbehave at target 36. Use &lt;code&gt;enableEdgeToEdge()&lt;/code&gt; plus proper &lt;code&gt;WindowInsets&lt;/code&gt; handling, and audit every screen for content hidden under system bars.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Predictive back is default-on.&lt;/strong&gt; If you still override &lt;code&gt;onBackPressed()&lt;/code&gt;, migrate to the &lt;code&gt;OnBackPressedDispatcher&lt;/code&gt; / &lt;code&gt;BackHandler&lt;/code&gt; APIs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Orientation and resizability restrictions are ignored on large screens&lt;/strong&gt; (sw ≥ 600dp). If you lock orientation, test on a tablet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;16 KB page sizes.&lt;/strong&gt; Native libraries compiled for 4 KB pages fail on 16 KB devices. Check every &lt;code&gt;.so&lt;/code&gt; with &lt;code&gt;readelf -lW&lt;/code&gt; — every LOAD segment needs &lt;code&gt;p_align&lt;/code&gt; of &lt;code&gt;0x4000&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The toolchain moves together.&lt;/strong&gt; You can't just bump &lt;code&gt;targetSdk&lt;/code&gt;: AGP ~8.13, Gradle 8.13 (the documented pairing), Kotlin 2.x, &lt;code&gt;compileSdk&lt;/code&gt; 36. Bump them in the safe order and keep a green build at each step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Billing v8 migration.&lt;/strong&gt; &lt;code&gt;enableOneTimeProducts()&lt;/code&gt; and the new query APIs are the most-reported breakage — outdated wrappers like old &lt;code&gt;react-native-iap&lt;/code&gt; versions can pin an old billing client transitively, so check the resolved dependency tree, not just your declaration.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Per-framework gotchas differ: Flutter devs hit edge-to-edge insets and plugin native code; React Native devs hit the billing wrapper pin and Hermes/NDK alignment; Capacitor/Cordova devs often discover a plugin ships a 4 KB-aligned &lt;code&gt;.so&lt;/code&gt; they never knew about.&lt;/p&gt;

&lt;h2&gt;
  
  
  The verification pass
&lt;/h2&gt;

&lt;p&gt;After the upgrade, verify from the built artifact, not from your source constants:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aapt2 dump badging app-release.aab | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; targetSdk
./gradlew :app:dependencies | &lt;span class="nb"&gt;grep &lt;/span&gt;billingclient
readelf &lt;span class="nt"&gt;-lW&lt;/span&gt; path/to/every/arm64-v8a/&lt;span class="k"&gt;*&lt;/span&gt;.so | &lt;span class="nb"&gt;grep &lt;/span&gt;LOAD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then test on a real Android 16 emulator — and if you ship native code, on a 16 KB system image too. The Play Console pre-launch report won't catch a page-alignment crash reliably.&lt;/p&gt;

&lt;h2&gt;
  
  
  The full checklist
&lt;/h2&gt;

&lt;p&gt;I've packaged everything above into a complete upgrade kit — the 5-question blockage self-check, the extension-filing walkthrough (exact Play Console path), the toolchain matrix with safe step order, 8 behavior changes with copy-paste fixes, per-framework notes, the 16 KB verification commands, a 12-symptom breakage catalog, and the 7 mistakes that cost devs the most time: &lt;a href="https://8286544375711.gumroad.com/l/yuwbzo" rel="noopener noreferrer"&gt;https://8286544375711.gumroad.com/l/yuwbzo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: the kit is a paid $29 product. Everything in this article is free and standalone — the kit is for people who want the complete checklist in one place instead of assembling it from the docs.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Independent guide — not affiliated with Google. Verify deadlines against the official target API requirements page; policy details evolve.)&lt;/em&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>mobile</category>
      <category>gradle</category>
      <category>kotlin</category>
    </item>
    <item>
      <title>The EU put a 24-hour clock on your side project's vulnerabilities</title>
      <dc:creator>Tim</dc:creator>
      <pubDate>Fri, 02 Oct 2026 11:12:30 +0000</pubDate>
      <link>https://dev.to/timbuilds/the-eu-put-a-24-hour-clock-on-your-side-projects-vulnerabilities-1f91</link>
      <guid>https://dev.to/timbuilds/the-eu-put-a-24-hour-clock-on-your-side-projects-vulnerabilities-1f91</guid>
      <description>&lt;p&gt;On September 11, 2026 — three weeks ago as I write this — the EU Cyber Resilience Act's reporting obligations went live. If you ship software into the EU, you are now a "manufacturer" with a legal clock: an early warning within 24 hours of becoming aware of an actively exploited vulnerability or severe incident, a fuller notification within 72 hours, and a final report within 14 days of a corrective measure (or one month for a severe incident). All filed through ENISA's Single Reporting Platform.&lt;/p&gt;

&lt;p&gt;A late-September Bitkom survey of 1,003 German companies found only 29% understand what the CRA means for their own business, and 28% have never heard of it at all. If you're a solo dev shipping an app, you're probably in the 71%.&lt;/p&gt;

&lt;h2&gt;
  
  
  Does this apply to you?
&lt;/h2&gt;

&lt;p&gt;The CRA covers "products with digital elements": software whose foreseeable use involves a data connection. Mobile apps, desktop apps, browser extensions, Electron apps, plugins, firmware, container images — yes. It applies regardless of where you're headquartered, and it covers products already on the market, not just new launches.&lt;/p&gt;

&lt;p&gt;Pure SaaS (everything runs on your servers, users only see a website) is generally out — that's a different regime. But if your SaaS ships a downloadable client, mobile app, or agent, that component is in scope. Commercial open source is in; pure non-commercial open source is out.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part everyone gets wrong
&lt;/h2&gt;

&lt;p&gt;The 24-hour clock does NOT start when you first hear a rumor. Per Commission guidance, it starts when an initial assessment gives you reasonable certainty of active exploitation or a severe incident — not on first suspicion, not on a scanner finding. And every CVE in your dependency tree is not a 24-hour event: presence ≠ exploitation. Only actively exploited vulnerabilities and severe incidents are reportable.&lt;/p&gt;

&lt;h2&gt;
  
  
  The solo-dev setup (do this week, not during an incident)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;One intake channel.&lt;/strong&gt; A security@ address plus a SECURITY.md in every repo. The clock starts while you're searching inboxes if reports scatter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A 15-minute triage checklist.&lt;/strong&gt; Is it my product? Is there evidence of active exploitation? How many users affected? Write it down — this log entry is your "awareness timestamp," and every deadline counts from it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pre-written drafts.&lt;/strong&gt; Your 24-hour early warning, 72-hour notification, and user notice, written now while you're calm. Filing should take 20 minutes at 2am, not 20 hours.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ENISA platform readiness.&lt;/strong&gt; EU Login accounts for you and one backup person. Know your CSIRT routing now (if you have no EU establishment, there's a decision tree — work it out in advance).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A dated evidence log.&lt;/strong&gt; Product inventory, your role per product, every intake record, every filing with timestamps. If a regulator ever asks, this is your answer.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The honest framing: enforcement against tiny indie teams is unlikely to be anyone's first priority. But the duty is live now, and "we had no process" is the worst possible position during an actual incident.&lt;/p&gt;

&lt;h2&gt;
  
  
  The five mistakes I keep seeing
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Treating every CVE as a 24-hour event (burns credibility with the CSIRT).&lt;/li&gt;
&lt;li&gt;No intake channel — reports arrive via DMs and forgotten inboxes.&lt;/li&gt;
&lt;li&gt;"I'm too small to matter" (the duty applies regardless of size).&lt;/li&gt;
&lt;li&gt;Designing the process during the incident.&lt;/li&gt;
&lt;li&gt;Forgetting to inform users — if you don't, the CSIRT can do it for you, and their version will be worse for your reputation.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I build small compliance kits for indie devs. This article's playbook is expanded in my $29 CRA 24-Hour Reporting Kit — the manufacturer decision tree, the full reporting cascade, what counts as reportable, the solo intake pipeline, copy-paste filing drafts for each stage, the ENISA walkthrough, and the evidence-log template: &lt;a href="https://8286544375711.gumroad.com/l/cra-reporting-kit" rel="noopener noreferrer"&gt;https://8286544375711.gumroad.com/l/cra-reporting-kit&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>opensource</category>
      <category>compliance</category>
      <category>devops</category>
    </item>
    <item>
      <title>Google's Android developer-verification enforcement is live (first wave) — what sideloading devs should do now</title>
      <dc:creator>Tim</dc:creator>
      <pubDate>Thu, 01 Oct 2026 07:13:22 +0000</pubDate>
      <link>https://dev.to/timbuilds/googles-android-developer-verification-enforcement-is-live-first-wave-what-sideloading-devs-2ne8</link>
      <guid>https://dev.to/timbuilds/googles-android-developer-verification-enforcement-is-live-first-wave-what-sideloading-devs-2ne8</guid>
      <description>&lt;p&gt;On September 30, 2026, Google's developer-verification enforcement went live in the first wave: Brazil, Indonesia, Singapore, and Thailand. Here's the scope, straight from Google's own documentation: right now it covers apps downloaded from participating stores (Google Play, Samsung Galaxy Store, Xiaomi GetApps, OPPO App Market, vivo V-Appstore, HONOR App Market, Transsion Palm Store) on certified Android devices in those four countries. Google says the same requirement expands globally to all install sources in 2027.&lt;/p&gt;

&lt;p&gt;What does that mean if you distribute Android APKs outside Google Play — direct downloads, F-Droid, GitHub Releases, your own site? Your exact deadline depends on your distribution:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;If your app is on Google Play&lt;/strong&gt; (even alongside other channels): you're in the participating-store set everywhere. Check Play Console now — unregistered apps are at risk of removal from Play globally.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If your users install via Galaxy Store / GetApps / etc. in BR, ID, SG, or TH&lt;/strong&gt;: they're hitting the block today.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If you distribute via F-Droid or direct APK download&lt;/strong&gt;: F-Droid is not a participating store, so the September wave doesn't block those installs — but the 2027 global rollout covers all install sources, which is when your distribution falls in scope. The rules are already written; the only question is your timeline.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A few facts worth knowing: verification means a $25 full-distribution Play Console account plus government photo ID (organizations additionally need a D-U-N-S number, which can take ~28 days — that's the long pole). When an install is blocked, users get a one-time bypass in settings — high-friction by design, not a viable distribution strategy. ADB installs are unaffected.&lt;/p&gt;

&lt;h2&gt;
  
  
  The checklist for this week
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Check your Play Console status.&lt;/strong&gt; If your app is on Play, confirm it's registered — that's the urgent one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decide your deadline honestly.&lt;/strong&gt; Users in the four launch countries installing via participating stores: you're already affected. Everyone else distributing outside Play: your enforcement date is the 2027 global rollout — start the process now while review queues are short.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify your identity.&lt;/strong&gt; $25 Play Console account with full distribution, government photo ID. Start now — review takes time and rejections happen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Back up your signing key.&lt;/strong&gt; Export it, store it offline in two places, record the SHA-256 fingerprint. If you lose the key you lose the ability to update your app, verification or not.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Register your package names + key fingerprints&lt;/strong&gt; once verification clears.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Orgs: request D-U-N-S today.&lt;/strong&gt; ~28 day turnaround.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Who should act first
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Apps on Google Play that were published years ago under accounts nobody actively maintains — check registration status today.&lt;/li&gt;
&lt;li&gt;Devs with users in Brazil, Indonesia, Singapore, or Thailand installing via participating stores.&lt;/li&gt;
&lt;li&gt;F-Droid and direct-APK devs — your scope date is the 2027 global rollout; getting verified now means you're covered for both.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pure Play Store devs who registered years ago: you're likely already verified through your existing Play Console account. Check anyway.&lt;/p&gt;

&lt;h2&gt;
  
  
  Free audit
&lt;/h2&gt;

&lt;p&gt;I built a free 2-minute audit that takes 7 answers and generates a prioritized action plan for exactly this situation: &lt;a href="https://8286544375711.gumroad.com/l/ffqtov" rel="noopener noreferrer"&gt;https://8286544375711.gumroad.com/l/ffqtov&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I also sell a $19 printable Readiness Kit with the complete walkthrough (registration steps, signing-key backup guide, package registration, recovery path): &lt;a href="https://8286544375711.gumroad.com/l/rwqasc" rel="noopener noreferrer"&gt;https://8286544375711.gumroad.com/l/rwqasc&lt;/a&gt;. The audit above is free and standalone.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Scope per Google's official support documentation as of September 2026; enforcement details are evolving — verify against the current docs.)&lt;/em&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>mobile</category>
      <category>security</category>
      <category>compliance</category>
    </item>
    <item>
      <title>Age verification for apps in 2026: what indie devs actually have to do</title>
      <dc:creator>Tim</dc:creator>
      <pubDate>Wed, 30 Sep 2026 16:33:36 +0000</pubDate>
      <link>https://dev.to/timbuilds/age-verification-for-apps-in-2026-what-indie-devs-actually-have-to-do-4iij</link>
      <guid>https://dev.to/timbuilds/age-verification-for-apps-in-2026-what-indie-devs-actually-have-to-do-4iij</guid>
      <description>&lt;p&gt;Your app probably needs age verification now — and "we'll deal with it later" stopped being an option in 2026.&lt;/p&gt;

&lt;p&gt;The UK's Online Safety Act (age checks live since July 2025), Texas's App Store Accountability Act, Utah's App Store Accountability Act, and Louisiana's age-verification law have created a patchwork where the app stores, not just your app, are in the chain of responsibility. The EU's Digital Services Act adds risk assessments for services used by minors, and Australia's social-media age rules keep expanding.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually triggers an obligation
&lt;/h2&gt;

&lt;p&gt;It's not "does my app have adult content." The triggers are things like: user-generated content or messaging, algorithmic feeds, loot boxes or gambling-adjacent mechanics, and operating in the UK, Texas, Utah, Louisiana, the EU, or Australia. A journaling app with no social features in most US states: probably fine. A social app with DMs available in the UK: you need a plan now.&lt;/p&gt;

&lt;h2&gt;
  
  
  The decision tree I wish someone gave me
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Map where your users are.&lt;/strong&gt; UK and the named US states are the strictest right now.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Classify your features.&lt;/strong&gt; Social/UGC/messaging = highest risk. Pure utility with accounts = medium. No accounts, no UGC = lowest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pick your assurance level.&lt;/strong&gt; Self-declaration of birthdate is the weakest and increasingly insufficient where laws bite. Document-based checks and age estimation are stronger but add friction and cost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never build verification yourself.&lt;/strong&gt; Use a vendor (Stripe Identity, Veriff, Yoti, Persona, Jumio all have app-friendly options — pricing varies, check their current pages) or the platform-level checks where they exist.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The mistakes that get indie devs in trouble
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Assuming COPPA-style "under 13" thinking covers it (new laws target under-16s and under-18s).&lt;/li&gt;
&lt;li&gt;Collecting MORE data to verify age than the law allows you to keep (data minimization cuts both ways — verify, then delete).&lt;/li&gt;
&lt;li&gt;No paper trail: if a regulator asks, "we used a vendor" is not documentation. Keep your decision record.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I put together a drop-in age-verification widget plus a compliance guide covering the UK, Texas, Utah, Louisiana, EU, and Australia rules with the decision tree above, vendor comparison, and documentation templates: &lt;a href="https://8286544375711.gumroad.com/l/age-verification-kit" rel="noopener noreferrer"&gt;https://8286544375711.gumroad.com/l/age-verification-kit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: that's my $29 product. Everything in this article stands alone — the kit is there if you want the implementation shortcut.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>ios</category>
      <category>privacy</category>
      <category>compliance</category>
    </item>
  </channel>
</rss>
