<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[iOS Example]]></title><description><![CDATA[A nice collection of often useful examples done in Objective-C and Swift.]]></description><link>https://iosexample.com/</link><image><url>https://iosexample.com/favicon.png</url><title>iOS Example</title><link>https://iosexample.com/</link></image><generator>Ghost 1.26</generator><lastBuildDate>Mon, 13 Apr 2026 07:32:48 GMT</lastBuildDate><atom:link href="https://iosexample.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[A simple library for iOS to apply a blurry, coloured and vibrant background behind your views]]></title><description><![CDATA[Gradiente is a simple library for iOS to apply a blurry, coloured and vibrant background behind your views.]]></description><link>https://iosexample.com/a-simple-library-for-ios-to-apply-a-blurry-coloured-and-vibrant-background-behind-your-views/</link><guid isPermaLink="false">66166a39d5be8526288b5b02</guid><category><![CDATA[Gradient]]></category><dc:creator><![CDATA[iOS Example]]></dc:creator><pubDate>Wed, 10 Apr 2024 10:31:35 GMT</pubDate><media:content url="https://iosexample.com/content/images/2024/04/Code_2024-04_18-31-08.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><h2 id="gradiente">Gradiente</h2>
<img src="https://iosexample.com/content/images/2024/04/Code_2024-04_18-31-08.jpg" alt="A simple library for iOS to apply a blurry, coloured and vibrant background behind your views"><p>Gradiente is a simple library for iOS to apply a blurry, coloured and vibrant background behind your views. It's written in SwiftUI and easily applicable to any view.</p>
<div class="ct-demo-links"><a class="ct-demo-link ct-demo-link--download" href="https://github.com/letvarhq/Gradiente" target="_blank" rel="nofollow">View Github</a></div>
<h2 id="features">Features</h2>
<ul>
<li>Support for colours and gradients</li>
<li>Can be applied as a SwiftUI modifier to any view</li>
<li>Can be positioned at the top or bottom of the view</li>
<li>Compatible with iOS 15</li>
</ul>
<h2 id="requirements">Requirements</h2>
<ul>
<li>Xcode 13 and later</li>
<li>iOS 15 and later</li>
<li>Swift 5.5 and later</li>
</ul>
<h2 id="license">License</h2>
<p>This library is licensed under the MIT License.</p>
</div>]]></content:encoded></item><item><title><![CDATA[A package for make easier implementing a structure of settings / preferences UI for macOS]]></title><description><![CDATA[A package for make easier implementing a structure of settings / preferences UI for macOS]]></description><link>https://iosexample.com/a-package-for-make-easier-implementing-a-structure-of-settings-preferences-ui-for-macos/</link><guid isPermaLink="false">65f0517cd5be8526288b5af4</guid><category><![CDATA[macOS]]></category><dc:creator><![CDATA[iOS Example]]></dc:creator><pubDate>Wed, 13 Mar 2024 00:04:00 GMT</pubDate><media:content url="https://iosexample.com/content/images/2024/03/Code_2024-03_20-59-00.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><h2 id="macappsettingsui">MacAppSettingsUI</h2>
<img src="https://iosexample.com/content/images/2024/03/Code_2024-03_20-59-00.jpg" alt="A package for make easier implementing a structure of settings / preferences UI for macOS"><p>MacAppSettingsUI is a package designed to simplify the process of implementing structured settings or preferences user interfaces for macOS applications built using the AppKit framework. This package aims to streamline the development of intuitive and consistent settings interfaces, which are common features in many desktop applications.</p>
<p><img src="https://iosexample.com/content/images/2024/03/anim.gif" alt="A package for make easier implementing a structure of settings / preferences UI for macOS"></p>
<div class="ct-demo-links"><a class="ct-demo-link ct-demo-link--download" href="https://github.com/usagimaru/MacAppSettingsUI" target="_blank" rel="nofollow">View Github</a></div>
<p>By leveraging MacAppSettingsUI, developers can easily create and manage a hierarchical structure for their application's settings or preferences. This structure can be organized into various sections, each containing related settings or configuration options.</p>
</div>]]></content:encoded></item><item><title><![CDATA[A Swift package for querying and prompting for Full Disk Access permission on macOS]]></title><description><![CDATA[FullDiskAccess is a Swift package designed to simplify the process of querying and prompting for Full Disk Access permission on macOS 10.14 and later versions.]]></description><link>https://iosexample.com/a-swift-package-for-querying-and-prompting-for-full-disk-access-permission-on-macos/</link><guid isPermaLink="false">65efd9cad5be8526288b5af1</guid><category><![CDATA[Swift]]></category><dc:creator><![CDATA[iOS Example]]></dc:creator><pubDate>Tue, 12 Mar 2024 04:29:03 GMT</pubDate><media:content url="https://iosexample.com/content/images/2024/03/Code_2024-03_12-27-00.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><h2 id="fulldiskaccess">FullDiskAccess</h2>
<img src="https://iosexample.com/content/images/2024/03/Code_2024-03_12-27-00.jpg" alt="A Swift package for querying and prompting for Full Disk Access permission on macOS"><p>FullDiskAccess is a Swift package designed to simplify the process of querying and prompting for Full Disk Access permission on macOS 10.14 and later versions. This package aims to address the challenges developers face when their macOS applications require access to system files or files belonging to other applications.</p>
<div class="ct-demo-links"><a class="ct-demo-link ct-demo-link--download" href="https://github.com/inket/FullDiskAccess" target="_blank" rel="nofollow">View Github</a></div>
<p>Full Disk Access is necessary for non-sandboxed macOS applications that need to access restricted areas of the file system, such as system files or files owned by other applications. Examples of such applications include file backup utilities, system-wide search tools, and other applications that require comprehensive access to the user's disk.</p>
<p>While the lack of clear documentation surrounding Full Disk Access has led to confusion within the developer community, this Swift package aims to provide a streamlined solution. The package's developer has thoroughly tested the behavior across six different macOS virtual machines to ensure a comprehensive understanding of the permission requirements and their nuances across various macOS versions.</p>
<p>FullDiskAccess offers a straightforward API that enables developers to check the current Full Disk Access permission status and prompt users to grant the necessary permissions when required. By encapsulating this functionality within a dedicated package, developers can save time and effort while ensuring their applications comply with macOS security requirements and provide the necessary access required for their intended functionality.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Vision Panes: Elevating visionOS App Development with Seamless Pane Management]]></title><description><![CDATA[Vision Panes is an easy-to-use SwiftUI package designed to simplify the process of splitting windows into multiple panes with smooth animations out of the box.]]></description><link>https://iosexample.com/vision-panes-elevating-visionos-app-development-with-seamless-pane-management/</link><guid isPermaLink="false">65ef1805d5be8526288b5aee</guid><category><![CDATA[visionOS]]></category><dc:creator><![CDATA[iOS Example]]></dc:creator><pubDate>Mon, 11 Mar 2024 14:55:16 GMT</pubDate><media:content url="https://iosexample.com/content/images/2024/03/Code_2024-03_22-55-00.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><h2 id="visionpanes">Vision Panes</h2>
<img src="https://iosexample.com/content/images/2024/03/Code_2024-03_22-55-00.jpg" alt="Vision Panes: Elevating visionOS App Development with Seamless Pane Management"><p>Vision Panes is an easy-to-use SwiftUI package designed to simplify the process of splitting windows into multiple panes with smooth animations out of the box. This package aims to enhance the user experience of visionOS applications by leveraging the platform's unique infinite canvas feature.</p>
<iframe width="100%" height="415" src="https://www.youtube.com/embed/FTI3T7ygntM?si=6UQfMu19CBy6lsoB" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<div class="ct-demo-links"><a class="ct-demo-link ct-demo-link--download" href="https://github.com/reftonull/VisionPanes" target="_blank" rel="nofollow">View Github</a></div>
<p>One of the key advantages of visionOS is its ability to display windowed apps with arbitrary sizes, enabling developers to utilize panes more effectively without compromising screen real estate. Apple has implemented this concept in the Messages app, where contact details are displayed in a pane on the trailing edge of the main pane, providing a seamless and space-efficient user experience.</p>
<p>While visionOS offers this functionality, setting up panes can be a complex and challenging task without proper tools. Vision Panes addresses this issue by providing a simple SwiftUI interface, eliminating the need for developers to delve into UIKit for window management and plumbing.</p>
<p>Key features of Vision Panes include:</p>
<ol>
<li>Easy-to-use SwiftUI API: Vision Panes offers an intuitive SwiftUI interface familiar to most SwiftUI developers, streamlining the development process.</li>
<li>Multiple pane support: Developers can add multiple panes to each of the four edges of a window, enabling flexible and dynamic layouts.</li>
<li>No UIKit required: Vision Panes eliminates the need to work with UIKit, allowing developers to stay within the SwiftUI ecosystem.</li>
<li>Pleasant animations: The package includes pleasant animations for pane transitions, enhancing the overall user experience.</li>
</ol>
<p>Vision Panes is compatible with visionOS 1.0, Swift 5.10, and Xcode 15.2, making it accessible to developers working on the latest versions of Apple's platforms and tools. The package is available under the permissive MIT License, allowing for free use, modification, and distribution.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Swift Package Plugin for automatically translating your String Catalogs]]></title><description><![CDATA[Swift Translate is a CLI tool and Swift Package Plugin that makes it easy to localize your app. ]]></description><link>https://iosexample.com/swift-package-plugin-for-automatically-translating-your-string-catalogs/</link><guid isPermaLink="false">65e70d18d5be8526288b5ad7</guid><category><![CDATA[Translation]]></category><category><![CDATA[String]]></category><dc:creator><![CDATA[iOS Example]]></dc:creator><pubDate>Sat, 09 Mar 2024 00:31:00 GMT</pubDate><media:content url="https://iosexample.com/content/images/2024/03/Code_2024-03_20-19-48.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><h2 id="swifttranslate">swift-translate</h2>
<img src="https://iosexample.com/content/images/2024/03/Code_2024-03_20-19-48.jpg" alt="Swift Package Plugin for automatically translating your String Catalogs"><p>Swift Translate is a powerful command-line interface (CLI) tool and Swift Package Plugin designed to streamline the localization process for app development. It simplifies the task of translating your application's string catalogs into multiple languages by leveraging the capabilities of OpenAI's GPT-3.5-Turbo language model.</p>
<iframe width="100%" height="415" src="https://www.youtube.com/embed/8BT9P_OIruE?si=CLaIOwYTK-Z9BlJX" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<div class="ct-demo-links"><a class="ct-demo-link ct-demo-link--download" href="https://github.com/hidden-spectrum/swift-translate" target="_blank" rel="nofollow">View Github</a></div>
<p>The tool works by deconstructing your existing string catalogs and automatically sending the strings to the GPT-3.5-Turbo model for translation. This integration with OpenAI's advanced natural language processing technology ensures accurate and context-aware translations, enabling you to efficiently localize your app for global audiences.</p>
<h2 id="requirements">Requirements</h2>
<ul>
<li>macOS 13+</li>
<li>Xcode 15+</li>
<li>Project utilizing String Catalogs for localization</li>
<li>OpenAI API key</li>
</ul>
</div>]]></content:encoded></item><item><title><![CDATA[A macOS application for copying metadata to images]]></title><description><![CDATA[MetaCopy is a macOS application designed to facilitate the process of copying metadata to images.]]></description><link>https://iosexample.com/a-macos-application-for-copying-metadata-to-images/</link><guid isPermaLink="false">65eb10dad5be8526288b5ae8</guid><category><![CDATA[Metadata]]></category><category><![CDATA[macOS]]></category><dc:creator><![CDATA[iOS Example]]></dc:creator><pubDate>Fri, 08 Mar 2024 13:25:20 GMT</pubDate><media:content url="https://iosexample.com/content/images/2024/03/Code_2024-03_21-24-45.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><h2 id="metacopy">MetaCopy</h2>
<img src="https://iosexample.com/content/images/2024/03/Code_2024-03_21-24-45.jpg" alt="A macOS application for copying metadata to images"><p>MetaCopy is a macOS application designed to facilitate the process of copying metadata to images. It provides a user-friendly interface that allows users to effortlessly transfer metadata, such as EXIF data, from one image file to another or multiple image files.</p>
<div class="ct-demo-links"><a class="ct-demo-link ct-demo-link--download" href="https://github.com/macmade/MetaCopy" target="_blank" rel="nofollow">View Github</a></div>
<p>Developed by Jean-David Gadina, MetaCopy aims to simplify a task that can be tedious and time-consuming when performed manually. By automating the metadata copying process, this application streamlines workflows for photographers, graphic designers, and anyone working with large collections of image files.</p>
</div>]]></content:encoded></item><item><title><![CDATA[An example spatial/immersive MV-HEVC video player for Apple Vision Pro]]></title><description><![CDATA[The Spatial Player is an example immersive video player specifically designed for the newly released Apple Vision Pro headset.]]></description><link>https://iosexample.com/an-example-spatial-immersive-mv-hevc-video-player-for-apple-vision-pro/</link><guid isPermaLink="false">65e93726d5be8526288b5ae1</guid><category><![CDATA[visionOS]]></category><category><![CDATA[video]]></category><dc:creator><![CDATA[iOS Example]]></dc:creator><pubDate>Thu, 07 Mar 2024 03:42:36 GMT</pubDate><media:content url="https://iosexample.com/content/images/2024/03/Code_2024-03_11-42-08.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><h2 id="spatialplayer">Spatial Player</h2>
<img src="https://iosexample.com/content/images/2024/03/Code_2024-03_11-42-08.jpg" alt="An example spatial/immersive MV-HEVC video player for Apple Vision Pro"><p>The Spatial Player is an example immersive video player specifically designed for the newly released Apple Vision Pro headset. It was developed by Mike Swanson to address the lack of an official playback solution from Apple for spatial and immersive videos, despite the Vision Pro's capability to play such content.</p>
<div class="ct-demo-links"><a class="ct-demo-link ct-demo-link--download" href="https://github.com/mikeswanson/SpatialPlayer" target="_blank" rel="nofollow">View Github</a></div>
<p>These spatial videos can be recorded using the iPhone 15 Pro, the Vision Pro itself, or created with Mike Swanson's spatial command-line tool and similar utilities. They are encoded using the MV-HEVC codec and contain a Video Extended Usage box with instructions for proper playback.</p>
<p>However, one month after the Vision Pro's launch, Apple had not provided an obvious method to play these immersive videos in their supported formats. As a result, Mike Swanson developed the Spatial Player as a bare-bones solution to test the output from his command-line tool and video samples shared by interested parties. The player has successfully played up to 12K-per-eye (11520x5760) 360-degree stereo content, although at a low frame rate.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Loopover - A challenging 2D Rubix Cube style puzzle game]]></title><description><![CDATA[Loopover is a challenging 2D Rubix Cube style puzzle game. ]]></description><link>https://iosexample.com/loopover-a-challenging-2d-rubix-cube-style-puzzle-game/</link><guid isPermaLink="false">65e71cf6d5be8526288b5adb</guid><category><![CDATA[Games]]></category><dc:creator><![CDATA[iOS Example]]></dc:creator><pubDate>Tue, 05 Mar 2024 13:25:37 GMT</pubDate><media:content url="https://iosexample.com/content/images/2024/03/Code_2024-03_21-24-36.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><h2 id="loopover">Loopover</h2>
<img src="https://iosexample.com/content/images/2024/03/Code_2024-03_21-24-36.jpg" alt="Loopover - A challenging 2D Rubix Cube style puzzle game"><p>Loopover is a challenging 2D Rubix Cube style puzzle game. The goal of the game is to slide every box back into its original place. Any box that goes outside the grid will &quot;loopover&quot; back around to the other side. The game can be played in 4 different sizes: 3x3, 4x4, 5x5, and 6x6. Try to come up with the fastest time for each board!</p>
<div class="ct-demo-links"><a class="ct-demo-link ct-demo-link--download" href="https://github.com/typicel/loopover-ios" target="_blank" rel="nofollow">View Github</a></div>
<h2 id="attribution">Attribution</h2>
<p>Loopover is a recreation of carykh's Loopover written in Processing. We wanted to take the amazing concept of this game and make it more mobile friendly with native swipe gestures, using local storage to save user's best scores, and allowing for offline play. Please check out the original!</p>
<p>ConfettiSwiftUI by simibac</p>
</div>]]></content:encoded></item><item><title><![CDATA[An easy API for immersive visionOS entity anchoring]]></title><description><![CDATA[The primary way that visionOS augments reality is by detecting planes in the real world and allowing developers to attach objects to them.]]></description><link>https://iosexample.com/an-easy-api-for-immersive-visionos-entity-anchoring/</link><guid isPermaLink="false">65e54537d5be8526288b5ad2</guid><category><![CDATA[visionOS]]></category><dc:creator><![CDATA[iOS Example]]></dc:creator><pubDate>Mon, 04 Mar 2024 03:55:09 GMT</pubDate><media:content url="https://iosexample.com/content/images/2024/03/Code_2024-03_11-54-48.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><h2 id="planeplopper">PlanePlopper</h2>
<img src="https://iosexample.com/content/images/2024/03/Code_2024-03_11-54-48.jpg" alt="An easy API for immersive visionOS entity anchoring"><p>The primary way that visionOS augments reality is by detecting planes in the real world and allowing developers to attach objects to them.</p>
<p>PlanePlopper makes it fast and easy to get your project providing immersive RealityKit scenes where users can place objects on (horizonal) planes of their choosing.</p>
<iframe width="100%" height="415" src="https://www.youtube.com/embed/G6H4kJyPkEs?si=cjlWXcr8iGBsvNMG" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<div class="ct-demo-links"><a class="ct-demo-link ct-demo-link--download" href="https://github.com/daniloc/PlanePlopper" target="_blank" rel="nofollow">View Github</a></div></div>]]></content:encoded></item><item><title><![CDATA[A multi-platform SwiftUI frontend for running local LLMs with Apple's MLX framework]]></title><description><![CDATA[This project is a fully native SwiftUI app that allows you to run local LLMs (e.g. Llama, Mistral) on Apple silicon in real-time using MLX.]]></description><link>https://iosexample.com/a-multi-platform-swiftui-frontend-for-running-local-llms-with-apples-mlx-framework/</link><guid isPermaLink="false">65e543b8d5be8526288b5ace</guid><category><![CDATA[SwiftUI]]></category><category><![CDATA[Chat]]></category><dc:creator><![CDATA[iOS Example]]></dc:creator><pubDate>Mon, 04 Mar 2024 03:49:58 GMT</pubDate><media:content url="https://iosexample.com/content/images/2024/03/Code_2024-03_11-49-45.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><h2 id="mlxswiftchat">mlx-swift-chat</h2>
<img src="https://iosexample.com/content/images/2024/03/Code_2024-03_11-49-45.jpg" alt="A multi-platform SwiftUI frontend for running local LLMs with Apple's MLX framework"><p>A multi-platform SwiftUI frontend for running local LLMs with Apple's MLX framework.</p>
<iframe width="100%" height="415" src="https://www.youtube.com/embed/1CvVJfZp6zo?si=E-DBFcWx20F7DWhC" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<div class="ct-demo-links"><a class="ct-demo-link ct-demo-link--download" href="https://github.com/PreternaturalAI/mlx-swift-chat" target="_blank" rel="nofollow">View Github</a></div>
<p>This project is a fully native SwiftUI app that allows you to run local LLMs (e.g. Llama, Mistral) on Apple silicon in real-time using MLX.</p>
</div>]]></content:encoded></item><item><title><![CDATA[A swift confetti view created with SpriteKit]]></title><description><![CDATA[A SwiftUI confetti modifier created by SpriteKit. Easily to use and custom in SwiftUI.]]></description><link>https://iosexample.com/a-swift-confetti-view-created-with-spritekit/</link><guid isPermaLink="false">65e345cdd5be8526288b5ac8</guid><category><![CDATA[Confetti]]></category><category><![CDATA[Swift]]></category><dc:creator><![CDATA[iOS Example]]></dc:creator><pubDate>Sun, 03 Mar 2024 00:37:00 GMT</pubDate><media:content url="https://iosexample.com/content/images/2024/03/Code_2024-03_23-31-47.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><h2 id="confettiwithspriteview">ConfettiWithSpriteView</h2>
<img src="https://iosexample.com/content/images/2024/03/Code_2024-03_23-31-47.jpg" alt="A swift confetti view created with SpriteKit"><p>A SwiftUI confetti modifier created by SpriteKit. Easily to use and custom in SwiftUI.</p>
<div class="ct-demo-links"><a class="ct-demo-link ct-demo-link--download" href="https://github.com/VIkill33/ConfettiWithSpriteView" target="_blank" rel="nofollow">View Github</a></div>
<h2 id="preview">Preview</h2>
<p><img src="https://iosexample.com/content/images/2024/03/309147241-c4c32903-e5a4-4695-8834-6f5352c29ca6.gif" alt="A swift confetti view created with SpriteKit"></p>
<h2 id="installation">Installation</h2>
<p>In Xcode go to <code>File -&gt; Swift Packages -&gt; Add Package Dependency</code><br>
and paste in the repo's url:</p>
<p><code>https://github.com/VIkill33/ConfettiWithSpriteView.git</code></p>
<p>Or you can download the code of this repo, then <code>Add Local...</code> in Xcode, and open the folder of the repo.</p>
<h2 id="usage">Usage</h2>
<ul>
<li>Import this package after you installed by <code>import ConfettiWithSpriteKit</code></li>
<li>Use the modifier like(check it out in DemoAPP inside this package)</li>
</ul>
<pre><code class="language-swift">struct ContentView: View {
    
    @State private var startConfetti = false
    
    var body: some View {
        ZStack {
            Button(&quot;Start/Stop&quot;) {
                startConfetti.toggle()
            }
            .confetti(start: $startConfetti)
        }
    }
}
</code></pre>
<p>When you change the passed var <code>startConfetti</code> to <code>true</code>, confetti will play above your modified view(confetti will NOT handle touch events and will pass them to views underit), and <code>false</code> will stop emitting more confetti.</p>
<p>The var need to be changed to <code>false</code> then <code>true</code> to retrigger the confetti.</p>
<h3 id="parameters">Parameters</h3>
<p>You can custom colors and images of confetti.</p>
<p>All descriptions about parameters were written in comment in source code:</p>
<pre><code class="language-swift">    /// - Parameters:
    ///   - start: A binding to a boolean value that controls the emission of confetti.
    ///   - angle: The angle at which the confetti will be emitted, measured in radians. Default is pi/2 (90 degrees).
    ///   - colors: An array of `UIColor` values representing the colors of the confetti. Default includes red, green, system teal, yellow, orange, and purple.
    ///   - size: The size of each confetti piece. Default is 25x25 points.
    ///   - scale: The initial scale of the confetti particles. Default is 0.3.
    ///   - numToEmitRange: A closed range of integers specifying the number of particles to emit. Default range is 10 to 20.
    ///   - images: An array of `UIImage` objects representing the images for the confetti. Default includes a ribbon image.
</code></pre>
<h2 id="howdoesitwork">How does it work</h2>
<p>It use <code>SKEmitterNode</code> in SpriteKit to emit particles, which are ribbons in this package defaultly. Particles of <code>SKEmitterNode</code> behave similarly to <code>CAEmitterLayer</code>'s. This repo is also an example about how to create SKEmitterNodes <strong>programmaticaly</strong>.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Easily integrate customizable masked text input fields into SwiftUI apps]]></title><description><![CDATA[The MaskedTextFieldSwiftUI package empowers developers to easily integrate customizable masked text input fields into their SwiftUI applications.]]></description><link>https://iosexample.com/easily-integrate-customizable-masked-text-input-fields-into-swiftui-apps/</link><guid isPermaLink="false">65dffbc9d5be8526288b5aba</guid><category><![CDATA[Masking]]></category><category><![CDATA[TextField]]></category><category><![CDATA[UITextField]]></category><category><![CDATA[SwiftUI]]></category><dc:creator><![CDATA[iOS Example]]></dc:creator><pubDate>Sat, 02 Mar 2024 00:42:00 GMT</pubDate><media:content url="https://iosexample.com/content/images/2024/02/Code_2024-02_11-36-21.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><h2 id="maskedtextfieldswiftui">MaskedTextFieldSwiftUI</h2>
<img src="https://iosexample.com/content/images/2024/02/Code_2024-02_11-36-21.jpg" alt="Easily integrate customizable masked text input fields into SwiftUI apps"><p>The MaskedTextFieldSwiftUI package empowers developers to easily integrate customizable masked text input fields into their SwiftUI applications. Masked text fields provide a structured way for users to input data by enforcing a specific format, such as phone numbers, dates, or credit card numbers, while maintaining a clean and intuitive user experience.</p>
<div class="ct-demo-links">
<a class="ct-demo-link ct-demo-link--download" href="https://github.com/azeribatman/MaskedTextFieldSwiftUI" target="_blank" rel="nofollow">View Github</a> 
</div>
<p><img src="https://iosexample.com/content/images/2024/02/308523024-6449d31f-d4f6-45bf-88d6-febd0c9e121f.gif" alt="Easily integrate customizable masked text input fields into SwiftUI apps"></p>
<h2 id="keyfeatures">Key Features</h2>
<ul>
<li>
<p>Flexible Masking: Define custom masks to specify the format in which user input should be entered, allowing for precise control over the data format.</p>
</li>
<li>
<p>Input Validation: Automatically validate user input against the specified mask, ensuring that only valid data is accepted and processed.</p>
</li>
<li>
<p>Placeholder Support: Provide placeholders that guide users on the expected format for input, improving usability and reducing errors.</p>
</li>
<li>
<p>Dynamic Formatting: Enable dynamic updates to the mask based on user input or application requirements, adapting to various scenarios seamlessly.</p>
</li>
<li>
<p>Customization Options: Customize the appearance and behavior of the masked text field to align with the application's design language and user preferences.</p>
</li>
<li>
<p>Integration with SwiftUI: Seamlessly integrate the masked text field component into SwiftUI views, leveraging SwiftUI's declarative syntax for building user interfaces.</p>
</li>
</ul>
<p>Whether you're building a form for collecting user information, implementing a payment processing system, or creating any other data entry interface, the SwiftUI Masked Text Field package provides a reliable solution for enforcing data format consistency and enhancing user input experiences in SwiftUI applications.</p>
<h2 id="installation">Installation</h2>
<h4 id="requirements">Requirements</h4>
<ul>
<li>iOS 15.0+</li>
</ul>
<h4 id="viaswiftpackagemanager">Via Swift Package Manager</h4>
<p>In Xcode, within your project, select: <code>File &gt; Swift Packages &gt; Add Package Dependency</code>, then paste the URL <a href="https://github.com/darealkhan/MaskedTextFieldSwiftUI.git">https://github.com/darealkhan/MaskedTextFieldSwiftUI.git</a> and proceed to download it.</p>
<h2 id="howtouse">How to Use</h2>
<p>To use <code>MaskedTextFieldSwiftUI</code>, you need to follow the simple steps below.</p>
<ol>
<li>Import the package into your project.</li>
</ol>
<pre><code class="language-Swift">import MaskedTextFieldSwiftUI
</code></pre>
<ol start="2">
<li>Create two state variables to receive changes in the text field. <code>rawText</code> will contain the cleared text from masked text. You can also use <code>maskedText</code> if needed.</li>
</ol>
<pre><code class="language-Swift">@State var rawText = &quot;&quot;
@State var maskedText = &quot;&quot;
</code></pre>
<ol start="3">
<li>Create a <code>MaskType</code> to specify the type of mask. The <code>maskString</code> parameter is a string that replaces mask characters with your typed characters. Separators are used to retrieve raw text from masked text, so each character in separators will be deleted in raw text. Finally, the <code>maskChar</code> parameter specifies which character will be used for masking.</li>
</ol>
<pre><code class="language-Swift">let mastType = MaskType(
    maskString: &quot;####-####-####-####&quot;,
    seperators: [
        .emptySpace,
        .customSeperator(&quot;-&quot;)
    ],
    maskChar: &quot;#&quot;
)
</code></pre>
<ol start="4">
<li>Create a <code>MaskedTextFieldConfig</code> for customizing textField related settings. There are numerous options you can customize; below, I'll list them all, and you can select which ones you want to customize.</li>
</ol>
<table>
<thead>
<tr>
<th>Setting</th>
<th>Type</th>
</tr>
</thead>
<tbody>
<tr>
<td>placeHolder</td>
<td>String</td>
</tr>
<tr>
<td>attributedPlaceholder</td>
<td>NSAttributedString</td>
</tr>
<tr>
<td>font</td>
<td>UIFont</td>
</tr>
<tr>
<td>textColor</td>
<td>UIColor</td>
</tr>
<tr>
<td>keyboardType</td>
<td>UIKeyboardType</td>
</tr>
<tr>
<td>autocorrectionType</td>
<td>UITextAutocorrectionType</td>
</tr>
<tr>
<td>autocapitalizationType</td>
<td>UITextAutocapitalizationType</td>
</tr>
</tbody>
</table>
<h4 id="forexampleletscreateasimpleconfigurationwithaplaceholder">For example, let's create a simple configuration with a placeholder.</h4>
<pre><code class="language-Swift">let config = MaskedTextFieldConfig(
    placeHolder: &quot;Card Number&quot;
)
</code></pre>
<ol start="5">
<li>Lastly, create a text field with masked text and raw text as binding variables, along with configuration and mask type settings.</li>
</ol>
<pre><code class="language-Swift"> MaskedTextField(
    rawText: $rawTest,
    maskedText: $maskedTest,
    maskType: maskType,
    config: config
)
</code></pre>
<h2 id="example">Example</h2>
<h4 id="realworldexampleofhowyoucanusemaskedtextfieldswiftuicanbefoundinthepackagefilesaswell">Real-world example of how you can use <code>MaskedTextFieldSwiftUI</code> can be found in the package files as well</h4>
<pre><code class="language-Swift">import Foundation
import MaskedTextFieldSwiftUI
import SwiftUI

struct ContentView: View {
    @State private var testFields = TestField.getFields()
    
    var body: some View {
        NavigationView {
            List($testFields) { field in
                Section(field.maskType.wrappedValue.maskString) {
                    textFieldTestView(with: field)
                }
            }
            .navigationTitle(&quot;Masked TextField ?&quot;)
        }
    }
    
    private func textFieldTestView(
        with field: Binding&lt;TestField&gt;
    ) -&gt; some View {
        VStack {
            MaskedTextField(
                rawText: field.rawText,
                maskedText: field.maskedText,
                maskType: field.maskType.wrappedValue,
                config: field.config.wrappedValue
            )
            
            Divider()
            
            Text(&quot;Raw text is: \(field.rawText.wrappedValue)&quot;)
                .font(.caption)
                .foregroundStyle(.secondary)
                .frame(
                    maxWidth: .infinity,
                    alignment: .leading
                )
            
            Text(&quot;Masked text is: \(field.maskedText.wrappedValue)&quot;)
                .font(.caption)
                .foregroundStyle(.secondary)
                .frame(
                    maxWidth: .infinity,
                    alignment: .leading
                )
        }
    }
}

struct TestField: Identifiable {
    let id = UUID()
    var rawText = &quot;&quot;
    var maskedText = &quot;&quot;
    var config: MaskedTextFieldConfig
    var maskType: MaskType
    
    static func getFields() -&gt; [TestField] {
        return [
            .init(
                config: MaskedTextFieldConfig(
                    placeHolder: &quot;Credit Card Number&quot;
                ),
                maskType: .init(
                    maskString: &quot;####-####-####-####&quot;,
                    seperators: [
                        .emptySpace,
                        .customSeperator(&quot;-&quot;),
                    ]
                )
            ),
            .init(
                config: MaskedTextFieldConfig(
                    placeHolder: &quot;Number&quot;
                ),
                maskType: .init(
                    maskString: &quot;(###)-###-##-##&quot;,
                    seperators: [
                        .emptySpace,
                        .customSeperator(&quot;(&quot;),
                        .customSeperator(&quot;)&quot;),
                        .customSeperator(&quot;-&quot;)
                    ]
                )
            ),
            .init(
                config: MaskedTextFieldConfig(
                    placeHolder: &quot;Zip adress&quot;,
                    autocapitalizationType: .allCharacters
                ),
                maskType: .init(
                    maskString: &quot;## ####&quot;,
                    seperators: [
                        .emptySpace
                    ]
                )
            ),
            .init(
                config: MaskedTextFieldConfig(
                    placeHolder: &quot;Ip address&quot;
                ),
                maskType: .init(
                    maskString: &quot;###.###.#.#&quot;,
                    seperators: [
                        .customSeperator(&quot;.&quot;)
                    ]
                )
            )
        ]
    }
}

#Preview {
    ContentView()
        .preferredColorScheme(.dark)
}
</code></pre>
</div>]]></content:encoded></item><item><title><![CDATA[A SwiftUI container that presents two views stacked vertically with an adjustable split]]></title><description><![CDATA[This package is heavily inspired by the splitscreen impelementation from the Amie iOS app. ]]></description><link>https://iosexample.com/a-swiftui-container-that-presents-two-views-stacked-vertically-with-an-adjustable-split/</link><guid isPermaLink="false">65e14d64d5be8526288b5ac2</guid><category><![CDATA[Split]]></category><category><![CDATA[SwiftUI]]></category><dc:creator><![CDATA[iOS Example]]></dc:creator><pubDate>Fri, 01 Mar 2024 04:12:59 GMT</pubDate><media:content url="https://iosexample.com/content/images/2024/03/Code_2024-03_11-39-58.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><h2 id="verticalsplit">VerticalSplit</h2>
<img src="https://iosexample.com/content/images/2024/03/Code_2024-03_11-39-58.jpg" alt="A SwiftUI container that presents two views stacked vertically with an adjustable split"><p>This package is heavily inspired by the splitscreen impelementation from the Amie iOS app.</p>
<div class="ct-demo-links"><a class="ct-demo-link ct-demo-link--download" href="https://github.com/vedantgurav/VerticalSplit" target="_blank" rel="nofollow">View Github</a></div>
<iframe width="100%" height="415" src="https://www.youtube.com/embed/MNDIvEcyRXo?si=WWwsHdeawhYTSu6i" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<h2 id="usage">Usage</h2>
<pre><code class="language-swift">import VerticalSplit

VerticalSplit(
    topTitle: &quot;Top View&quot;,
    bottomTitle: &quot;Bottom View&quot;,
    topView: {
        // Top Content
    },
    bottomView: {
        // Bottom Content
    }
)
</code></pre>
<h3 id="minioverlays">Mini Overlays</h3>
<p>Add custom content to show when the top or bottom views are in their smallest size.</p>
<pre><code class="language-swift">VerticalSplit(
    topTitle: &quot;Top View&quot;,
    bottomTitle: &quot;Bottom View&quot;,
    topView: {
        // Top Content
    },
    bottomView: {
        // Bottom Content
    },
    topMiniOverlay: {
        // Shown instead of the Top Content when Top View is minimised
    },
    bottomMiniOverlay: {
        // Shown instead of the Bottom Content when Bottom View is minimised
    }
)
</code></pre>
<h3 id="splitdetentbinding">SplitDetent Binding</h3>
<p>Use a binding to control the split between the top and bottom views.</p>
<pre><code class="language-swift">@State var currentDetent: SplitDetent.fraction(0.5)

VerticalSplit(
    detent: $currentDetent
    topTitle: &quot;Top View&quot;,
    bottomTitle: &quot;Bottom View&quot;,
    ...
)
</code></pre>
<h3 id="accessories">Accessories</h3>
<p>Use the <code>leadingAccessories</code> and <code>trailingAccessories</code> modifiers to add buttons in the drag region.</p>
<pre><code class="language-swift">VerticalSplit(...)
    .leadingAccessories([
        SplitAccessory(systemName: &quot;plus.circle.fill&quot;) {
            // Perform action
        },
        SplitAccessory(systemName: &quot;minus.circle.fill&quot;) {
            // Perform action
        }
    ])
</code></pre>
<h3 id="menuaccessories">Menu Accessories</h3>
<p>Use the <code>menuAccessories</code> modifier to add buttons in a pop-out menu un the drag region.</p>
<pre><code class="language-swift">VerticalSplit(...)
    .menuAccessories([
        MenuAccessory(title: &quot;Plus&quot;, systemName: &quot;plus.circle.fill&quot;, color: .green) {
            // Perform action
        },
        MenuAccessory(title: &quot;Minus&quot;, systemName: &quot;minus.circle.fill&quot;, color: .red) {
            // Perform action
        }
    ])
</code></pre>
<h3 id="backgroundcolor">Background Color</h3>
<p>Set the background color for the top and bottom view containers, as well as the menu buttons,</p>
<pre><code class="language-swift">VerticalSplit(...)
    .backgroundColor(.gray)
</code></pre>
<h3 id="debugging">Debugging</h3>
<p>Control whether or not logs are made for debugging.</p>
<pre><code class="language-swift">VerticalSplit(...)
    .debug(true)
</code></pre>
</div>]]></content:encoded></item><item><title><![CDATA[TodoTrackr: SwiftUI application made for an easier todo-list experience]]></title><description><![CDATA[TodoTrackr is your go-to application for seamless task organization and management.]]></description><link>https://iosexample.com/todotrackr-swiftui-application-made-for-an-easier-todo-list-experience/</link><guid isPermaLink="false">65dffb27d5be8526288b5ab6</guid><category><![CDATA[Todo]]></category><category><![CDATA[SwiftUI]]></category><dc:creator><![CDATA[iOS Example]]></dc:creator><pubDate>Fri, 01 Mar 2024 00:40:00 GMT</pubDate><media:content url="https://iosexample.com/content/images/2024/02/Code_2024-02_11-34-14.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><h2 id="todotrackr">TodoTrackr</h2>
<img src="https://iosexample.com/content/images/2024/02/Code_2024-02_11-34-14.jpg" alt="TodoTrackr: SwiftUI application made for an easier todo-list experience"><p>TodoTrackr is your go-to application for seamless task organization and management. With TodoTrackr, users can effortlessly create custom categories, such as &quot;Courses,&quot; &quot;Work Projects,&quot; or &quot;Personal Errands,&quot; tailoring their task management experience to suit their unique needs.</p>
<div class="ct-demo-links">
<a class="ct-demo-link ct-demo-link--download" href="https://github.com/GuiFlam/TodoTrackr" target="_blank" rel="nofollow">View Github</a> 
</div>
<p>Here's what sets TodoTrackr apart:</p>
<h3 id="customcategories">Custom Categories</h3>
<p>Users have the freedom to create personalized categories, allowing for intuitive organization of tasks based on different aspects of their lives or projects.</p>
<h3 id="effortlesstaskaddition">Effortless Task Addition</h3>
<p>Adding tasks to categories is a breeze. Whether it's jotting down a quick reminder or outlining a detailed to-do list, TodoTrackr ensures that users can capture tasks quickly and efficiently.</p>
<h3 id="coredataintegration">CoreData Integration</h3>
<p>TodoTrackr leverages CoreData for robust data management, ensuring the reliability and scalability of your task lists. CoreData's efficient data storage and retrieval mechanisms guarantee a seamless user experience, even with extensive task lists.</p>
<h3 id="jsonexportimport">JSON Export &amp; Import</h3>
<p>Need to share your task lists or back them up? TodoTrackr has you covered. With CoreData JSON encoding, users can export all app contents to a JSON file effortlessly. This feature ensures data portability and allows for easy integration with other applications or platforms.</p>
<h2 id="screenshots">Screenshots</h2>
<h3 id="mainview">Main View</h3>
<p><img src="https://iosexample.com/content/images/2024/02/main.png" alt="TodoTrackr: SwiftUI application made for an easier todo-list experience"></p>
<h3 id="addatodo">Add A Todo</h3>
<p><img src="https://iosexample.com/content/images/2024/02/add.png" alt="TodoTrackr: SwiftUI application made for an easier todo-list experience"></p>
<h3 id="editatodo">Edit A Todo</h3>
<p><img src="https://iosexample.com/content/images/2024/02/edit.png" alt="TodoTrackr: SwiftUI application made for an easier todo-list experience"></p>
<h3 id="filesconvertedtojson">Files converted to JSON</h3>
<p><img src="https://iosexample.com/content/images/2024/02/json.png" alt="TodoTrackr: SwiftUI application made for an easier todo-list experience"></p>
</div>]]></content:encoded></item><item><title><![CDATA[A custom SwiftUI slider control that allows for more customization than the standard Slider]]></title><description><![CDATA[A custom SwiftUI slider control that allows for more customization than the standard Slider]]></description><link>https://iosexample.com/a-custom-swiftui-slider-control-that-allows-for-more-customization-than-the-standard-slider/</link><guid isPermaLink="false">65dffa53d5be8526288b5ab2</guid><category><![CDATA[Slider]]></category><category><![CDATA[SwiftUI]]></category><dc:creator><![CDATA[iOS Example]]></dc:creator><pubDate>Thu, 29 Feb 2024 03:33:04 GMT</pubDate><media:content url="https://iosexample.com/content/images/2024/02/Code_2024-02_11-32-31.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><h2 id="betterslider">BetterSlider</h2>
<img src="https://iosexample.com/content/images/2024/02/Code_2024-02_11-32-31.jpg" alt="A custom SwiftUI slider control that allows for more customization than the standard Slider"><p>This package provides a custom slider control that allows for more customization than the standard Slider control.</p>
<div class="ct-demo-links">
<a class="ct-demo-link ct-demo-link--download" href="https://github.com/lukepistrol/BetterSlider" target="_blank" rel="nofollow">View Github</a> 
</div>
<h2 id="overview">Overview</h2>
<p>If you need a slider control that allows for more customization than the standard <code>Slider</code> control,<br>
you can use <code>BetterSlider/BetterSlider</code>.</p>
<p><img src="https://iosexample.com/content/images/2024/02/RangeSlider.png" alt="A custom SwiftUI slider control that allows for more customization than the standard Slider"></p>
<p>If you need a slider control to select a range of values, you can use <code>BetterSlider/RangeSlider</code>.</p>
<h2 id="documentation">Documentation</h2>
<p>The documentation is available <a href="https://lukepistrol.github.io/BetterSlider/documentation/betterslider">here</a>.</p>
<p>You can also have a look at the <a href="https://github.com/lukepistrol/BetterSlider/tree/main/BetterSliderDemo/BetterSliderDemo">sample project</a>.</p>
<h2 id="usage">Usage</h2>
<pre><code class="language-swift">dependencies: [
    .package(url: &quot;https://github.com/lukepistrol/BetterSlider.git&quot;, from: &lt;#Version#&gt;)
]
</code></pre>
</div>]]></content:encoded></item></channel></rss>