<?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: eliguzz</title>
    <description>The latest articles on DEV Community by eliguzz (@eliguzz).</description>
    <link>https://dev.to/eliguzz</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3940241%2F2c43a6da-b33f-49be-a73a-73451307f576.png</url>
      <title>DEV Community: eliguzz</title>
      <link>https://dev.to/eliguzz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/eliguzz"/>
    <language>en</language>
    <item>
      <title>Building an Open Source One Sec Alternative: Breaking the Shortcuts Infinite Loop Thanks to iOS 26</title>
      <dc:creator>eliguzz</dc:creator>
      <pubDate>Tue, 19 May 2026 12:37:20 +0000</pubDate>
      <link>https://dev.to/eliguzz/building-an-open-source-one-sec-alternative-breaking-the-shortcuts-infinite-loop-thanks-to-ios-26-ka4</link>
      <guid>https://dev.to/eliguzz/building-an-open-source-one-sec-alternative-breaking-the-shortcuts-infinite-loop-thanks-to-ios-26-ka4</guid>
      <description>&lt;p&gt;If you've ever tried to build an iOS app that intercepts another app's launch, a custom launcher, a Screen Time blocker, a digital wellbeing tool, you've probably studied &lt;strong&gt;One Sec&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;To intercept an app launch seamlessly, One Sec asks users to set up an Apple Shortcuts Automation: &lt;em&gt;"When Instagram is opened -&amp;gt; Run One Sec."&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;It works beautifully. But the moment you try to code this yourself, you hit an immediate brick wall: &lt;/p&gt;

&lt;h2&gt;
  
  
  The Deeplink Infinite Loop
&lt;/h2&gt;

&lt;p&gt;When your app finishes its logic and sends the user back to Instagram via a deeplink (&lt;code&gt;instagram://&lt;/code&gt;), the Shortcut Automation detects the "App Opened" event again. It fires instantly, yanking the user right back into your app. &lt;/p&gt;

&lt;p&gt;I searched around for answers on Reddit, Stack Overflow, Apple Developer Forums and others, and it seems a lot of developers in the past have attempted this and eventually admitted defeat. &lt;/p&gt;

&lt;p&gt;Most existing solutions in this space predate iOS 26 and rely on some variant of these workarounds rely on some flow breaking sacrifices just to get working. &lt;/p&gt;

&lt;p&gt;I'm an Electrical Engineer by trade but I enjoy making software tools that I genuinely intend to use, and I recently built a free, open-source alternative to One Sec that forces a video game like loading screen before distracting apps that I was using far too often. One Sec was able to achieve this so I knew it must be possible.&lt;/p&gt;

&lt;p&gt;I spent days stuck on this. The solution finally clicked when I stumbled across &lt;a href="https://www.reddit.com/r/swift/comments/1m3xwyd/comment/nszhzdr/?utm_source=share&amp;amp;utm_medium=web3x&amp;amp;utm_name=web3xcss&amp;amp;utm_term=1&amp;amp;utm_content=share_button" rel="noopener noreferrer"&gt;a comment on r/swift by u/Extreme-Baby3813&lt;/a&gt; pointing out that in iOS 26 Apple added &lt;code&gt;.foreground(.dynamic)&lt;/code&gt; to their &lt;code&gt;App Intents&lt;/code&gt; framework. That was the missing piece.&lt;/p&gt;

&lt;p&gt;Honestly, I have no idea how One Sec was doing this before iOS 26 but thanks to the new &lt;code&gt;.foreground(.dynamic)&lt;/code&gt; there is a relatively straight forward solution. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution: Background State Checks via App Intents
&lt;/h2&gt;

&lt;p&gt;To break the loop, you have to intercept the Shortcut automation &lt;strong&gt;before&lt;/strong&gt; it pulls your app into the foreground. You do this by exposing a custom App Intent to the Shortcuts app and using a shared App Group to manage state across processes. &lt;/p&gt;

&lt;p&gt;Here's the flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User taps Instagram 
|
Shortcut Automation fires LaunchWithBootUpIntent (in the background) 
|
Intent checks the "Launch Pass" in the App Group 
├─ Pass exists -&amp;gt; return .result() silently -&amp;gt; Instagram opens normally 
└─ No pass -&amp;gt; continueInForeground() -&amp;gt; trigger the loading screen 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The loop is broken by a single boolean check that happens entirely in the background.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: The "Launch Pass" State
&lt;/h2&gt;

&lt;p&gt;When the user successfully completes their wait in your main app, drop a temporary "Launch Pass" token into a shared App Group before deeplinking them back to the target app:&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;// right before calling open(instagram://) &lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;sharedDefaults&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;UserDefaults&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;suiteName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"group.com.yourname.AppData"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
&lt;span class="n"&gt;sharedDefaults&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;forKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"LaunchPass_com.instagram.instagram"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'll want to make this a bit smarter than a plain bool, in production I store an expiry timestamp keyed by bundle ID so passes auto-expire after the grace period, but a bool is enough to illustrate the concept here. &lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: The Loop-Breaking App Intent
&lt;/h2&gt;

&lt;p&gt;This is the intent the user actually selects in the Shortcuts app (instead of a generic "Open App" command):&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;AppIntents&lt;/span&gt; 
&lt;span class="kd"&gt;import&lt;/span&gt; &lt;span class="kt"&gt;Foundation&lt;/span&gt; 

&lt;span class="kd"&gt;@available&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;iOS&lt;/span&gt; &lt;span class="mf"&gt;26.0&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;struct&lt;/span&gt; &lt;span class="kt"&gt;LaunchWithBootUpIntent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;AppIntent&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 

    &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;LocalizedStringResource&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Launch with Boot Up"&lt;/span&gt; 

    &lt;span class="c1"&gt;// The intent starts in the background and only escalates if it needs to&lt;/span&gt;
    &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;supportedModes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;IntentModes&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="n"&gt;background&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;foreground&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;dynamic&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt; 

    &lt;span class="kd"&gt;@Parameter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Target App"&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;targetApp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;BootUpAppEntity&lt;/span&gt; 

    &lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt; 
    &lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;targetApp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;BootUpAppEntity&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;targetApp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;targetApp&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;perform&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;throws&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kd"&gt;some&lt;/span&gt; &lt;span class="kt"&gt;IntentResult&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;bundleID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;targetApp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bundleID&lt;/span&gt; 
        &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;SharedDataManager&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shared&lt;/span&gt; 

        &lt;span class="c1"&gt;// Check the shared App Group&lt;/span&gt;
        &lt;span class="c1"&gt;// If the user has a valid Launch Pass, return silently&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;consumeLaunchPass&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;forBundleID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;bundleID&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="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;result&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; 
        &lt;span class="p"&gt;}&lt;/span&gt; 

        &lt;span class="c1"&gt;// user is trying to open the app fresh&lt;/span&gt;
        &lt;span class="c1"&gt;// Build the deeplink back into our own app&lt;/span&gt;
        &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;urlString&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"bootup://launch?bundle=&lt;/span&gt;&lt;span class="se"&gt;\(&lt;/span&gt;&lt;span class="n"&gt;bundleID&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt; 
        &lt;span class="k"&gt;guard&lt;/span&gt; &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;string&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;urlString&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="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;result&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; 

        &lt;span class="c1"&gt;// bring from background to foreground&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;systemContext&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;currentMode&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;canContinueInForeground&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
            &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
                &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;continueInForeground&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;alwaysConfirm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
            &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;result&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="c1"&gt;// trigger the custom loading screen in the main app&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="kt"&gt;MainActor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
        &lt;span class="kt"&gt;NotificationCenter&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; 
        &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bootupLaunchURL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
        &lt;span class="nv"&gt;object&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
        &lt;span class="nv"&gt;userInfo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;url&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="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;result&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 key line is &lt;code&gt;supportedModes: IntentModes = [.background, .foreground(.dynamic)]&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;.background&lt;/code&gt; tells iOS the intent is allowed to run without ever bringing your app to the foreground. &lt;code&gt;.foreground(.dynamic)&lt;/code&gt; tells it the intent may escalate to the foreground later, based on runtime conditions. Together they give us the ability to start invisible, decide what to do, and only surface the UI when you actually need to. &lt;/p&gt;

&lt;h2&gt;
  
  
  How It Plays Out
&lt;/h2&gt;

&lt;p&gt;Here's the actual user-visible behavior: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Case 1 — Returning to the app after a successful intercept&lt;/strong&gt; &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;User completes the loading screen in your app. &lt;/li&gt;
&lt;li&gt;Your app grants a Launch Pass and calls &lt;code&gt;open(instagram://)&lt;/code&gt;. &lt;/li&gt;
&lt;li&gt;iOS switches to Instagram. The "App Opened" Shortcut automation fires. &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;LaunchWithBootUpIntent.perform()&lt;/code&gt; runs entirely in the background. &lt;/li&gt;
&lt;li&gt;It sees the Launch Pass, consumes it, returns &lt;code&gt;.result()&lt;/code&gt;. &lt;/li&gt;
&lt;li&gt;Instagram opens normally. The user never saw your app appear. 
The infinite loop is broken without a single frame flashing on screen. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Case 2 — Fresh launch attempt&lt;/strong&gt; &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;User taps Instagram from the home screen. &lt;/li&gt;
&lt;li&gt;The "App Opened" Shortcut fires. &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;LaunchWithBootUpIntent.perform()&lt;/code&gt; runs in the background. &lt;/li&gt;
&lt;li&gt;No Launch Pass exists. &lt;/li&gt;
&lt;li&gt;The intent calls &lt;code&gt;continueInForeground()&lt;/code&gt;, then posts the &lt;code&gt;bootup://&lt;/code&gt; URL. &lt;/li&gt;
&lt;li&gt;Your main app receives the URL via &lt;code&gt;NotificationCenter&lt;/code&gt; and renders the loading screen. 
Same intent, same code path, two completely different outcomes — chosen by a single state check before any UI work happens. &lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Caveats Worth Mentioning
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;This requires iOS 26. If you need to support earlier versions you'll need a fallback path.&lt;/li&gt;
&lt;li&gt;The user still has to manually set up the Shortcut automation once per app. There is no good way to create these automations programmatically. (let me know if you figure this out please, I'll give you a kiss)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  See It in Production
&lt;/h2&gt;

&lt;p&gt;I built this whole thing for an app called &lt;strong&gt;Boot Up&lt;/strong&gt;, a free, open-source iOS app that intercepts distracting apps with a video game style loading screen. &lt;/p&gt;

&lt;p&gt;I didn't want to pay $100 for an app that ultimately makes my phone slower so I decided to try it in my own style. Boot Up is currently in TestFlight beta and I'd love your feedback: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://testflight.apple.com/join/cWjTfdbt" rel="noopener noreferrer"&gt;&lt;strong&gt;Join the TestFlight beta :)&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The full implementation is here, including the &lt;code&gt;DeviceActivityMonitor&lt;/code&gt; extension that auto-relocks apps after a configurable grace period, the &lt;code&gt;ShieldConfiguration&lt;/code&gt; extension for the lock screen UI, and the rest of the architecture this article only touches on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Source code:&lt;/strong&gt; &lt;a href="https://github.com/eliguzz/BootUp" rel="noopener noreferrer"&gt;github.com/eliguzz/BootUp&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>ios</category>
      <category>swift</category>
      <category>opensource</category>
      <category>screentime</category>
    </item>
  </channel>
</rss>
