<?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: Ahtisham Hasan Khan </title>
    <description>The latest articles on DEV Community by Ahtisham Hasan Khan  (@iahtisham).</description>
    <link>https://dev.to/iahtisham</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%2F1095710%2F6388a29c-f08c-4052-801f-679d3bc1a7ea.jpg</url>
      <title>DEV Community: Ahtisham Hasan Khan </title>
      <link>https://dev.to/iahtisham</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/iahtisham"/>
    <language>en</language>
    <item>
      <title>Stop Using NavigationView - Mastering NavigationStack in 2026</title>
      <dc:creator>Ahtisham Hasan Khan </dc:creator>
      <pubDate>Sat, 03 Oct 2026 16:05:49 +0000</pubDate>
      <link>https://dev.to/iahtisham/stop-using-navigationview-mastering-navigationstack-in-2026-4meh</link>
      <guid>https://dev.to/iahtisham/stop-using-navigationview-mastering-navigationstack-in-2026-4meh</guid>
      <description>&lt;p&gt;If you are still wrapping your SwiftUI views in &lt;code&gt;NavigationView&lt;/code&gt; in 2026, we need to talk.&lt;/p&gt;

&lt;p&gt;Apple soft-deprecated &lt;code&gt;NavigationView&lt;/code&gt; years ago. While it might still "work" for simple prototypes, it is a nightmare for scalable, real-world applications. If you want to handle push notifications, deep links, or complex onboarding flows, you &lt;strong&gt;must&lt;/strong&gt; use &lt;code&gt;NavigationStack&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In this guide, I’ll show you how to move from "Push-and-Pray" navigation to a robust, state-driven routing system.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem with the Old Way
&lt;/h2&gt;

&lt;p&gt;In the early days of SwiftUI, we used &lt;code&gt;NavigationLink&lt;/code&gt; directly inside our lists. It looked innocent enough:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="c1"&gt;// The Old Way (Don't do this anymore)&lt;/span&gt;
&lt;span class="kt"&gt;NavigationView&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;List&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;..&amp;lt;&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
        &lt;span class="c1"&gt;// ❌ Problem: DetailView is initialized immediately for EVERY row!&lt;/span&gt;
        &lt;span class="kt"&gt;NavigationLink&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Go to Detail &lt;/span&gt;&lt;span class="se"&gt;\(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;destination&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;DetailView&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;i&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two things go wrong here. First, &lt;code&gt;NavigationLink(destination:)&lt;/code&gt; builds every &lt;code&gt;DetailView&lt;/code&gt; up front, even for rows nobody taps. Second, navigation lives inside the views. There is no single value that says "the user is on screen X", so you can't push a screen from a notification, restore it from a deep link, or pop back to the root from code.&lt;/p&gt;

&lt;h2&gt;
  
  
  The New Way: navigation as data
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;NavigationStack&lt;/code&gt; (iOS 16+) flips this around. You describe &lt;em&gt;where&lt;/em&gt; a link goes with a value, and you describe &lt;em&gt;how&lt;/em&gt; to show that value once, with &lt;code&gt;navigationDestination(for:)&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;struct&lt;/span&gt; &lt;span class="kt"&gt;ContentView&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;View&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;some&lt;/span&gt; &lt;span class="kt"&gt;View&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;NavigationStack&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kt"&gt;List&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;..&amp;lt;&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
                &lt;span class="c1"&gt;// ✅ Only a value is created here. DetailView is built on tap.&lt;/span&gt;
                &lt;span class="kt"&gt;NavigationLink&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Go to Detail &lt;/span&gt;&lt;span class="se"&gt;\(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;navigationDestination&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;for&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Int&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
                &lt;span class="kt"&gt;DetailView&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;i&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The destination view is now built lazily, and the link only carries an &lt;code&gt;Int&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Model your routes
&lt;/h2&gt;

&lt;p&gt;Real apps have more than one kind of screen. Put them in one &lt;code&gt;Hashable&lt;/code&gt; enum so every place in the app can name a destination the same way:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;enum&lt;/span&gt; &lt;span class="kt"&gt;Route&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Hashable&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nf"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;userID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;settings&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nf"&gt;order&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Own the path in a router
&lt;/h2&gt;

&lt;p&gt;Bind the stack to an array of routes. Whoever owns that array controls navigation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;import&lt;/span&gt; &lt;span class="kt"&gt;Observation&lt;/span&gt;

&lt;span class="kd"&gt;@Observable&lt;/span&gt;
&lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="kt"&gt;Router&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;Route&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

    &lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="nv"&gt;route&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Route&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;route&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;popLast&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="kd"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;popToRoot&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;removeAll&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;@Observable&lt;/code&gt; needs iOS 17. On iOS 16, make it an &lt;code&gt;ObservableObject&lt;/code&gt; with &lt;code&gt;@Published var path&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Wire the stack to the router
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;struct&lt;/span&gt; &lt;span class="kt"&gt;RootView&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;View&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;@State&lt;/span&gt; &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;router&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;some&lt;/span&gt; &lt;span class="kt"&gt;View&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;NavigationStack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;$router&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kt"&gt;HomeView&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;navigationDestination&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;for&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Route&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;route&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
                    &lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="n"&gt;route&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;userID&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;ProfileView&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;userID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;userID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;settings&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;SettingsView&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
                    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;order&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;id&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;OrderView&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;router&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Any child view can now navigate without knowing about its parents:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;struct&lt;/span&gt; &lt;span class="kt"&gt;HomeView&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;View&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;@Environment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Router&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;router&lt;/span&gt;

    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;some&lt;/span&gt; &lt;span class="kt"&gt;View&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Open settings"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;router&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;settings&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Deep links and notifications for free
&lt;/h2&gt;

&lt;p&gt;Because the whole stack is just &lt;code&gt;[Route]&lt;/code&gt;, opening a screen from outside the UI means setting an array. For a URL like &lt;code&gt;myapp://order/42&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;onOpenURL&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
    &lt;span class="k"&gt;guard&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;host&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;"order"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;Int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lastPathComponent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;router&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;order&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The same works when a push notification arrives: parse the payload into a &lt;code&gt;Route&lt;/code&gt; and assign the path. To jump several screens deep, assign several routes, for example &lt;code&gt;[.profile(userID: "me"), .settings]&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mixed value types: NavigationPath
&lt;/h2&gt;

&lt;p&gt;If different features push unrelated types and you don't want one big enum, use &lt;code&gt;NavigationPath&lt;/code&gt;, a type-erased path that accepts any &lt;code&gt;Hashable&lt;/code&gt; value:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight swift"&gt;&lt;code&gt;&lt;span class="kd"&gt;@State&lt;/span&gt; &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;NavigationPath&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="kt"&gt;NavigationStack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;$path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;FeedView&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;navigationDestination&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;for&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Post&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="kt"&gt;PostView&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;post&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;$0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;navigationDestination&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;for&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;User&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="kt"&gt;UserView&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;$0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An enum is easier to read and test, so I start there and only reach for &lt;code&gt;NavigationPath&lt;/code&gt; when features need to stay independent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick migration checklist
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Replace &lt;code&gt;NavigationView&lt;/code&gt; with &lt;code&gt;NavigationStack&lt;/code&gt;. For sidebar layouts on iPad and Mac, use &lt;code&gt;NavigationSplitView&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Change &lt;code&gt;NavigationLink(destination:)&lt;/code&gt; to &lt;code&gt;NavigationLink(value:)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Add one &lt;code&gt;navigationDestination(for:)&lt;/code&gt; per value type, high in the hierarchy rather than inside lists.&lt;/li&gt;
&lt;li&gt;Move the path into a router you can reach from anywhere.&lt;/li&gt;
&lt;li&gt;Route deep links and notifications by assigning the path.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you're building an iOS app and want routing like this from day one, &lt;a href="https://www.iahtisham.com" rel="noopener noreferrer"&gt;that's the kind of work I do&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.iahtisham.com/blog/stop-using-navigationview" rel="noopener noreferrer"&gt;iahtisham.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I'm Ahtisham, an independent iOS developer building native Swift apps.&lt;/strong&gt; More from me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌐 Portfolio and client work: &lt;a href="https://www.iahtisham.com" rel="noopener noreferrer"&gt;iahtisham.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💸 &lt;a href="https://apppricekit.iahtisham.com" rel="noopener noreferrer"&gt;AppPriceKit&lt;/a&gt;: free App Store subscription prices by country&lt;/li&gt;
&lt;li&gt;🧾 &lt;a href="https://justinvoice.prismcodelabs.com" rel="noopener noreferrer"&gt;JustInvoice&lt;/a&gt;: invoice maker for iPhone&lt;/li&gt;
&lt;li&gt;📄 &lt;a href="https://scanit.prismcodelabs.com" rel="noopener noreferrer"&gt;ScanIt&lt;/a&gt;: document scanner and PDF for iPhone&lt;/li&gt;
&lt;li&gt;🌙 &lt;a href="https://nur.prismcodelabs.com" rel="noopener noreferrer"&gt;NUR&lt;/a&gt;: prayer times, offline Qur'an and adhkar, free with no ads&lt;/li&gt;
&lt;li&gt;🏢 &lt;a href="https://prismcodelabs.com" rel="noopener noreferrer"&gt;PrismCode Labs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Find me on &lt;a href="https://x.com/iAhtishamDev" rel="noopener noreferrer"&gt;X @iAhtishamDev&lt;/a&gt; · &lt;a href="https://github.com/iahtisham" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; · &lt;a href="https://www.linkedin.com/in/ahtishamhasankhan" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; · &lt;a href="https://upwork.com/freelancers/iahtisham" rel="noopener noreferrer"&gt;Upwork&lt;/a&gt;&lt;/p&gt;

</description>
      <category>swiftui</category>
      <category>ios</category>
      <category>swift</category>
      <category>mobile</category>
    </item>
    <item>
      <title>Native iOS vs React Native vs Flutter: Which Should Your App Use?</title>
      <dc:creator>Ahtisham Hasan Khan </dc:creator>
      <pubDate>Sat, 03 Oct 2026 16:05:42 +0000</pubDate>
      <link>https://dev.to/iahtisham/native-ios-vs-react-native-vs-flutter-which-should-your-app-use-56ji</link>
      <guid>https://dev.to/iahtisham/native-ios-vs-react-native-vs-flutter-which-should-your-app-use-56ji</guid>
      <description>&lt;p&gt;I build native iOS apps, so take my bias into account. But I have also worked in web teams and across a product organization that shipped on several platforms, and the right answer is not always "native". Here is how I would decide if it were my money.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short version
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Native (Swift / SwiftUI)&lt;/th&gt;
&lt;th&gt;React Native&lt;/th&gt;
&lt;th&gt;Flutter&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Best when&lt;/td&gt;
&lt;td&gt;iPhone is your main audience&lt;/td&gt;
&lt;td&gt;Your team already knows React&lt;/td&gt;
&lt;td&gt;You need iOS and Android with one custom UI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feel on iPhone&lt;/td&gt;
&lt;td&gt;Most native&lt;/td&gt;
&lt;td&gt;Close, with care&lt;/td&gt;
&lt;td&gt;Custom-drawn, consistent across platforms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;New Apple features&lt;/td&gt;
&lt;td&gt;Available immediately&lt;/td&gt;
&lt;td&gt;After libraries catch up&lt;/td&gt;
&lt;td&gt;After plugins catch up&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Android&lt;/td&gt;
&lt;td&gt;Separate build&lt;/td&gt;
&lt;td&gt;Shared code&lt;/td&gt;
&lt;td&gt;Shared code&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Choose native iOS if…
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Your users are mostly on iPhone.&lt;/strong&gt; This is true for many consumer apps in the US, UK, and the Gulf, and for creator and productivity tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The app depends on Apple hardware or system features&lt;/strong&gt;: camera, widgets, Live Activities, HealthKit, Apple Pay, background audio. &lt;a href="https://www.iahtisham.com/projects/cuecam" rel="noopener noreferrer"&gt;CueCam&lt;/a&gt;, a teleprompter that follows the speaker's voice while recording, is the kind of product where native matters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You care about polish at launch.&lt;/strong&gt; App Store users notice when an app feels slightly off.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Choose React Native if…
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;You already have a React web team that will maintain the app.&lt;/li&gt;
&lt;li&gt;The app is mostly forms, lists and content, without heavy device features.&lt;/li&gt;
&lt;li&gt;You truly need Android on day one and the budget only covers one codebase.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Choose Flutter if…
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;You want an identical, heavily branded UI on iOS and Android.&lt;/li&gt;
&lt;li&gt;You are building for markets where Android dominates and iOS is secondary.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The hidden cost nobody mentions
&lt;/h2&gt;

&lt;p&gt;Cross-platform does not mean "build once". You still test on two platforms, go through two store reviews, and handle two sets of platform quirks. If you only needed iOS in the first place, you paid for flexibility you did not use.&lt;/p&gt;

&lt;h2&gt;
  
  
  My recommendation for most founders
&lt;/h2&gt;

&lt;p&gt;Launch on the platform where your first users are. For many consumer and creator products that is iPhone. Prove the idea, learn what people actually use, then expand. The backend, the product decisions, and the brand all carry over to Android.&lt;/p&gt;

&lt;p&gt;Not sure which fits your app? &lt;a href="mailto:ahtishamhasankhan@gmail.com?subject=Which%20platform%20for%20my%20app"&gt;Send me a short description&lt;/a&gt; and I will give you a straight answer, even if it is "not native".&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is native iOS development more expensive than Flutter or React Native?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you only need iPhone, native is usually not more expensive and is often faster to get right. Cross-platform saves money mainly when you genuinely need iOS and Android at launch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I start native on iOS and add Android later?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. Many products launch on iOS, validate the idea, then build Android once they know what users want. The backend and product decisions carry over.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which is better for performance and App Store quality?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Native Swift and SwiftUI give direct access to every Apple API on day one and the most iPhone-like feel. Cross-platform apps can be very good, but platform-specific features often need extra native work anyway.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What do you build with?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I build native iOS apps with Swift and SwiftUI. Every app in my portfolio is native.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.iahtisham.com/blog/native-ios-vs-react-native-vs-flutter" rel="noopener noreferrer"&gt;iahtisham.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I'm Ahtisham, an independent iOS developer building native Swift apps.&lt;/strong&gt; More from me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌐 Portfolio and client work: &lt;a href="https://www.iahtisham.com" rel="noopener noreferrer"&gt;iahtisham.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💸 &lt;a href="https://apppricekit.iahtisham.com" rel="noopener noreferrer"&gt;AppPriceKit&lt;/a&gt;: free App Store subscription prices by country&lt;/li&gt;
&lt;li&gt;🧾 &lt;a href="https://justinvoice.prismcodelabs.com" rel="noopener noreferrer"&gt;JustInvoice&lt;/a&gt;: invoice maker for iPhone&lt;/li&gt;
&lt;li&gt;📄 &lt;a href="https://scanit.prismcodelabs.com" rel="noopener noreferrer"&gt;ScanIt&lt;/a&gt;: document scanner and PDF for iPhone&lt;/li&gt;
&lt;li&gt;🌙 &lt;a href="https://nur.prismcodelabs.com" rel="noopener noreferrer"&gt;NUR&lt;/a&gt;: prayer times, offline Qur'an and adhkar, free with no ads&lt;/li&gt;
&lt;li&gt;🏢 &lt;a href="https://prismcodelabs.com" rel="noopener noreferrer"&gt;PrismCode Labs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Find me on &lt;a href="https://x.com/iAhtishamDev" rel="noopener noreferrer"&gt;X @iAhtishamDev&lt;/a&gt; · &lt;a href="https://github.com/iahtisham" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; · &lt;a href="https://www.linkedin.com/in/ahtishamhasankhan" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; · &lt;a href="https://upwork.com/freelancers/iahtisham" rel="noopener noreferrer"&gt;Upwork&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ios</category>
      <category>reactnative</category>
      <category>flutter</category>
      <category>swift</category>
    </item>
    <item>
      <title>What is PPP pricing? Purchasing power parity for app subscriptions</title>
      <dc:creator>Ahtisham Hasan Khan </dc:creator>
      <pubDate>Sat, 03 Oct 2026 16:05:36 +0000</pubDate>
      <link>https://dev.to/iahtisham/what-is-ppp-pricing-purchasing-power-parity-for-app-subscriptions-4bhk</link>
      <guid>https://dev.to/iahtisham/what-is-ppp-pricing-purchasing-power-parity-for-app-subscriptions-4bhk</guid>
      <description>&lt;p&gt;PPP pricing (purchasing power parity pricing) means charging each country a price scaled to what things cost there, instead of converting one price at the exchange rate. A $4.99 subscription might become about $1.19 in India and $2.29 in Brazil.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why exchange rates aren’t enough
&lt;/h2&gt;

&lt;p&gt;Exchange rates reflect trade and capital flows, not what a coffee or a phone plan costs. When Apple converts $4.99 into rupees, the result is roughly $4.99 at market rates. But the World Bank estimates that goods and services in India cost about 23% of US prices, so that subscription feels about 4.3× as expensive to someone living there.&lt;/p&gt;

&lt;p&gt;This isn’t limited to a few countries. Of the 174 App Store territories the World Bank covers, 109 have a price level below half of the US level. Only 6 are more expensive than the US. See the &lt;a href="https://apppricekit.iahtisham.com/blog/overpriced-app-store-countries" rel="noopener noreferrer"&gt;full ranking&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How PPP pricing is calculated
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Pick a base price in a base country, usually the US.&lt;/li&gt;
&lt;li&gt;Find each country’s price level relative to the base. The World Bank’s &lt;a href="https://data.worldbank.org/indicator/PA.NUS.GDP.PLI" rel="noopener noreferrer"&gt;PA.NUS.GDP.PLI&lt;/a&gt; indicator gives this directly: it is the ratio of the PPP conversion factor to the market exchange rate, with the US at 100.&lt;/li&gt;
&lt;li&gt;Multiply the base price by that ratio.&lt;/li&gt;
&lt;li&gt;Round the result to a price the store accepts. On the App Store that means one of Apple’s price points.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://apppricekit.iahtisham.com/guides/ppp-pricing-app-store" rel="noopener noreferrer"&gt;Our step-by-step guide&lt;/a&gt; walks through the App Store version with a worked example.&lt;/p&gt;

&lt;h2&gt;
  
  
  Price-level index vs. other signals
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;World Bank price level.&lt;/strong&gt; Broad, official, updated yearly, covers almost every App Store territory. Measures prices, not incomes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Big Mac Index.&lt;/strong&gt; Easy to explain, but one product in about 50 countries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GDP per capita.&lt;/strong&gt; Tracks income rather than prices and swings further, so it produces much deeper discounts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Competitor prices.&lt;/strong&gt; The most relevant signal for your niche, and the hardest to collect.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where PPP pricing goes wrong
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Treating it as the answer.&lt;/strong&gt; A price-level ratio says what things cost, not what your audience will pay. Use it as a first draft and measure conversion afterwards.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Going too low.&lt;/strong&gt; Very low prices can attract refund abuse or VPN shoppers. A floor price limits this.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ignoring existing subscribers.&lt;/strong&gt; Decreases reach them automatically; increases follow &lt;a href="https://apppricekit.iahtisham.com/blog/app-store-price-increase-consent" rel="noopener noreferrer"&gt;Apple’s consent rules&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Key terms
&lt;/h2&gt;

&lt;p&gt;Price level, price point, equalization and storefront are defined in the &lt;a href="https://apppricekit.iahtisham.com/glossary" rel="noopener noreferrer"&gt;App Store pricing glossary&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://apppricekit.iahtisham.com/blog/what-is-ppp-pricing" rel="noopener noreferrer"&gt;AppPriceKit&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I'm Ahtisham, an independent iOS developer building native Swift apps.&lt;/strong&gt; More from me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌐 Portfolio and client work: &lt;a href="https://www.iahtisham.com" rel="noopener noreferrer"&gt;iahtisham.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💸 &lt;a href="https://apppricekit.iahtisham.com" rel="noopener noreferrer"&gt;AppPriceKit&lt;/a&gt;: free App Store subscription prices by country&lt;/li&gt;
&lt;li&gt;🧾 &lt;a href="https://justinvoice.prismcodelabs.com" rel="noopener noreferrer"&gt;JustInvoice&lt;/a&gt;: invoice maker for iPhone&lt;/li&gt;
&lt;li&gt;📄 &lt;a href="https://scanit.prismcodelabs.com" rel="noopener noreferrer"&gt;ScanIt&lt;/a&gt;: document scanner and PDF for iPhone&lt;/li&gt;
&lt;li&gt;🌙 &lt;a href="https://nur.prismcodelabs.com" rel="noopener noreferrer"&gt;NUR&lt;/a&gt;: prayer times, offline Qur'an and adhkar, free with no ads&lt;/li&gt;
&lt;li&gt;🏢 &lt;a href="https://prismcodelabs.com" rel="noopener noreferrer"&gt;PrismCode Labs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Find me on &lt;a href="https://x.com/iAhtishamDev" rel="noopener noreferrer"&gt;X @iAhtishamDev&lt;/a&gt; · &lt;a href="https://github.com/iahtisham" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; · &lt;a href="https://www.linkedin.com/in/ahtishamhasankhan" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; · &lt;a href="https://upwork.com/freelancers/iahtisham" rel="noopener noreferrer"&gt;Upwork&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ios</category>
      <category>indiehackers</category>
      <category>pricing</category>
      <category>appstore</category>
    </item>
    <item>
      <title>Checklist: before you change App Store prices by country</title>
      <dc:creator>Ahtisham Hasan Khan </dc:creator>
      <pubDate>Sat, 03 Oct 2026 16:05:30 +0000</pubDate>
      <link>https://dev.to/iahtisham/checklist-before-you-change-app-store-prices-by-country-4lgj</link>
      <guid>https://dev.to/iahtisham/checklist-before-you-change-app-store-prices-by-country-4lgj</guid>
      <description>&lt;p&gt;Regional pricing is easy to get wrong in ways that are hard to undo. Run through this list before you schedule anything.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before you calculate
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Know where your users are.&lt;/strong&gt; Pull downloads and trial starts by country from App Store Connect analytics. Price changes only matter where you have traffic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Record today’s prices and conversion.&lt;/strong&gt; Export current prices per country and a few weeks of conversion rates so you have a baseline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pick your base and floor.&lt;/strong&gt; Choose a base country and price, and a minimum you won’t go below. A floor protects against very low prices in the cheapest markets.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Before you schedule
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start with a handful of countries.&lt;/strong&gt; Three to five large lower-priced markets give a readable result.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remember decreases can’t be reversed.&lt;/strong&gt; Once a decrease takes effect, going back means a new increase, with &lt;a href="https://apppricekit.iahtisham.com/blog/app-store-price-increase-consent" rel="noopener noreferrer"&gt;notice and possibly consent&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decide on existing subscribers.&lt;/strong&gt; Decreases reach them automatically. For increases, choose whether to preserve their price.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check for scheduled changes.&lt;/strong&gt; Only one future change is allowed per country and plan; a new one overwrites the old.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choose a start date.&lt;/strong&gt; Leave at least a couple of days, and avoid dates when you can’t watch the results.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  After the change
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Keep a record.&lt;/strong&gt; Save exactly what Apple accepted per country. AppPriceKit exports a CSV receipt for this.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Measure for at least a few weeks.&lt;/strong&gt; Compare conversion, revenue per visitor and refunds in the changed countries against the baseline and against unchanged countries.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;New to the idea? Start with &lt;a href="https://apppricekit.iahtisham.com/blog/what-is-ppp-pricing" rel="noopener noreferrer"&gt;what PPP pricing is&lt;/a&gt;, then see the &lt;a href="https://apppricekit.iahtisham.com/pricing" rel="noopener noreferrer"&gt;suggested prices by country&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://apppricekit.iahtisham.com/blog/regional-pricing-checklist" rel="noopener noreferrer"&gt;AppPriceKit&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I'm Ahtisham, an independent iOS developer building native Swift apps.&lt;/strong&gt; More from me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌐 Portfolio and client work: &lt;a href="https://www.iahtisham.com" rel="noopener noreferrer"&gt;iahtisham.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💸 &lt;a href="https://apppricekit.iahtisham.com" rel="noopener noreferrer"&gt;AppPriceKit&lt;/a&gt;: free App Store subscription prices by country&lt;/li&gt;
&lt;li&gt;🧾 &lt;a href="https://justinvoice.prismcodelabs.com" rel="noopener noreferrer"&gt;JustInvoice&lt;/a&gt;: invoice maker for iPhone&lt;/li&gt;
&lt;li&gt;📄 &lt;a href="https://scanit.prismcodelabs.com" rel="noopener noreferrer"&gt;ScanIt&lt;/a&gt;: document scanner and PDF for iPhone&lt;/li&gt;
&lt;li&gt;🌙 &lt;a href="https://nur.prismcodelabs.com" rel="noopener noreferrer"&gt;NUR&lt;/a&gt;: prayer times, offline Qur'an and adhkar, free with no ads&lt;/li&gt;
&lt;li&gt;🏢 &lt;a href="https://prismcodelabs.com" rel="noopener noreferrer"&gt;PrismCode Labs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Find me on &lt;a href="https://x.com/iAhtishamDev" rel="noopener noreferrer"&gt;X @iAhtishamDev&lt;/a&gt; · &lt;a href="https://github.com/iahtisham" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; · &lt;a href="https://www.linkedin.com/in/ahtishamhasankhan" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; · &lt;a href="https://upwork.com/freelancers/iahtisham" rel="noopener noreferrer"&gt;Upwork&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ios</category>
      <category>indiehackers</category>
      <category>appstore</category>
      <category>startup</category>
    </item>
    <item>
      <title>Where a $4.99 subscription costs the most: App Store countries ranked by price level</title>
      <dc:creator>Ahtisham Hasan Khan </dc:creator>
      <pubDate>Sat, 03 Oct 2026 16:05:25 +0000</pubDate>
      <link>https://dev.to/iahtisham/where-a-499-subscription-costs-the-most-app-store-countries-ranked-by-price-level-4che</link>
      <guid>https://dev.to/iahtisham/where-a-499-subscription-costs-the-most-app-store-countries-ranked-by-price-level-4che</guid>
      <description>&lt;p&gt;Apple converts your subscription price at market exchange rates. We ranked 174 App Store territories by the World Bank price-level index to show where that makes a $4.99 subscription most expensive in local terms.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short version
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;109 of 174 territories have a price level below half of the US level.&lt;/li&gt;
&lt;li&gt;37 are below a third, where an exchange-rate-converted price feels more than three times as expensive as it does in the US.&lt;/li&gt;
&lt;li&gt;Only 6 are more expensive than the US: Israel, Barbados, Switzerland, Cayman Islands, Iceland, Bermuda.&lt;/li&gt;
&lt;li&gt;The lowest price levels are in Nigeria, Egypt, Laos.&lt;/li&gt;
&lt;li&gt;4 territories have no World Bank estimate (Anguilla, British Virgin Islands, Montserrat, Taiwan).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to read the table
&lt;/h2&gt;

&lt;p&gt;“Price level” is the World Bank’s &lt;a href="https://data.worldbank.org/indicator/PA.NUS.GDP.PLI" rel="noopener noreferrer"&gt;PA.NUS.GDP.PLI&lt;/a&gt; for the latest available year, divided by the US value. “$4.99 becomes” scales $4.99 by that ratio and rounds to Apple’s nearest US price point. Apple then converts that point to local currency. The price level measures what goods and services cost, not incomes, so treat it as a starting point (&lt;a href="https://apppricekit.iahtisham.com/blog/what-is-ppp-pricing" rel="noopener noreferrer"&gt;why&lt;/a&gt;).&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Territory&lt;/th&gt;
&lt;th&gt;Price level vs. US&lt;/th&gt;
&lt;th&gt;$4.99 becomes&lt;/th&gt;
&lt;th&gt;Data year&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/nigeria" rel="noopener noreferrer"&gt;Nigeria&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;13%&lt;/td&gt;
&lt;td&gt;$0.69&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/egypt" rel="noopener noreferrer"&gt;Egypt&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;15%&lt;/td&gt;
&lt;td&gt;$0.79&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Laos&lt;/td&gt;
&lt;td&gt;22%&lt;/td&gt;
&lt;td&gt;$1.09&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Sierra Leone&lt;/td&gt;
&lt;td&gt;23%&lt;/td&gt;
&lt;td&gt;$1.09&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Bhutan&lt;/td&gt;
&lt;td&gt;23%&lt;/td&gt;
&lt;td&gt;$1.19&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/india" rel="noopener noreferrer"&gt;India&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;23%&lt;/td&gt;
&lt;td&gt;$1.19&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/pakistan" rel="noopener noreferrer"&gt;Pakistan&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;24%&lt;/td&gt;
&lt;td&gt;$1.19&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Myanmar&lt;/td&gt;
&lt;td&gt;25%&lt;/td&gt;
&lt;td&gt;$1.19&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;Gambia&lt;/td&gt;
&lt;td&gt;25%&lt;/td&gt;
&lt;td&gt;$1.19&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;Nepal&lt;/td&gt;
&lt;td&gt;25%&lt;/td&gt;
&lt;td&gt;$1.29&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/bangladesh" rel="noopener noreferrer"&gt;Bangladesh&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;26%&lt;/td&gt;
&lt;td&gt;$1.29&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;Ethiopia&lt;/td&gt;
&lt;td&gt;26%&lt;/td&gt;
&lt;td&gt;$1.29&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;Rwanda&lt;/td&gt;
&lt;td&gt;27%&lt;/td&gt;
&lt;td&gt;$1.39&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;Tajikistan&lt;/td&gt;
&lt;td&gt;28%&lt;/td&gt;
&lt;td&gt;$1.39&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/vietnam" rel="noopener noreferrer"&gt;Vietnam&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;28%&lt;/td&gt;
&lt;td&gt;$1.39&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;Azerbaijan&lt;/td&gt;
&lt;td&gt;28%&lt;/td&gt;
&lt;td&gt;$1.39&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;Mauritania&lt;/td&gt;
&lt;td&gt;29%&lt;/td&gt;
&lt;td&gt;$1.39&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/indonesia" rel="noopener noreferrer"&gt;Indonesia&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;29%&lt;/td&gt;
&lt;td&gt;$1.39&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;Turkmenistan&lt;/td&gt;
&lt;td&gt;29%&lt;/td&gt;
&lt;td&gt;$1.49&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;Uzbekistan&lt;/td&gt;
&lt;td&gt;29%&lt;/td&gt;
&lt;td&gt;$1.49&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td&gt;Sri Lanka&lt;/td&gt;
&lt;td&gt;29%&lt;/td&gt;
&lt;td&gt;$1.49&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;Tanzania&lt;/td&gt;
&lt;td&gt;29%&lt;/td&gt;
&lt;td&gt;$1.49&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;td&gt;Belarus&lt;/td&gt;
&lt;td&gt;30%&lt;/td&gt;
&lt;td&gt;$1.49&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;Zambia&lt;/td&gt;
&lt;td&gt;30%&lt;/td&gt;
&lt;td&gt;$1.49&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;Angola&lt;/td&gt;
&lt;td&gt;31%&lt;/td&gt;
&lt;td&gt;$1.49&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;Tunisia&lt;/td&gt;
&lt;td&gt;31%&lt;/td&gt;
&lt;td&gt;$1.49&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/thailand" rel="noopener noreferrer"&gt;Thailand&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;31%&lt;/td&gt;
&lt;td&gt;$1.49&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;Madagascar&lt;/td&gt;
&lt;td&gt;31%&lt;/td&gt;
&lt;td&gt;$1.49&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/ukraine" rel="noopener noreferrer"&gt;Ukraine&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;31%&lt;/td&gt;
&lt;td&gt;$1.59&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;Suriname&lt;/td&gt;
&lt;td&gt;31%&lt;/td&gt;
&lt;td&gt;$1.59&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/malaysia" rel="noopener noreferrer"&gt;Malaysia&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;32%&lt;/td&gt;
&lt;td&gt;$1.59&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;Algeria&lt;/td&gt;
&lt;td&gt;33%&lt;/td&gt;
&lt;td&gt;$1.59&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;td&gt;Eswatini&lt;/td&gt;
&lt;td&gt;33%&lt;/td&gt;
&lt;td&gt;$1.59&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;34&lt;/td&gt;
&lt;td&gt;Georgia&lt;/td&gt;
&lt;td&gt;33%&lt;/td&gt;
&lt;td&gt;$1.69&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;35&lt;/td&gt;
&lt;td&gt;Guyana&lt;/td&gt;
&lt;td&gt;33%&lt;/td&gt;
&lt;td&gt;$1.69&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;36&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/philippines" rel="noopener noreferrer"&gt;Philippines&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;33%&lt;/td&gt;
&lt;td&gt;$1.69&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;37&lt;/td&gt;
&lt;td&gt;Kazakhstan&lt;/td&gt;
&lt;td&gt;33%&lt;/td&gt;
&lt;td&gt;$1.69&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;38&lt;/td&gt;
&lt;td&gt;Kyrgyzstan&lt;/td&gt;
&lt;td&gt;33%&lt;/td&gt;
&lt;td&gt;$1.69&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;Cambodia&lt;/td&gt;
&lt;td&gt;34%&lt;/td&gt;
&lt;td&gt;$1.69&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/kenya" rel="noopener noreferrer"&gt;Kenya&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;34%&lt;/td&gt;
&lt;td&gt;$1.69&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;41&lt;/td&gt;
&lt;td&gt;Togo&lt;/td&gt;
&lt;td&gt;34%&lt;/td&gt;
&lt;td&gt;$1.69&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;42&lt;/td&gt;
&lt;td&gt;Mali&lt;/td&gt;
&lt;td&gt;34%&lt;/td&gt;
&lt;td&gt;$1.69&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;td&gt;Cameroon&lt;/td&gt;
&lt;td&gt;34%&lt;/td&gt;
&lt;td&gt;$1.69&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;44&lt;/td&gt;
&lt;td&gt;Guinea-Bissau&lt;/td&gt;
&lt;td&gt;34%&lt;/td&gt;
&lt;td&gt;$1.69&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;45&lt;/td&gt;
&lt;td&gt;Mongolia&lt;/td&gt;
&lt;td&gt;34%&lt;/td&gt;
&lt;td&gt;$1.69&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;Nicaragua&lt;/td&gt;
&lt;td&gt;34%&lt;/td&gt;
&lt;td&gt;$1.69&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;Lesotho&lt;/td&gt;
&lt;td&gt;34%&lt;/td&gt;
&lt;td&gt;$1.69&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;48&lt;/td&gt;
&lt;td&gt;Benin&lt;/td&gt;
&lt;td&gt;34%&lt;/td&gt;
&lt;td&gt;$1.69&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;49&lt;/td&gt;
&lt;td&gt;Uganda&lt;/td&gt;
&lt;td&gt;35%&lt;/td&gt;
&lt;td&gt;$1.69&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;Republic of the Congo&lt;/td&gt;
&lt;td&gt;35%&lt;/td&gt;
&lt;td&gt;$1.69&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;Paraguay&lt;/td&gt;
&lt;td&gt;35%&lt;/td&gt;
&lt;td&gt;$1.69&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;52&lt;/td&gt;
&lt;td&gt;Brunei&lt;/td&gt;
&lt;td&gt;35%&lt;/td&gt;
&lt;td&gt;$1.79&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;53&lt;/td&gt;
&lt;td&gt;Chad&lt;/td&gt;
&lt;td&gt;35%&lt;/td&gt;
&lt;td&gt;$1.79&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;54&lt;/td&gt;
&lt;td&gt;Malawi&lt;/td&gt;
&lt;td&gt;35%&lt;/td&gt;
&lt;td&gt;$1.79&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;55&lt;/td&gt;
&lt;td&gt;Russia&lt;/td&gt;
&lt;td&gt;35%&lt;/td&gt;
&lt;td&gt;$1.79&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;56&lt;/td&gt;
&lt;td&gt;Niger&lt;/td&gt;
&lt;td&gt;36%&lt;/td&gt;
&lt;td&gt;$1.79&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;57&lt;/td&gt;
&lt;td&gt;Senegal&lt;/td&gt;
&lt;td&gt;36%&lt;/td&gt;
&lt;td&gt;$1.79&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;58&lt;/td&gt;
&lt;td&gt;Mozambique&lt;/td&gt;
&lt;td&gt;37%&lt;/td&gt;
&lt;td&gt;$1.89&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;59&lt;/td&gt;
&lt;td&gt;Côte d'Ivoire&lt;/td&gt;
&lt;td&gt;37%&lt;/td&gt;
&lt;td&gt;$1.89&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;60&lt;/td&gt;
&lt;td&gt;Gabon&lt;/td&gt;
&lt;td&gt;37%&lt;/td&gt;
&lt;td&gt;$1.89&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;61&lt;/td&gt;
&lt;td&gt;Burkina Faso&lt;/td&gt;
&lt;td&gt;37%&lt;/td&gt;
&lt;td&gt;$1.89&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;62&lt;/td&gt;
&lt;td&gt;North Macedonia&lt;/td&gt;
&lt;td&gt;37%&lt;/td&gt;
&lt;td&gt;$1.89&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;63&lt;/td&gt;
&lt;td&gt;Lebanon&lt;/td&gt;
&lt;td&gt;38%&lt;/td&gt;
&lt;td&gt;$1.89&lt;/td&gt;
&lt;td&gt;2024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;64&lt;/td&gt;
&lt;td&gt;Botswana&lt;/td&gt;
&lt;td&gt;38%&lt;/td&gt;
&lt;td&gt;$1.89&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;65&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/colombia" rel="noopener noreferrer"&gt;Colombia&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;38%&lt;/td&gt;
&lt;td&gt;$1.89&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;66&lt;/td&gt;
&lt;td&gt;Ghana&lt;/td&gt;
&lt;td&gt;38%&lt;/td&gt;
&lt;td&gt;$1.89&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;67&lt;/td&gt;
&lt;td&gt;Iraq&lt;/td&gt;
&lt;td&gt;38%&lt;/td&gt;
&lt;td&gt;$1.89&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;68&lt;/td&gt;
&lt;td&gt;Guinea&lt;/td&gt;
&lt;td&gt;38%&lt;/td&gt;
&lt;td&gt;$1.89&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;69&lt;/td&gt;
&lt;td&gt;Armenia&lt;/td&gt;
&lt;td&gt;38%&lt;/td&gt;
&lt;td&gt;$1.89&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;70&lt;/td&gt;
&lt;td&gt;Dominican Republic&lt;/td&gt;
&lt;td&gt;39%&lt;/td&gt;
&lt;td&gt;$1.89&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;71&lt;/td&gt;
&lt;td&gt;Mauritius&lt;/td&gt;
&lt;td&gt;39%&lt;/td&gt;
&lt;td&gt;$1.89&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;72&lt;/td&gt;
&lt;td&gt;Libya&lt;/td&gt;
&lt;td&gt;39%&lt;/td&gt;
&lt;td&gt;$1.99&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;73&lt;/td&gt;
&lt;td&gt;Bolivia&lt;/td&gt;
&lt;td&gt;40%&lt;/td&gt;
&lt;td&gt;$1.99&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;74&lt;/td&gt;
&lt;td&gt;Bosnia and Herzegovina&lt;/td&gt;
&lt;td&gt;40%&lt;/td&gt;
&lt;td&gt;$1.99&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;75&lt;/td&gt;
&lt;td&gt;Fiji&lt;/td&gt;
&lt;td&gt;41%&lt;/td&gt;
&lt;td&gt;$1.99&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;76&lt;/td&gt;
&lt;td&gt;Namibia&lt;/td&gt;
&lt;td&gt;41%&lt;/td&gt;
&lt;td&gt;$1.99&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;77&lt;/td&gt;
&lt;td&gt;El Salvador&lt;/td&gt;
&lt;td&gt;41%&lt;/td&gt;
&lt;td&gt;$2.09&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;78&lt;/td&gt;
&lt;td&gt;Equatorial Guinea&lt;/td&gt;
&lt;td&gt;41%&lt;/td&gt;
&lt;td&gt;$2.09&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;79&lt;/td&gt;
&lt;td&gt;Kosovo&lt;/td&gt;
&lt;td&gt;41%&lt;/td&gt;
&lt;td&gt;$2.09&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/turkey" rel="noopener noreferrer"&gt;Turkey&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;41%&lt;/td&gt;
&lt;td&gt;$2.09&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;81&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/south-africa" rel="noopener noreferrer"&gt;South Africa&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;41%&lt;/td&gt;
&lt;td&gt;$2.09&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;82&lt;/td&gt;
&lt;td&gt;Montenegro&lt;/td&gt;
&lt;td&gt;42%&lt;/td&gt;
&lt;td&gt;$2.09&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;83&lt;/td&gt;
&lt;td&gt;Democratic Republic of the Congo&lt;/td&gt;
&lt;td&gt;42%&lt;/td&gt;
&lt;td&gt;$2.09&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;84&lt;/td&gt;
&lt;td&gt;Morocco&lt;/td&gt;
&lt;td&gt;42%&lt;/td&gt;
&lt;td&gt;$2.09&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;85&lt;/td&gt;
&lt;td&gt;Central African Republic&lt;/td&gt;
&lt;td&gt;42%&lt;/td&gt;
&lt;td&gt;$2.09&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;86&lt;/td&gt;
&lt;td&gt;Jordan&lt;/td&gt;
&lt;td&gt;42%&lt;/td&gt;
&lt;td&gt;$2.09&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;td&gt;Ecuador&lt;/td&gt;
&lt;td&gt;43%&lt;/td&gt;
&lt;td&gt;$2.09&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;88&lt;/td&gt;
&lt;td&gt;Bahrain&lt;/td&gt;
&lt;td&gt;43%&lt;/td&gt;
&lt;td&gt;$2.19&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;td&gt;Moldova&lt;/td&gt;
&lt;td&gt;43%&lt;/td&gt;
&lt;td&gt;$2.19&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;90&lt;/td&gt;
&lt;td&gt;Guatemala&lt;/td&gt;
&lt;td&gt;43%&lt;/td&gt;
&lt;td&gt;$2.19&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;td&gt;Yemen&lt;/td&gt;
&lt;td&gt;44%&lt;/td&gt;
&lt;td&gt;$2.19&lt;/td&gt;
&lt;td&gt;2013&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;92&lt;/td&gt;
&lt;td&gt;Romania&lt;/td&gt;
&lt;td&gt;44%&lt;/td&gt;
&lt;td&gt;$2.19&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;td&gt;Serbia&lt;/td&gt;
&lt;td&gt;45%&lt;/td&gt;
&lt;td&gt;$2.29&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;94&lt;/td&gt;
&lt;td&gt;Panama&lt;/td&gt;
&lt;td&gt;45%&lt;/td&gt;
&lt;td&gt;$2.29&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;95&lt;/td&gt;
&lt;td&gt;Honduras&lt;/td&gt;
&lt;td&gt;46%&lt;/td&gt;
&lt;td&gt;$2.29&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;96&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/brazil" rel="noopener noreferrer"&gt;Brazil&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;46%&lt;/td&gt;
&lt;td&gt;$2.29&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;97&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/argentina" rel="noopener noreferrer"&gt;Argentina&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;46%&lt;/td&gt;
&lt;td&gt;$2.29&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;98&lt;/td&gt;
&lt;td&gt;Bulgaria&lt;/td&gt;
&lt;td&gt;46%&lt;/td&gt;
&lt;td&gt;$2.29&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;99&lt;/td&gt;
&lt;td&gt;Albania&lt;/td&gt;
&lt;td&gt;46%&lt;/td&gt;
&lt;td&gt;$2.29&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt;Liberia&lt;/td&gt;
&lt;td&gt;46%&lt;/td&gt;
&lt;td&gt;$2.29&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;101&lt;/td&gt;
&lt;td&gt;Djibouti&lt;/td&gt;
&lt;td&gt;46%&lt;/td&gt;
&lt;td&gt;$2.29&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;102&lt;/td&gt;
&lt;td&gt;Zimbabwe&lt;/td&gt;
&lt;td&gt;47%&lt;/td&gt;
&lt;td&gt;$2.29&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;103&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/saudi-arabia" rel="noopener noreferrer"&gt;Saudi Arabia&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;47%&lt;/td&gt;
&lt;td&gt;$2.29&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;104&lt;/td&gt;
&lt;td&gt;Oman&lt;/td&gt;
&lt;td&gt;47%&lt;/td&gt;
&lt;td&gt;$2.39&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;105&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/china" rel="noopener noreferrer"&gt;China&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;47%&lt;/td&gt;
&lt;td&gt;$2.39&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;106&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/chile" rel="noopener noreferrer"&gt;Chile&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;48%&lt;/td&gt;
&lt;td&gt;$2.39&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;107&lt;/td&gt;
&lt;td&gt;Cape Verde&lt;/td&gt;
&lt;td&gt;48%&lt;/td&gt;
&lt;td&gt;$2.39&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;108&lt;/td&gt;
&lt;td&gt;Dominica&lt;/td&gt;
&lt;td&gt;48%&lt;/td&gt;
&lt;td&gt;$2.39&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;109&lt;/td&gt;
&lt;td&gt;Comoros&lt;/td&gt;
&lt;td&gt;49%&lt;/td&gt;
&lt;td&gt;$2.39&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;110&lt;/td&gt;
&lt;td&gt;Trinidad and Tobago&lt;/td&gt;
&lt;td&gt;51%&lt;/td&gt;
&lt;td&gt;$2.59&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;111&lt;/td&gt;
&lt;td&gt;Maldives&lt;/td&gt;
&lt;td&gt;51%&lt;/td&gt;
&lt;td&gt;$2.59&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;112&lt;/td&gt;
&lt;td&gt;St. Lucia&lt;/td&gt;
&lt;td&gt;51%&lt;/td&gt;
&lt;td&gt;$2.59&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;113&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/peru" rel="noopener noreferrer"&gt;Peru&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;51%&lt;/td&gt;
&lt;td&gt;$2.59&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;114&lt;/td&gt;
&lt;td&gt;Hungary&lt;/td&gt;
&lt;td&gt;52%&lt;/td&gt;
&lt;td&gt;$2.59&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;115&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/poland" rel="noopener noreferrer"&gt;Poland&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;52%&lt;/td&gt;
&lt;td&gt;$2.59&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;116&lt;/td&gt;
&lt;td&gt;Belize&lt;/td&gt;
&lt;td&gt;53%&lt;/td&gt;
&lt;td&gt;$2.59&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;117&lt;/td&gt;
&lt;td&gt;Croatia&lt;/td&gt;
&lt;td&gt;53%&lt;/td&gt;
&lt;td&gt;$2.69&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;118&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/mexico" rel="noopener noreferrer"&gt;Mexico&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;54%&lt;/td&gt;
&lt;td&gt;$2.69&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;119&lt;/td&gt;
&lt;td&gt;Seychelles&lt;/td&gt;
&lt;td&gt;54%&lt;/td&gt;
&lt;td&gt;$2.69&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;120&lt;/td&gt;
&lt;td&gt;St. Vincent and the Grenadines&lt;/td&gt;
&lt;td&gt;55%&lt;/td&gt;
&lt;td&gt;$2.79&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;121&lt;/td&gt;
&lt;td&gt;Macau&lt;/td&gt;
&lt;td&gt;55%&lt;/td&gt;
&lt;td&gt;$2.79&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;122&lt;/td&gt;
&lt;td&gt;Qatar&lt;/td&gt;
&lt;td&gt;56%&lt;/td&gt;
&lt;td&gt;$2.79&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;123&lt;/td&gt;
&lt;td&gt;Grenada&lt;/td&gt;
&lt;td&gt;57%&lt;/td&gt;
&lt;td&gt;$2.79&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;124&lt;/td&gt;
&lt;td&gt;Latvia&lt;/td&gt;
&lt;td&gt;57%&lt;/td&gt;
&lt;td&gt;$2.89&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;125&lt;/td&gt;
&lt;td&gt;Kuwait&lt;/td&gt;
&lt;td&gt;57%&lt;/td&gt;
&lt;td&gt;$2.89&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;126&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/south-korea" rel="noopener noreferrer"&gt;South Korea&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;57%&lt;/td&gt;
&lt;td&gt;$2.89&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;127&lt;/td&gt;
&lt;td&gt;Slovakia&lt;/td&gt;
&lt;td&gt;58%&lt;/td&gt;
&lt;td&gt;$2.89&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;128&lt;/td&gt;
&lt;td&gt;Papua New Guinea&lt;/td&gt;
&lt;td&gt;58%&lt;/td&gt;
&lt;td&gt;$2.89&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;129&lt;/td&gt;
&lt;td&gt;Lithuania&lt;/td&gt;
&lt;td&gt;58%&lt;/td&gt;
&lt;td&gt;$2.89&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;130&lt;/td&gt;
&lt;td&gt;Costa Rica&lt;/td&gt;
&lt;td&gt;59%&lt;/td&gt;
&lt;td&gt;$2.99&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;131&lt;/td&gt;
&lt;td&gt;Czech Republic&lt;/td&gt;
&lt;td&gt;59%&lt;/td&gt;
&lt;td&gt;$2.99&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;132&lt;/td&gt;
&lt;td&gt;Greece&lt;/td&gt;
&lt;td&gt;60%&lt;/td&gt;
&lt;td&gt;$2.99&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;133&lt;/td&gt;
&lt;td&gt;Jamaica&lt;/td&gt;
&lt;td&gt;60%&lt;/td&gt;
&lt;td&gt;$2.99&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;134&lt;/td&gt;
&lt;td&gt;Portugal&lt;/td&gt;
&lt;td&gt;60%&lt;/td&gt;
&lt;td&gt;$2.99&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;135&lt;/td&gt;
&lt;td&gt;Singapore&lt;/td&gt;
&lt;td&gt;60%&lt;/td&gt;
&lt;td&gt;$2.99&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;136&lt;/td&gt;
&lt;td&gt;Venezuela&lt;/td&gt;
&lt;td&gt;63%&lt;/td&gt;
&lt;td&gt;$3.09&lt;/td&gt;
&lt;td&gt;2011&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;137&lt;/td&gt;
&lt;td&gt;Slovenia&lt;/td&gt;
&lt;td&gt;63%&lt;/td&gt;
&lt;td&gt;$3.19&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;138&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/united-arab-emirates" rel="noopener noreferrer"&gt;United Arab Emirates&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;63%&lt;/td&gt;
&lt;td&gt;$3.19&lt;/td&gt;
&lt;td&gt;2024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;139&lt;/td&gt;
&lt;td&gt;São Tomé and Príncipe&lt;/td&gt;
&lt;td&gt;64%&lt;/td&gt;
&lt;td&gt;$3.19&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;140&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/spain" rel="noopener noreferrer"&gt;Spain&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;65%&lt;/td&gt;
&lt;td&gt;$3.19&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;141&lt;/td&gt;
&lt;td&gt;Cyprus&lt;/td&gt;
&lt;td&gt;65%&lt;/td&gt;
&lt;td&gt;$3.19&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;142&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/japan" rel="noopener noreferrer"&gt;Japan&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;65%&lt;/td&gt;
&lt;td&gt;$3.19&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;143&lt;/td&gt;
&lt;td&gt;Uruguay&lt;/td&gt;
&lt;td&gt;66%&lt;/td&gt;
&lt;td&gt;$3.29&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;144&lt;/td&gt;
&lt;td&gt;Estonia&lt;/td&gt;
&lt;td&gt;66%&lt;/td&gt;
&lt;td&gt;$3.29&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;145&lt;/td&gt;
&lt;td&gt;Malta&lt;/td&gt;
&lt;td&gt;66%&lt;/td&gt;
&lt;td&gt;$3.29&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;146&lt;/td&gt;
&lt;td&gt;St. Kitts and Nevis&lt;/td&gt;
&lt;td&gt;69%&lt;/td&gt;
&lt;td&gt;$3.39&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;147&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/italy" rel="noopener noreferrer"&gt;Italy&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;69%&lt;/td&gt;
&lt;td&gt;$3.49&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;148&lt;/td&gt;
&lt;td&gt;Antigua and Barbuda&lt;/td&gt;
&lt;td&gt;69%&lt;/td&gt;
&lt;td&gt;$3.49&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;149&lt;/td&gt;
&lt;td&gt;Hong Kong&lt;/td&gt;
&lt;td&gt;71%&lt;/td&gt;
&lt;td&gt;$3.49&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;150&lt;/td&gt;
&lt;td&gt;Solomon Islands&lt;/td&gt;
&lt;td&gt;75%&lt;/td&gt;
&lt;td&gt;$3.69&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;151&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/france" rel="noopener noreferrer"&gt;France&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;77%&lt;/td&gt;
&lt;td&gt;$3.79&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;152&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/germany" rel="noopener noreferrer"&gt;Germany&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;80%&lt;/td&gt;
&lt;td&gt;$3.99&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;153&lt;/td&gt;
&lt;td&gt;Belgium&lt;/td&gt;
&lt;td&gt;81%&lt;/td&gt;
&lt;td&gt;$4.09&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;154&lt;/td&gt;
&lt;td&gt;Austria&lt;/td&gt;
&lt;td&gt;82%&lt;/td&gt;
&lt;td&gt;$4.09&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;155&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/canada" rel="noopener noreferrer"&gt;Canada&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;83%&lt;/td&gt;
&lt;td&gt;$4.19&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;156&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/netherlands" rel="noopener noreferrer"&gt;Netherlands&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;84%&lt;/td&gt;
&lt;td&gt;$4.19&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;157&lt;/td&gt;
&lt;td&gt;Ireland&lt;/td&gt;
&lt;td&gt;85%&lt;/td&gt;
&lt;td&gt;$4.19&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;158&lt;/td&gt;
&lt;td&gt;Finland&lt;/td&gt;
&lt;td&gt;85%&lt;/td&gt;
&lt;td&gt;$4.29&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;159&lt;/td&gt;
&lt;td&gt;New Zealand&lt;/td&gt;
&lt;td&gt;86%&lt;/td&gt;
&lt;td&gt;$4.29&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;160&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/sweden" rel="noopener noreferrer"&gt;Sweden&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;87%&lt;/td&gt;
&lt;td&gt;$4.39&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;161&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/united-kingdom" rel="noopener noreferrer"&gt;United Kingdom&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;89%&lt;/td&gt;
&lt;td&gt;$4.49&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;162&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/australia" rel="noopener noreferrer"&gt;Australia&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;91%&lt;/td&gt;
&lt;td&gt;$4.49&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;163&lt;/td&gt;
&lt;td&gt;Norway&lt;/td&gt;
&lt;td&gt;91%&lt;/td&gt;
&lt;td&gt;$4.49&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;164&lt;/td&gt;
&lt;td&gt;Denmark&lt;/td&gt;
&lt;td&gt;92%&lt;/td&gt;
&lt;td&gt;$4.59&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;165&lt;/td&gt;
&lt;td&gt;Luxembourg&lt;/td&gt;
&lt;td&gt;94%&lt;/td&gt;
&lt;td&gt;$4.69&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;166&lt;/td&gt;
&lt;td&gt;Bahamas&lt;/td&gt;
&lt;td&gt;96%&lt;/td&gt;
&lt;td&gt;$4.79&lt;/td&gt;
&lt;td&gt;2024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;167&lt;/td&gt;
&lt;td&gt;Turks and Caicos Islands&lt;/td&gt;
&lt;td&gt;99%&lt;/td&gt;
&lt;td&gt;$4.89&lt;/td&gt;
&lt;td&gt;2024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;168&lt;/td&gt;
&lt;td&gt;United States&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;$4.99&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;169&lt;/td&gt;
&lt;td&gt;Israel&lt;/td&gt;
&lt;td&gt;101%&lt;/td&gt;
&lt;td&gt;$5.09&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;170&lt;/td&gt;
&lt;td&gt;Barbados&lt;/td&gt;
&lt;td&gt;110%&lt;/td&gt;
&lt;td&gt;$5.49&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;171&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apppricekit.iahtisham.com/pricing/switzerland" rel="noopener noreferrer"&gt;Switzerland&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;112%&lt;/td&gt;
&lt;td&gt;$5.59&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;172&lt;/td&gt;
&lt;td&gt;Cayman Islands&lt;/td&gt;
&lt;td&gt;113%&lt;/td&gt;
&lt;td&gt;$5.69&lt;/td&gt;
&lt;td&gt;2024&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;173&lt;/td&gt;
&lt;td&gt;Iceland&lt;/td&gt;
&lt;td&gt;118%&lt;/td&gt;
&lt;td&gt;$5.89&lt;/td&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;174&lt;/td&gt;
&lt;td&gt;Bermuda&lt;/td&gt;
&lt;td&gt;120%&lt;/td&gt;
&lt;td&gt;$5.99&lt;/td&gt;
&lt;td&gt;2024&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What to do with this
&lt;/h2&gt;

&lt;p&gt;Look at where your downloads come from. If a large share comes from countries near the top of this table, your default prices are probably costing you conversions there. Start with your three biggest lower-priced markets, set a floor price, and compare conversion before and after. The &lt;a href="https://apppricekit.iahtisham.com/blog/regional-pricing-checklist" rel="noopener noreferrer"&gt;checklist&lt;/a&gt; covers the rest, and &lt;a href="https://www.revenuecat.com/blog/growth/5-quick-fixes-for-bad-default-global-pricing-on-app-stores/" rel="noopener noreferrer"&gt;RevenueCat’s quick fixes for default global pricing&lt;/a&gt; is a good companion read.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://apppricekit.iahtisham.com/blog/overpriced-app-store-countries" rel="noopener noreferrer"&gt;AppPriceKit&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I'm Ahtisham, an independent iOS developer building native Swift apps.&lt;/strong&gt; More from me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌐 Portfolio and client work: &lt;a href="https://www.iahtisham.com" rel="noopener noreferrer"&gt;iahtisham.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💸 &lt;a href="https://apppricekit.iahtisham.com" rel="noopener noreferrer"&gt;AppPriceKit&lt;/a&gt;: free App Store subscription prices by country&lt;/li&gt;
&lt;li&gt;🧾 &lt;a href="https://justinvoice.prismcodelabs.com" rel="noopener noreferrer"&gt;JustInvoice&lt;/a&gt;: invoice maker for iPhone&lt;/li&gt;
&lt;li&gt;📄 &lt;a href="https://scanit.prismcodelabs.com" rel="noopener noreferrer"&gt;ScanIt&lt;/a&gt;: document scanner and PDF for iPhone&lt;/li&gt;
&lt;li&gt;🌙 &lt;a href="https://nur.prismcodelabs.com" rel="noopener noreferrer"&gt;NUR&lt;/a&gt;: prayer times, offline Qur'an and adhkar, free with no ads&lt;/li&gt;
&lt;li&gt;🏢 &lt;a href="https://prismcodelabs.com" rel="noopener noreferrer"&gt;PrismCode Labs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Find me on &lt;a href="https://x.com/iAhtishamDev" rel="noopener noreferrer"&gt;X @iAhtishamDev&lt;/a&gt; · &lt;a href="https://github.com/iahtisham" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; · &lt;a href="https://www.linkedin.com/in/ahtishamhasankhan" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; · &lt;a href="https://upwork.com/freelancers/iahtisham" rel="noopener noreferrer"&gt;Upwork&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ios</category>
      <category>appstore</category>
      <category>pricing</category>
      <category>data</category>
    </item>
    <item>
      <title>App Store subscription price increases: when subscribers must consent</title>
      <dc:creator>Ahtisham Hasan Khan </dc:creator>
      <pubDate>Sat, 03 Oct 2026 16:05:19 +0000</pubDate>
      <link>https://dev.to/iahtisham/app-store-subscription-price-increases-when-subscribers-must-consent-54om</link>
      <guid>https://dev.to/iahtisham/app-store-subscription-price-increases-when-subscribers-must-consent-54om</guid>
      <description>&lt;p&gt;When you raise a subscription price, you choose whether existing subscribers keep their current price. If you move them to the new price, Apple either notifies them or asks them to agree, depending on the size of the increase, their country and their history.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 1: keep existing subscribers on their price
&lt;/h2&gt;

&lt;p&gt;Anyone who subscribed before the start date keeps paying what they pay today. Apple also lets subscribers whose subscription expires resubscribe at the preserved price within 60 days. This is the safest option and the default in AppPriceKit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 2: apply the increase to existing subscribers
&lt;/h2&gt;

&lt;p&gt;According to &lt;a href="https://developer.apple.com/help/app-store-connect/manage-subscriptions/manage-pricing-for-auto-renewable-subscriptions" rel="noopener noreferrer"&gt;Apple’s pricing documentation&lt;/a&gt;, subscribers must &lt;strong&gt;consent&lt;/strong&gt; before renewing at the higher price if any of these is true:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They are in a region that requires consent for any price change.&lt;/li&gt;
&lt;li&gt;The increase is more than 50% of the current price &lt;em&gt;and&lt;/em&gt; more than about US$5 per period (US$50 per year for annual plans).&lt;/li&gt;
&lt;li&gt;They already had a price increase on that subscription in the past 12 months.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Otherwise they are only &lt;strong&gt;notified&lt;/strong&gt;, and renew at the new price unless they cancel.&lt;/p&gt;

&lt;h2&gt;
  
  
  Notice periods
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Annual, 6-, 3- and 2-month plans: 60 days before renewal.&lt;/li&gt;
&lt;li&gt;Monthly plans: 27 days before renewal.&lt;/li&gt;
&lt;li&gt;Weekly plans: 7 days before renewal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Subscribers who need to consent and don’t respond get reminders about weekly by email, push and in-app message. If they never agree, the subscription expires at the end of the current period. That makes consent-triggering increases risky for retention.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decreases are different
&lt;/h2&gt;

&lt;p&gt;A decrease reaches every existing subscriber at their next renewal, and you can’t keep them on the higher price. Apple also notes that once a decrease takes effect it can’t be reversed; you would need to schedule a new increase, which then follows the rules above.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical rules of thumb
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Keep increases under 50% or under about $5 per period to avoid consent prompts.&lt;/li&gt;
&lt;li&gt;Don’t raise the same subscription twice within 12 months.&lt;/li&gt;
&lt;li&gt;Only one future price change can be scheduled per country and plan; scheduling another overwrites the first.&lt;/li&gt;
&lt;li&gt;When lowering prices in cheaper countries, existing subscribers there benefit too. Budget for that revenue change.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More in the &lt;a href="https://apppricekit.iahtisham.com/blog/regional-pricing-checklist" rel="noopener noreferrer"&gt;checklist before changing prices by country&lt;/a&gt; and the &lt;a href="https://apppricekit.iahtisham.com/guides/change-subscription-price-app-store-connect" rel="noopener noreferrer"&gt;App Store Connect walkthrough&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://apppricekit.iahtisham.com/blog/app-store-price-increase-consent" rel="noopener noreferrer"&gt;AppPriceKit&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I'm Ahtisham, an independent iOS developer building native Swift apps.&lt;/strong&gt; More from me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌐 Portfolio and client work: &lt;a href="https://www.iahtisham.com" rel="noopener noreferrer"&gt;iahtisham.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💸 &lt;a href="https://apppricekit.iahtisham.com" rel="noopener noreferrer"&gt;AppPriceKit&lt;/a&gt;: free App Store subscription prices by country&lt;/li&gt;
&lt;li&gt;🧾 &lt;a href="https://justinvoice.prismcodelabs.com" rel="noopener noreferrer"&gt;JustInvoice&lt;/a&gt;: invoice maker for iPhone&lt;/li&gt;
&lt;li&gt;📄 &lt;a href="https://scanit.prismcodelabs.com" rel="noopener noreferrer"&gt;ScanIt&lt;/a&gt;: document scanner and PDF for iPhone&lt;/li&gt;
&lt;li&gt;🌙 &lt;a href="https://nur.prismcodelabs.com" rel="noopener noreferrer"&gt;NUR&lt;/a&gt;: prayer times, offline Qur'an and adhkar, free with no ads&lt;/li&gt;
&lt;li&gt;🏢 &lt;a href="https://prismcodelabs.com" rel="noopener noreferrer"&gt;PrismCode Labs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Find me on &lt;a href="https://x.com/iAhtishamDev" rel="noopener noreferrer"&gt;X @iAhtishamDev&lt;/a&gt; · &lt;a href="https://github.com/iahtisham" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; · &lt;a href="https://www.linkedin.com/in/ahtishamhasankhan" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; · &lt;a href="https://upwork.com/freelancers/iahtisham" rel="noopener noreferrer"&gt;Upwork&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ios</category>
      <category>appstore</category>
      <category>subscriptions</category>
      <category>mobile</category>
    </item>
    <item>
      <title>How Apple sets your subscription price in 175 countries</title>
      <dc:creator>Ahtisham Hasan Khan </dc:creator>
      <pubDate>Sat, 03 Oct 2026 16:05:13 +0000</pubDate>
      <link>https://dev.to/iahtisham/how-apple-sets-your-subscription-price-in-175-countries-183c</link>
      <guid>https://dev.to/iahtisham/how-apple-sets-your-subscription-price-in-175-countries-183c</guid>
      <description>&lt;p&gt;When you price an auto-renewable subscription, you pick one base price and App Store Connect fills in the other 174 storefronts. Those prices come from exchange rates and local taxes, and once set they stay put until you change them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Price points
&lt;/h2&gt;

&lt;p&gt;You can’t charge any amount you like. Each storefront has a fixed ladder of price points, about 800 per currency according to &lt;a href="https://developer.apple.com/help/app-store-connect/manage-subscriptions/manage-pricing-for-auto-renewable-subscriptions" rel="noopener noreferrer"&gt;Apple’s documentation&lt;/a&gt;. In the US the ladder goes up in $0.10 steps to $9.99, then in $0.50 steps to $49.99, then in larger steps above that. Every price you schedule must be one of these points.&lt;/p&gt;

&lt;h2&gt;
  
  
  Equalization
&lt;/h2&gt;

&lt;p&gt;Every price point in your base country has an equivalent point in each other storefront. Apple calls these equalizations and chooses them using exchange rates and taxes. When you choose $4.99 as your US price, App Store Connect proposes the equalized point for every other country. You can accept them or edit any country before confirming.&lt;/p&gt;

&lt;p&gt;The App Store Connect API exposes the same mapping: each subscription price point has an &lt;code&gt;equalizations&lt;/code&gt; relationship listing its counterparts in other territories. &lt;a href="https://apppricekit.iahtisham.com/blog/app-store-connect-api-subscription-prices" rel="noopener noreferrer"&gt;How to use it&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Subscription prices don’t follow exchange rates
&lt;/h2&gt;

&lt;p&gt;This surprises many developers. For paid apps and one-time purchases, Apple adjusts prices when taxes or exchange rates move significantly. For auto-renewable subscriptions, it doesn’t. Apple’s help page says those retail price changes “will exclude auto-renewable subscriptions”.&lt;/p&gt;

&lt;p&gt;So a subscription priced two years ago in a country whose currency has since lost half its value is now half as expensive in dollar terms, and your proceeds have dropped with it. When VAT changes, your proceeds change too, because Apple’s commission and your share are calculated after tax. Reviewing prices once or twice a year catches both.&lt;/p&gt;

&lt;h2&gt;
  
  
  What equalization doesn’t do
&lt;/h2&gt;

&lt;p&gt;Equalization keeps prices roughly equal at market exchange rates. It doesn’t account for what things cost locally. That is why a $4.99 subscription can be several times more expensive, in local terms, in India or Egypt than in the US. Adjusting for that is called &lt;a href="https://apppricekit.iahtisham.com/blog/what-is-ppp-pricing" rel="noopener noreferrer"&gt;PPP pricing&lt;/a&gt;. AppPriceKit uses Apple’s equalization as its last step: it picks a US price point from each country’s price level, then takes Apple’s equalized local price for that point. &lt;a href="https://apppricekit.iahtisham.com/compare/apple-price-equalization" rel="noopener noreferrer"&gt;Equalization vs. AppPriceKit&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://apppricekit.iahtisham.com/blog/app-store-price-equalization" rel="noopener noreferrer"&gt;AppPriceKit&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I'm Ahtisham, an independent iOS developer building native Swift apps.&lt;/strong&gt; More from me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌐 Portfolio and client work: &lt;a href="https://www.iahtisham.com" rel="noopener noreferrer"&gt;iahtisham.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💸 &lt;a href="https://apppricekit.iahtisham.com" rel="noopener noreferrer"&gt;AppPriceKit&lt;/a&gt;: free App Store subscription prices by country&lt;/li&gt;
&lt;li&gt;🧾 &lt;a href="https://justinvoice.prismcodelabs.com" rel="noopener noreferrer"&gt;JustInvoice&lt;/a&gt;: invoice maker for iPhone&lt;/li&gt;
&lt;li&gt;📄 &lt;a href="https://scanit.prismcodelabs.com" rel="noopener noreferrer"&gt;ScanIt&lt;/a&gt;: document scanner and PDF for iPhone&lt;/li&gt;
&lt;li&gt;🌙 &lt;a href="https://nur.prismcodelabs.com" rel="noopener noreferrer"&gt;NUR&lt;/a&gt;: prayer times, offline Qur'an and adhkar, free with no ads&lt;/li&gt;
&lt;li&gt;🏢 &lt;a href="https://prismcodelabs.com" rel="noopener noreferrer"&gt;PrismCode Labs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Find me on &lt;a href="https://x.com/iAhtishamDev" rel="noopener noreferrer"&gt;X @iAhtishamDev&lt;/a&gt; · &lt;a href="https://github.com/iahtisham" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; · &lt;a href="https://www.linkedin.com/in/ahtishamhasankhan" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; · &lt;a href="https://upwork.com/freelancers/iahtisham" rel="noopener noreferrer"&gt;Upwork&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ios</category>
      <category>appstore</category>
      <category>pricing</category>
      <category>mobile</category>
    </item>
    <item>
      <title>How to update subscription prices with the App Store Connect API</title>
      <dc:creator>Ahtisham Hasan Khan </dc:creator>
      <pubDate>Sat, 03 Oct 2026 16:04:54 +0000</pubDate>
      <link>https://dev.to/iahtisham/how-to-update-subscription-prices-with-the-app-store-connect-api-4g94</link>
      <guid>https://dev.to/iahtisham/how-to-update-subscription-prices-with-the-app-store-connect-api-4g94</guid>
      <description>&lt;p&gt;Changing a subscription price for dozens of countries in the App Store Connect UI is slow. The App Store Connect API can do it in a few calls. These are the requests AppPriceKit makes, taken from its &lt;a href="https://apppricekit.iahtisham.com/about" rel="noopener noreferrer"&gt;open-source code&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Authenticate with a team API key
&lt;/h2&gt;

&lt;p&gt;Create a team key in App Store Connect under Users and Access → Integrations, with App Manager access. Sign a JWT with the &lt;code&gt;.p8&lt;/code&gt; private key using ES256, the key ID as &lt;code&gt;kid&lt;/code&gt;, your issuer ID as &lt;code&gt;iss&lt;/code&gt; and &lt;code&gt;appstoreconnect-v1&lt;/code&gt; as &lt;code&gt;aud&lt;/code&gt;. Tokens can last up to 20 minutes; AppPriceKit uses 15.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;jwt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sign&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;iss&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;issuerId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;aud&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;appstoreconnect-v1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="nx"&gt;privateKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;algorithm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ES256&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;expiresIn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;15m&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;header&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;kid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;keyId&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Find the subscription
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /v1/apps
GET /v1/apps/{appId}/subscriptionGroups
GET /v1/subscriptionGroups/{groupId}/subscriptions
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Read current prices
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /v1/subscriptions/{subId}/prices?include=subscriptionPricePoint,territory&amp;amp;limit=200
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each price has a &lt;code&gt;startDate&lt;/code&gt;. A price with a future start date is scheduled; the latest past one is current. Paginate with the &lt;code&gt;links.next&lt;/code&gt; URL until it is absent.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Find the right price point
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /v1/subscriptions/{subId}/pricePoints?filter[territory]=USA&amp;amp;include=territory&amp;amp;limit=200
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Price points are specific to a subscription and a territory. To get the local equivalent of a US point in every other territory, follow its equalizations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /v1/subscriptionPricePoints/{pricePointId}/equalizations?include=territory&amp;amp;limit=200
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use this mapping rather than matching price points by their position in each territory’s list; the ladders differ by currency. Background in &lt;a href="https://apppricekit.iahtisham.com/blog/app-store-price-equalization" rel="noopener noreferrer"&gt;how Apple sets prices in 175 countries&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Schedule the new price
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /v1/subscriptionPrices
{
  "data": {
    "type": "subscriptionPrices",
    "attributes": { "startDate": "2026-10-10", "preserveCurrentPrice": true },
    "relationships": {
      "subscription": { "data": { "type": "subscriptions", "id": "{subId}" } },
      "subscriptionPricePoint": {
        "data": { "type": "subscriptionPricePoints", "id": "{pricePointId}" }
      }
    }
  }
}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The price point ID already identifies the territory, so one request schedules one country. &lt;code&gt;preserveCurrentPrice&lt;/code&gt; keeps existing subscribers on their current price for increases; it has no effect on decreases. See &lt;a href="https://developer.apple.com/documentation/appstoreconnectapi" rel="noopener noreferrer"&gt;Apple’s API reference&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gotchas we hit
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Start dates.&lt;/strong&gt; Apple needs the start date a day or two ahead, depending on time zones. A same-day date is rejected.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;409 conflicts.&lt;/strong&gt; Only one future change can exist per territory. If one is already scheduled, the request can fail with 409. Re-read prices to see what Apple actually holds before retrying.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confirm after errors.&lt;/strong&gt; A timeout doesn’t mean the write failed. Re-read the prices and check for your start date and price point before sending the request again.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate limits.&lt;/strong&gt; Equalization lookups for 175 territories add up. Limit concurrency and retry 429s with backoff.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’d rather not write this yourself, AppPriceKit does all of it in the browser, and you can &lt;a href="https://apppricekit.iahtisham.com/#sample" rel="noopener noreferrer"&gt;try it on sample data&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://apppricekit.iahtisham.com/blog/app-store-connect-api-subscription-prices" rel="noopener noreferrer"&gt;AppPriceKit&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I'm Ahtisham, an independent iOS developer building native Swift apps.&lt;/strong&gt; More from me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌐 Portfolio and client work: &lt;a href="https://www.iahtisham.com" rel="noopener noreferrer"&gt;iahtisham.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💸 &lt;a href="https://apppricekit.iahtisham.com" rel="noopener noreferrer"&gt;AppPriceKit&lt;/a&gt;: free App Store subscription prices by country&lt;/li&gt;
&lt;li&gt;🧾 &lt;a href="https://justinvoice.prismcodelabs.com" rel="noopener noreferrer"&gt;JustInvoice&lt;/a&gt;: invoice maker for iPhone&lt;/li&gt;
&lt;li&gt;📄 &lt;a href="https://scanit.prismcodelabs.com" rel="noopener noreferrer"&gt;ScanIt&lt;/a&gt;: document scanner and PDF for iPhone&lt;/li&gt;
&lt;li&gt;🌙 &lt;a href="https://nur.prismcodelabs.com" rel="noopener noreferrer"&gt;NUR&lt;/a&gt;: prayer times, offline Qur'an and adhkar, free with no ads&lt;/li&gt;
&lt;li&gt;🏢 &lt;a href="https://prismcodelabs.com" rel="noopener noreferrer"&gt;PrismCode Labs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Find me on &lt;a href="https://x.com/iAhtishamDev" rel="noopener noreferrer"&gt;X @iAhtishamDev&lt;/a&gt; · &lt;a href="https://github.com/iahtisham" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; · &lt;a href="https://www.linkedin.com/in/ahtishamhasankhan" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; · &lt;a href="https://upwork.com/freelancers/iahtisham" rel="noopener noreferrer"&gt;Upwork&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ios</category>
      <category>swift</category>
      <category>api</category>
      <category>appstore</category>
    </item>
    <item>
      <title>Mastering Git Checkout: Decoding the Impact of One Simple Command</title>
      <dc:creator>Ahtisham Hasan Khan </dc:creator>
      <pubDate>Tue, 21 Nov 2023 06:27:22 +0000</pubDate>
      <link>https://dev.to/iahtisham/mastering-git-checkout-decoding-the-impact-of-one-simple-command-4e7h</link>
      <guid>https://dev.to/iahtisham/mastering-git-checkout-decoding-the-impact-of-one-simple-command-4e7h</guid>
      <description>&lt;p&gt;It all started with a meme. My team lead sent me this, and before this happened, I was one of those who used this powerful command just for creating a new branch or switching between branches.&lt;br&gt;
But kudos to this meme, I've gained a better understanding of this impactful command.&lt;/p&gt;

&lt;p&gt;In this article we will do in-depth exploration of this powerful  &lt;code&gt;git checkout&lt;/code&gt; command.  an essential tool in the Git arsenal. Whether you're a coding enthusiast, a seasoned developer, or somewhere in between, This complete guide will help you understand git checkout step by step. It uses simple code examples and clear explanations to make things easy to grasp.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9S9HrSny--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mxhswsiu00ttupy1o97t.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9S9HrSny--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mxhswsiu00ttupy1o97t.jpg" alt="Image description" width="760" height="2400"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Understanding the Basics
&lt;/h3&gt;

&lt;p&gt;The fundamental purpose of &lt;code&gt;git checkout&lt;/code&gt; is to switch between branches in Git repository, Here's a basic example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Switch&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;an&lt;/span&gt; &lt;span class="nx"&gt;existing&lt;/span&gt; &lt;span class="nx"&gt;branch&lt;/span&gt; &lt;span class="nx"&gt;named&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;feature-branch&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="nx"&gt;checkout&lt;/span&gt; &lt;span class="nx"&gt;feature&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;branch&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Another cool thing I like about this branch is that you can easily switch back to your previous branch with just this simple command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Switch&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;previous&lt;/span&gt; &lt;span class="nx"&gt;branch&lt;/span&gt;

&lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="nx"&gt;checkout&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Undoing Changes Like a Pro
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;git checkout&lt;/code&gt; is a handy tool for reverting changes, whether to a specific file or even the last commit. Let's look at a couple of examples:&lt;/p&gt;

&lt;h4&gt;
  
  
  File Undo
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Discard&lt;/span&gt; &lt;span class="nx"&gt;changes&lt;/span&gt; &lt;span class="nx"&gt;made&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="nx"&gt;specific&lt;/span&gt; &lt;span class="nf"&gt;file &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;txt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="nx"&gt;checkout&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt; &lt;span class="nx"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;txt&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use this command when you want to revert changes made to a particular file back to its state in the last commit.&lt;/p&gt;

&lt;h4&gt;
  
  
  Commit Undo
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Undo&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;last&lt;/span&gt; &lt;span class="nx"&gt;commit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;keeping&lt;/span&gt; &lt;span class="nx"&gt;changes&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;working&lt;/span&gt; &lt;span class="nx"&gt;directory&lt;/span&gt;

&lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="nx"&gt;checkout&lt;/span&gt; &lt;span class="nx"&gt;HEAD&lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command gracefully undoes the last commit while preserving the changes in your working directory, giving you the flexibility to make further adjustments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Navigating Detached HEAD State
&lt;/h3&gt;

&lt;p&gt;Understanding detached HEAD state is crucial. Consider the following scenario:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;# Move to a specific commit without creating a branch

git checkout &lt;span class="nt"&gt;&amp;lt;commit-hash&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command puts your repository in a "detached HEAD" state, allowing you to explore specific commits without creating a new branch.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tailoring Your Checkout with Paths and Commits
&lt;/h3&gt;

&lt;p&gt;Sometimes, you may want to inspect or revert changes made to a specific file at a particular commit. &lt;code&gt;git checkout&lt;/code&gt; enables this with ease:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Checkout&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="nx"&gt;specific&lt;/span&gt; &lt;span class="nx"&gt;file&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="nx"&gt;particular&lt;/span&gt; &lt;span class="nx"&gt;commit&lt;/span&gt;

&lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="nx"&gt;checkout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;commit&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt; &lt;span class="nx"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;txt&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command allows you to navigate through your repository's history and work with specific files at specific points in time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Discarding Changes Across the Board
&lt;/h3&gt;

&lt;p&gt;To discard all uncommitted changes in your working directory, use the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Discard&lt;/span&gt; &lt;span class="nx"&gt;all&lt;/span&gt; &lt;span class="nx"&gt;changes&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;working&lt;/span&gt; &lt;span class="nx"&gt;directory&lt;/span&gt;

&lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="nx"&gt;checkout&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is particularly useful when you want to start fresh or abandon changes that haven't been committed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Armed with these insights and practical examples, you're well on your way to mastering the art of &lt;code&gt;git checkout&lt;/code&gt;. Stay tuned as we explore advanced features and best practices in upcoming articles.&lt;/p&gt;

&lt;p&gt;Ready to elevate your Git skills? Let's dive in!&lt;/p&gt;

&lt;p&gt;If you found this guide helpful, consider &lt;a href="https://www.buymeacoffee.com/iahtisham"&gt;buying me Coffee ☕&lt;/a&gt;. Connect with me on Twitter for more updates and discussions: (&lt;a href="https://twitter.com/iAhtishamHK"&gt;https://twitter.com/iAhtishamHK&lt;/a&gt;).&lt;/p&gt;

</description>
      <category>github</category>
      <category>git</category>
      <category>webdev</category>
      <category>developers</category>
    </item>
    <item>
      <title>How to enable HTTPS for WAMP Server.</title>
      <dc:creator>Ahtisham Hasan Khan </dc:creator>
      <pubDate>Thu, 19 Oct 2023 07:22:10 +0000</pubDate>
      <link>https://dev.to/iahtisham/how-to-enable-https-for-wamp-server-4fcm</link>
      <guid>https://dev.to/iahtisham/how-to-enable-https-for-wamp-server-4fcm</guid>
      <description>&lt;p&gt;Securing your web applications with HTTPS is a fundamental aspect of web development. In a previous article, we discussed &lt;a href="https://dev.to/iahtisham/how-to-enable-https-on-xampp-server-mb1"&gt;how to enable HTTPS on XAMPP&lt;/a&gt;. Now, we'll focus on achieving the same security on WAMP, a widely used web development environment. Let's dive into the process of enabling HTTPS on WAMP for a more secure web experience.&lt;/p&gt;

&lt;p&gt;Following are some easy steps to setup enviroment to use HTTPS on WAMP.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It is Important that you have already got WAMP installed, If not you can download WAMP from &lt;a href="https://www.wampserver.com/en/"&gt;here&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After you've downloade and installed WAMP; the steps are as follows,&lt;/p&gt;

&lt;h2&gt;
  
  
  STEP 1: Download and Install OpenSSL.
&lt;/h2&gt;

&lt;p&gt;Both 32 and 64-bit versions of OpenSSL are available. Make sure you're using the right installation for your Windows version.&lt;br&gt;
 The most recent version of OpenSSL may be found &lt;a href="https://slproweb.com/products/Win32OpenSSL.html"&gt;here&lt;/a&gt;. &lt;strong&gt;When Installing OpenSSL leave all settings default.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  STEP 2: Generate Private Key and SSL certficate.
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Load Command Prompt as an Administrator from your start menu and run the commands below.
To begin, navigate to the directory where OpenSSL was installed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;cd c:/program files/openssl-win64/bin/&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generate your Private key by using follwing command.You will be asked for a passphrase. Make it anything you want just make sure you remember it for the next step.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;openssl genrsa -aes256 -out private.key 2048&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;openssl rsa -in private.key -out private.key&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Now, create your Certificate thorough following commad,You will be asked several questions on this step. You can put whatever you like or just hit enter to leave it at default.

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The only one that really matters is Common Name (e.g. server FQDN) you will need to type “localhost” for this.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;openssl req -new -x509 -nodes -sha1 -key private.key -out certificate.crt -days 36500&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  STEP 3: Move your KEY and Certificate.
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Create a folder named &lt;strong&gt;"KEY"&lt;/strong&gt; in the directory    &lt;strong&gt;C:\wamp64\bin\apache\apache2.4.51\conf&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Copy the generated &lt;code&gt;private.key&lt;/code&gt; and &lt;code&gt;certificate.crt&lt;/code&gt; files from &lt;strong&gt;C:\Program Files\OpenSSL-Win64\bin&lt;/strong&gt;&lt;br&gt;
to the &lt;strong&gt;C:\wamp64\bin\apache\apache2.4.27\conf\key&lt;/strong&gt; folder.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 4: Edit Your httpd.conf File
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Open &lt;strong&gt;c:/wamp64/bin/apache/apache2.4.41/conf/httpd.conf&lt;/strong&gt; and un-comment (remove the #) the following 3 lines:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;LoadModule ssl_module modules/mod_ssl.so&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Include conf/extra/httpd-ssl.conf&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;LoadModule socache_shmcb_module modules/mod_socache_shmcb.so&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 5: Edit Your httpd-ssl.conf File
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Open &lt;strong&gt;c:/wamp64/bin/apache/apache2.4.41/conf/extra/httpd-ssl.conf&lt;/strong&gt; and change all the parameters to the ones shown below.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; DocumentRoot "c:/wamp64/www"
 ServerName localhost:443
 ServerAdmin admin@example.com
 ErrorLog "${SRVROOT}/logs/error.log"
 TransferLog "${SRVROOT}/logs/access.log"
 SSLSessionCache "shmcb:${SRVROOT}/logs/ssl_scache(512000)"
 SSLCertificateFile "${SRVROOT}/conf/key/certificate.crt"
 SSLCertificateKeyFile "${SRVROOT}/conf/key/private.key"
 CustomLog "${SRVROOT}/logs/ssl_request.log"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;The DocumentRoot folder is the location where the website files are located. The ServerName can be set as &lt;strong&gt;localhost"&lt;/strong&gt; or the name set to access the website like &lt;strong&gt;"example.com"&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 6: Restart WampServer
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Everything should be set up now. Make sure you restart WampServer for the changes to take effect. &lt;/li&gt;
&lt;li&gt;If there will be any syntax error, you can check it by navigating to  &lt;strong&gt;c:/wamp64/bin/apache/apache2.4.41/bin&lt;/strong&gt; in Command Prompt and run following command;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;httpd -t&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You should now be able to access your website with HTTPS / SSL enabled.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Public Gist URL: &lt;a href="https://gist.github.com/iahtisham/5268b2391c674d758d0c2030dfbdb882"&gt;https://gist.github.com/iahtisham/5268b2391c674d758d0c2030dfbdb882&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you found this post helpful, consider &lt;a href="https://www.buymeacoffee.com/iahtisham"&gt;buying me Coffee ☕&lt;/a&gt;. Your support keeps me fueled to create more content!&lt;/p&gt;

</description>
      <category>wamp</category>
      <category>ssl</category>
      <category>https</category>
      <category>webdev</category>
    </item>
    <item>
      <title>"Vue 3 : Smooth migration from the Options API to the Composition API in Vue 3"</title>
      <dc:creator>Ahtisham Hasan Khan </dc:creator>
      <pubDate>Sun, 20 Aug 2023 10:25:06 +0000</pubDate>
      <link>https://dev.to/iahtisham/transitioning-from-the-options-api-to-the-composition-api-in-vue-3-58be</link>
      <guid>https://dev.to/iahtisham/transitioning-from-the-options-api-to-the-composition-api-in-vue-3-58be</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;With the introduction of Vue 3, a new component option and a new advised pattern were added to the framework for creating apps. You may get top-level bindings using this magical script setup&amp;gt; method of implementing the logics without having to go through the extra trouble of declaring an export default and a setup().&lt;/p&gt;

&lt;h2&gt;
  
  
  Why &amp;lt;&lt;strong&gt;script setup&lt;/strong&gt;&amp;gt; ?
&lt;/h2&gt;

&lt;p&gt;Leaner codebase, faster development, readable and easier coding experience by reducing component choices into a single block. With each of these features, Reactivity makes things more simpler.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using Props with &lt;code&gt;&amp;lt;script setup&amp;gt;&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Using the &amp;lt;&lt;strong&gt;script setup&lt;/strong&gt;&amp;gt;&amp;nbsp;, a function called defineProps() is utilized. This function is a compiler macro, so there is no need to import it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;template&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Received Prop: {{ propValue }}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/template&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Options API :
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;propValue&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Composition API :
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;setup&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;defineProps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;propValue&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Using Methods with &lt;code&gt;&amp;lt;script setup&amp;gt;&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Methods will&amp;nbsp;be specified as consts and available in your template just like they were in the Options API, since methods are no longer considered objects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Options API :
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;template&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;click=&lt;/span&gt;&lt;span class="s"&gt;"incrementCounter"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Increment&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Counter: {{ counter }}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/template&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;counter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;methods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;incrementCounter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;counter&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Composition API :
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;
&lt;span class="nt"&gt;&amp;lt;template&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;click=&lt;/span&gt;&lt;span class="s"&gt;"incrementCounter()"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Increment&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Counter: {{ counter }}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/template&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;setup&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ref&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;counter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;incrementCounter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nx"&gt;counter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Using Computed with &amp;lt;&lt;strong&gt;script setup&lt;/strong&gt;&amp;gt;
&lt;/h2&gt;

&lt;p&gt;Computed &amp;nbsp;in Composition API operate as reactive data variables. They perform the role of a function, returning calculated values depending on reactive dependencies.&lt;/p&gt;

&lt;h3&gt;
  
  
  Options API :
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;
&lt;span class="nt"&gt;&amp;lt;template&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;click=&lt;/span&gt;&lt;span class="s"&gt;"incrementCounter"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Increment&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Counter: {{ counter }}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Double Counter: {{ doubleCounter }}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/template&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;counter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;computed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;doubleCounter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;counter&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;methods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;incrementCounter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;counter&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Composition API :
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;
&lt;span class="nt"&gt;&amp;lt;template&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;click=&lt;/span&gt;&lt;span class="s"&gt;"incrementCounter"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Increment&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Counter: {{ counter }}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Double Counter: {{ doubleCounter }}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/template&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;setup&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;computed&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;counter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;doubleCounter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;computed&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;counter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
`&lt;/p&gt;

</description>
      <category>vue</category>
      <category>compositionapi</category>
      <category>optionsapi</category>
      <category>vue3</category>
    </item>
    <item>
      <title>How to enable HTTPS on XAMPP server.</title>
      <dc:creator>Ahtisham Hasan Khan </dc:creator>
      <pubDate>Fri, 11 Aug 2023 12:12:56 +0000</pubDate>
      <link>https://dev.to/iahtisham/how-to-enable-https-on-xampp-server-mb1</link>
      <guid>https://dev.to/iahtisham/how-to-enable-https-on-xampp-server-mb1</guid>
      <description>&lt;h3&gt;
  
  
  You can checkout this article along with more programming related tips and articles on my personal website:
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://www.iahtisham.com/blog/how-to-enable-https-on-xampp-server"&gt;https://www.iahtisham.com/blog/how-to-enable-https-on-xampp-server&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Following are Steps to setup HTTPS for XAMP;&lt;/p&gt;

&lt;h2&gt;
  
  
  STEP 1 Installing XAMMP
&lt;/h2&gt;

&lt;p&gt;Download and install XAMPP &lt;a href="https://www.apachefriends.org/download.html"&gt;Here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  STEP 2 Adding VirtualHost
&lt;/h2&gt;

&lt;p&gt;Navigate to &lt;br&gt;
   &lt;code&gt;C:\xampp\apache\conf\extra&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Open &lt;strong&gt;httpd-vhosts-conf&lt;/strong&gt; file in Notepad&lt;/p&gt;

&lt;p&gt;add a &lt;strong&gt;VIRTUALHOST&lt;/strong&gt; in the end by copying following code&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  # Virtual Hosts
&amp;lt;VirtualHost *:443&amp;gt;
    DocumentRoot "C:/xampp/htdocs/"
    ServerName localhost
    SSLEngine on
    SSLCertificateFile "conf/ssl.crt/server.crt" 
    SSLCertificateKeyFile "conf/ssl.key/server.key"
    &amp;lt;Directory "C:/xampp/htdocs/"&amp;gt;
        Options All
        AllowOverride All
        Require all granted
    &amp;lt;/Directory&amp;gt;
&amp;lt;/VirtualHost&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;ServerName&lt;/strong&gt; will be the URL you want to setup HTTPS on; In this case We are using &lt;strong&gt;localhost&lt;/strong&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  STEP 3 Creating Private Key
&lt;/h2&gt;

&lt;p&gt;Now We will create &lt;strong&gt;Private KEY&lt;/strong&gt;. Navigate to the directory &lt;strong&gt;C:\xampp\apache&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Open &lt;code&gt;makecert.bat&lt;/code&gt;. It will ask Pass Phrase and some questions. You can give answers of your choices but &lt;strong&gt;the comman name should be   the URL for which you are setting up SSL for; in this case its "localhost"&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Once done with it you can find the certificates and Key folder in the following directory&lt;/p&gt;

&lt;p&gt;&lt;code&gt;C:\xampp\apache\conf&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  STEP 4 Configure httpd.config
&lt;/h2&gt;

&lt;p&gt;Now, Navigate to &lt;code&gt;C:\xampp\apache\conf&lt;/code&gt;. We will be configuring our &lt;code&gt;httpd.config&lt;/code&gt; file,&lt;/p&gt;

&lt;p&gt;All we need to do is to include following lines in the very bottm of &lt;code&gt;httpd.config&lt;/code&gt; file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; # Virtual hosts
Include conf/extra/httpd-vhosts.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  STEP 4 Installing Certificate
&lt;/h2&gt;

&lt;p&gt;Now, Open &lt;code&gt;ssl.crt&lt;/code&gt; folder and Install the certificate on the local machine by follwing steps;]&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;open &lt;code&gt;server.crt&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;click **install certificate""&lt;/li&gt;
&lt;li&gt;click &lt;strong&gt;local machine&lt;/strong&gt;, then proceed next&lt;/li&gt;
&lt;li&gt;click on **Place all certificates in the following store"

&lt;ul&gt;
&lt;li&gt;Browse and Choose &lt;strong&gt;Trusted Root Certification Authorities&lt;/strong&gt;, click &lt;strong&gt;OK&lt;/strong&gt; and &lt;strong&gt;NEXT&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Finish&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;A message will pop up saying&lt;/strong&gt; &lt;em&gt;&lt;strong&gt;""the import was successfull""&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  STEP 5 Configure Chrome
&lt;/h2&gt;

&lt;p&gt;We will enable &lt;strong&gt;Allow invalid certificates for resources loaded from localhost.&lt;/strong&gt; in Chrome.&lt;/p&gt;

&lt;p&gt;for this paste the following on URL, it will lead you directly to it.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;chrome://flags/#allow-insecure-localhost&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Restart your XAMPP services and restart chrome as well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You should now be able to access your website with HTTPS / SSL enabled.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Support Me!!
&lt;/h2&gt;

&lt;p&gt;If you found this post helpful, consider &lt;a href="https://www.buymeacoffee.com/iahtisham"&gt;buying me Coffee ☕&lt;/a&gt;. Your support keeps me fueled to create more content!&lt;/p&gt;

&lt;p&gt;Public Gist URL: &lt;a href="https://gist.github.com/iahtisham/09650933ea013fdc14906f56b191e180"&gt;https://gist.github.com/iahtisham/09650933ea013fdc14906f56b191e180&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Honorable Mentions:
&lt;/h3&gt;

&lt;p&gt;Transform your daily grind with this dynamic calculator website – your ultimate solution for real-world problems! Explore now for a seamless and efficient experience!. Here are some of my favorites&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.margincalculator.net/calculators/markup-calculator/"&gt;Markup Calculator&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.margincalculator.net/calculators/apy-calculator/"&gt;APY Calculator&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>xampp</category>
      <category>https</category>
      <category>ssl</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
