<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">
	<channel>
		<title>A Repository Full of Our Best Practices in iOS Development | Infinum</title>
		<atom:link href="https://infinum.com/blog/repository-full-of-our-best-practices-in-ios-development/feed/" rel="self" type="application/rss+xml" />
		<link>https://infinum.com/blog/repository-full-of-our-best-practices-in-ios-development/</link>
		<description>Building digital products</description>
		<lastBuildDate>Wed, 08 Apr 2026 14:17:14 +0000</lastBuildDate>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>

					<item>
				<image>
					<url>7878https://infinum.com/uploads/2019/10/repository-full-of-our-best-practices-in-ios-development-0.webp</url>
				</image>
				<title>A Repository Full of Our Best Practices in iOS Development</title>
				<link>https://infinum.com/blog/repository-full-of-our-best-practices-in-ios-development/</link>
				<pubDate>Thu, 10 Oct 2019 11:27:00 +0000</pubDate>
				<dc:creator>Goran Brlas</dc:creator>
				<guid isPermaLink="false">https://infinum.com/the-capsized-eight/repository-full-of-our-best-practices-in-ios-development/</guid>
				<description>
					<![CDATA[<p>iOS projects come in all shapes and sizes, but the same pesky problems in them reappear like in that bunny hammer game.</p>
<p>The post <a href="https://infinum.com/blog/repository-full-of-our-best-practices-in-ios-development/">A Repository Full of Our Best Practices in iOS Development</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</description>
				<content:encoded>
					<![CDATA[<div
	class="wrapper"
	data-id="es-209"
	 data-animation-target='inner-items'>
		
			<div class="wrapper__inner">
			<div class="block-blog-content js-block-blog-content">
	
<div class="block-blog-content-sidebar" data-id="es-92">
	</div>

<div class="block-blog-content-main">
	
<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-95"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-93">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-94'
	>
	Here’s a scenario fellow iOS developers will find familiar: iOS development projects you work on come in all shapes and sizes, but as varied as they get, the same pesky problems in them appear repeatedly. And just when you’ve solved a problem in one project, it reappears in the next one, like in that bunny hammer game.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-98"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-96">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-97'
	>
	We’ve had this happen time and time again at Infinum. Project after project, we would go through best practices and fixes we’ve implemented in the past (and which Apple still hasn’t implemented), copying the solution that worked in the last project into the new one, making any neccessary modifications.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-101"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-99">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-100'
	>
	Over time, this has morphed into a <strong>knowledge base that became our reference point for upcoming development projects</strong>. Now, we’re sharing it with the world so that other developers can stop copy/pasting from project to project, and find the solution in a centralized repository instead.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-104"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-102">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-103'
	>
	Say hello to <strong><a href="https://github.com/infinum/iOS-Nuts-And-Bolts">Nuts &amp; Bolts</a></strong>!</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-107"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-105">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-106'
	>
	All about that feature&nbsp;life</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-110"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-108">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-109'
	>
	If you look at the repository, you’ll be able to find all the features inside the <strong>Sources</strong> folder. Each feature has its sample inside the catalog list which can be run and/or tests written for it, where you can find more info on the specific feature usage.&nbsp;</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-113"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-111">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-112'
	>
	Those features are currently split into 5 main domains, and we’ll go through the contents of each one.&nbsp;</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-116"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-114">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-115'
	>
	Most of these are written in Swift since that’s what we mostly use nowadays, but if you’re still using Obj-C don’t fret. There are some useful things in there for you to use as well. Also, if you have an Obj-C implementation which you think could be useful, please open a PR–we’re always open for suggestions.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-119"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-117">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-118'
	>
	Before we continue, please note that we <em>are</em> using some third party integrations through <a href="https://cocoapods.org">CocoaPods</a> to make our lives easier–we don’t always need to reinvent the wheel.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-122"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-120">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-121'
	>
	Networking made simple</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-125"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-123">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-124'
	>
	As we all know, pretty much every app we build or use depends on some kind of networking in order to provide its full functionality to the user. From complex apps like banking ones all the way to simple workout tracking, networking is pretty much a must. In order to make it a breeze, we’ve added several useful properties to this feature folder:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-128"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-126">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-127'
	>
	<li><strong>Router</strong>–Built on top of <em>Alamofire’s URLRequestConvertible</em>, <em>Routers</em> allow for easier separation of concerns when it comes to different API calls your application needs to make.</li><li><strong>Encoding</strong>–Used in conjuction with <em>Routers</em>, encoding features are used for creating request params with associated encoding.</li><li><strong>Adapters</strong>– For the times you need to athenticate your users. Our two adapters allow you to do just that, with support for basic authentication, as well as token-based ones.</li><li><strong>Service</strong>–Base protocol for API networking communication uses the previously desribed <em>Router</em> to make API calls.</li><li><strong>RxService</strong>–Reactive implementation of the Service mentioned above, where API calls are wrapped in <em>Singles</em> and <em>Completables</em>, whichever better fits your reactive needs.</li><li><strong>JSONAPI</strong>–Everything necessary to make your life easier when working with the <a href="https://jsonapi.org">JSON:API</a> standard.</li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-131"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-129">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-130'
	>
	RxSwift</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-134"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-132">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-133'
	>
	We’re big fans of reactive programming here, and we use it in pretty much every project we’re currently supporting.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-137"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-135">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-136'
	>
	We know that <em>Combine</em> is knocking on the door, but the majority of the projects we’re actively working on will have a <strong>minimum device support lower than iOS 13 for some time</strong>, which is why RxSwift is here to stay for some time. Since it’s such a central tool in our toolbox, we decided to make it even better with some improvements.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-140"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-138">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-139'
	>
	<em>Observables</em> are their main building blocks, and with these they become even better:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-142"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-swift github-light" data-language="swift" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">public</span><span class="token"> </span><span class="token" style="color: #d73a49;">extension</span><span class="token"> </span><span class="token" style="color: #6f42c1;">ObservableType</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> Maps each sequence elements to given value.</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> - Parameter value: Value to map</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> - Returns: Sequence where all elements are given value.</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">func mapTo</span><span class="token">&lt;</span><span class="token" style="color: #005cc5;">T</span><span class="token">&gt;</span><span class="token">(</span><span class="token">_ value</span><span class="token">: </span><span class="token">T</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">-&gt;</span><span class="token"> </span><span class="token">Observable</span><span class="token">&lt;</span><span class="token">T</span><span class="token">&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #d73a49;">return</span><span class="token"> </span><span class="token">map</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #005cc5;">_</span><span class="token"> </span><span class="token" style="color: #d73a49;">in</span><span class="token"> value </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> Behaves like `take(n)`, but with predicate rather then a fixed number of next events.</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> It will complete once predicate returns `false`.</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> - Parameter predicate: Predicate function that will decide if we should continue or complete</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> - Returns: Observable of type `E`.</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">func takeUntil</span><span class="token">(</span><span class="token">predicate</span><span class="token">: </span><span class="token" style="color: #d73a49;">@escaping</span><span class="token"> </span><span class="token">(</span><span class="token" style="color: #005cc5;">Element</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">-&gt;</span><span class="token"> </span><span class="token" style="color: #005cc5;">Bool</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">-&gt;</span><span class="token"> </span><span class="token">Observable</span><span class="token">&lt;</span><span class="token" style="color: #005cc5;">Element</span><span class="token">&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #d73a49;">return</span><span class="token"> Observable.</span><span class="token">create</span><span class="token"> </span><span class="token">{</span><span class="token"> observer </span><span class="token" style="color: #d73a49;">in</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #d73a49;">return</span><span class="token"> </span><span class="token" style="color: #005cc5;">self</span><span class="token">.</span><span class="token">subscribe</span><span class="token"> </span><span class="token">{</span><span class="token"> event </span><span class="token" style="color: #d73a49;">in</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token" style="color: #d73a49;">switch</span><span class="token"> event </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token" style="color: #d73a49;">case</span><span class="token"> .</span><span class="token" style="color: #005cc5;">next</span><span class="token">(</span><span class="token" style="color: #d73a49;">let</span><span class="token"> value</span><span class="token">)</span><span class="token" style="color: #d73a49;">:</span><span class="token">
</span></span><span class="line"><span class="token">                    observer.</span><span class="token">on(</span><span class="token">.</span><span class="token" style="color: #005cc5;">next</span><span class="token">(</span><span class="token">value</span><span class="token">)</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">                    </span><span class="token" style="color: #d73a49;">if</span><span class="token"> </span><span class="token" style="color: #d73a49;">!</span><span class="token">predicate(</span><span class="token">value</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">                        observer.</span><span class="token">on(</span><span class="token">.</span><span class="token">completed</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">                    </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token" style="color: #d73a49;">case</span><span class="token"> .</span><span class="token" style="color: #005cc5;">error</span><span class="token">(</span><span class="token" style="color: #d73a49;">let</span><span class="token"> error</span><span class="token">)</span><span class="token" style="color: #d73a49;">:</span><span class="token">
</span></span><span class="line"><span class="token">                    observer.</span><span class="token">on(</span><span class="token">.</span><span class="token" style="color: #005cc5;">error</span><span class="token">(</span><span class="token">error</span><span class="token">)</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token" style="color: #d73a49;">case</span><span class="token"> .</span><span class="token">completed</span><span class="token" style="color: #d73a49;">:</span><span class="token">
</span></span><span class="line"><span class="token">                    observer.</span><span class="token">on(</span><span class="token">.</span><span class="token">completed</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">                </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-145"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-143">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-144'
	>
	We haven’t forgotten about <em>Singles</em>, so be sure to give them some much needed love when you take a look at what’s in there.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-148"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-146">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-147'
	>
	RxCocoa</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-151"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-149">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-150'
	>
	When talking about reactive programming for iOS, we can’t forget <em>RxCocoa</em>. It provides extensions to all things Cocoa, allowing them to take advantage of the reactive world.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-154"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-152">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-153'
	>
	If you use <em>Drivers</em> in your everyday life, these could be just what you’ve been looking for to drive your projects further than ever before. As you’ve probably noticed, we love our puns.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-156"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-swift github-light" data-language="swift" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> Safely unwraps optional value from chain</span><span class="token">
</span></span><span class="line"><span class="token">func unwrap</span><span class="token">&lt;</span><span class="token" style="color: #005cc5;">T</span><span class="token">&gt;</span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">-&gt;</span><span class="token"> </span><span class="token">Driver</span><span class="token">&lt;</span><span class="token">T</span><span class="token">&gt;</span><span class="token"> </span><span class="token" style="color: #d73a49;">where</span><span class="token"> </span><span class="token" style="color: #005cc5;">Element</span><span class="token"> </span><span class="token" style="color: #d73a49;">==</span><span class="token"> </span><span class="token" style="color: #005cc5;">Optional</span><span class="token">&lt;</span><span class="token">T</span><span class="token">&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #d73a49;">return</span><span class="token"> </span><span class="token" style="color: #005cc5;">self</span><span class="token">
</span></span><span class="line"><span class="token">        .</span><span class="token" style="color: #005cc5;">filter</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #005cc5;">$0</span><span class="token"> </span><span class="token" style="color: #d73a49;">!=</span><span class="token"> </span><span class="token" style="color: #005cc5;">nil</span><span class="token"> </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">        .</span><span class="token" style="color: #005cc5;">map</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #005cc5;">$0</span><span class="token" style="color: #d73a49;">!</span><span class="token"> </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> Creates new subscription and sends elements to `PublishRelay`.</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6a737d;">///</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> - Parameter relay: PublishRelay instance</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> - Returns: Disposable for current subscription</span><span class="token">
</span></span><span class="line"><span class="token">func drive</span><span class="token">(</span><span class="token">_ relay</span><span class="token">: </span><span class="token">PublishRelay</span><span class="token">&lt;</span><span class="token" style="color: #005cc5;">Element</span><span class="token">&gt;</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">-&gt;</span><span class="token"> </span><span class="token">Disposable </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #d73a49;">return</span><span class="token"> </span><span class="token">drive(</span><span class="token">onNext:</span><span class="token"> </span><span class="token">{</span><span class="token"> e </span><span class="token" style="color: #d73a49;">in</span><span class="token"> relay.</span><span class="token">accept(</span><span class="token">e</span><span class="token">)</span><span class="token"> </span><span class="token">}</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> Maps each sequence elements to given value.</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6a737d;">///</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> - Parameter value: Value to map</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> - Returns: Sequence where all elements are given value.</span><span class="token">
</span></span><span class="line"><span class="token">func mapTo</span><span class="token">&lt;</span><span class="token" style="color: #005cc5;">T</span><span class="token">&gt;</span><span class="token">(</span><span class="token">_ value</span><span class="token">: </span><span class="token">T</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">-&gt;</span><span class="token"> </span><span class="token">Driver</span><span class="token">&lt;</span><span class="token">T</span><span class="token">&gt;</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #d73a49;">return</span><span class="token"> </span><span class="token">map</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #005cc5;">_</span><span class="token"> </span><span class="token" style="color: #d73a49;">in</span><span class="token"> value </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-159"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-157">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-158'
	>
	Foundation</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-162"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-160">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-161'
	>
	This feature folder contains a wide range of useful extensions and computed properties covering many commonly used Foundation features: <em>Arrays</em>, <em>Strings</em>, <em>Bools</em>, <em>Date</em>, <em>Optional</em> and many others.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-164"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-swift github-light" data-language="swift" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">public</span><span class="token"> </span><span class="token" style="color: #d73a49;">extension</span><span class="token"> </span><span class="token" style="color: #005cc5;">Array</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> Returns object at provided index, if an index is in bounds of array indices,</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> otherwise, returns nil.</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> - Parameter index: Index of the object that you want to get.</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #d73a49;">subscript</span><span class="token"> </span><span class="token">(</span><span class="token">safe index</span><span class="token">: </span><span class="token" style="color: #005cc5;">Int</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">-&gt;</span><span class="token"> </span><span class="token" style="color: #005cc5;">Element</span><span class="token" style="color: #d73a49;">?</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #d73a49;">return</span><span class="token"> indices </span><span class="token" style="color: #d73a49;">~=</span><span class="token"> index </span><span class="token" style="color: #d73a49;">?</span><span class="token"> </span><span class="token" style="color: #005cc5;">self</span><span class="token">[</span><span class="token">index</span><span class="token">]</span><span class="token"> </span><span class="token" style="color: #d73a49;">:</span><span class="token"> </span><span class="token" style="color: #005cc5;">nil</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">public</span><span class="token"> </span><span class="token" style="color: #d73a49;">extension</span><span class="token"> </span><span class="token" style="color: #005cc5;">Optional</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> Executes `function` if optional is .some, otherwise nothing happens.</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> - Parameter function: Function to be executed.</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">func forValue</span><span class="token">(</span><span class="token">do function</span><span class="token">: </span><span class="token">(</span><span class="token">Wrapped</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">-&gt;</span><span class="token"> </span><span class="token">(</span><span class="token">)</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #d73a49;">if</span><span class="token"> </span><span class="token" style="color: #d73a49;">let</span><span class="token"> value </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #005cc5;">self</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token">function(</span><span class="token">value</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">public</span><span class="token"> </span><span class="token" style="color: #d73a49;">extension</span><span class="token"> </span><span class="token" style="color: #005cc5;">Bool</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> If the bool is `true` the provided object is returned, otherwise `nil` is returned.</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> - Parameter object: Object to be returned if the bool is `true`.</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> - Returns: `object` if `true`, `nil` otherwise.</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">func mapTrue</span><span class="token">&lt;</span><span class="token" style="color: #005cc5;">T</span><span class="token">&gt;</span><span class="token">(</span><span class="token">to object</span><span class="token">: </span><span class="token">T</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">-&gt;</span><span class="token"> </span><span class="token">T</span><span class="token" style="color: #d73a49;">?</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #d73a49;">return</span><span class="token"> </span><span class="token" style="color: #005cc5;">self</span><span class="token"> </span><span class="token" style="color: #d73a49;">?</span><span class="token"> object </span><span class="token" style="color: #d73a49;">:</span><span class="token"> </span><span class="token" style="color: #005cc5;">nil</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">public</span><span class="token"> </span><span class="token" style="color: #d73a49;">extension</span><span class="token"> </span><span class="token" style="color: #005cc5;">String</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> Checks if string is empty or contains only whitespaces and newlines</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> Returns `true` if string is empty or contains only whitespaces and newlines</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">var isBlank:</span><span class="token"> </span><span class="token" style="color: #005cc5;">Bool</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #d73a49;">return</span><span class="token"> </span><span class="token">trimmingCharacters(</span><span class="token">in:</span><span class="token"> .</span><span class="token">whitespacesAndNewlines</span><span class="token">)</span><span class="token">.</span><span class="token" style="color: #005cc5;">isEmpty</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-167"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-165">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-166'
	>
	These are just a taste of what we have available there, so be sure to check them out. We’re willing to bet that you will find something of use there.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-170"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-168">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-169'
	>
	UI</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-173"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-171">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-172'
	>
	This one is centered around <strong>UIKit</strong>–mproving it, as well as fixing some issues which we think should come out-of-the-box.&nbsp;</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-176"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-174">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-175'
	>
	Ever wanted to initialize colors more easily, or generate their hex values on the fly? Look no further.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-178"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-swift github-light" data-language="swift" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">public</span><span class="token"> </span><span class="token" style="color: #d73a49;">extension</span><span class="token"> </span><span class="token" style="color: #6f42c1;">UIColor</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> Initializes a UIColor object with red, green and blue values,</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> without the need for dividing the value (red, green or blue) with 255.0,</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> because this function does that for you.</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> - Parameters:</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;">   - r: Red value.</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;">   - g: Green value.</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;">   - b: Blue value.</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;">   - alpha: Alpha value of the color.</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #d73a49;">convenience</span><span class="token"> </span><span class="token" style="color: #d73a49;">init</span><span class="token">(</span><span class="token">r</span><span class="token">: </span><span class="token">CGFloat</span><span class="token">, </span><span class="token">g</span><span class="token">: </span><span class="token">CGFloat</span><span class="token">, </span><span class="token">b</span><span class="token">: </span><span class="token">CGFloat</span><span class="token">, </span><span class="token">alpha</span><span class="token">: </span><span class="token">CGFloat </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #005cc5;">1</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #005cc5;">self</span><span class="token">.</span><span class="token" style="color: #d73a49;">init</span><span class="token">(</span><span class="token">red:</span><span class="token"> r</span><span class="token" style="color: #032f62;">/255</span><span class="token" style="color: #005cc5;">.</span><span class="token" style="color: #032f62;">0, green: g/</span><span class="token" style="color: #005cc5;">255.0</span><span class="token">, </span><span class="token">blue:</span><span class="token"> b</span><span class="token" style="color: #d73a49;">/</span><span class="token" style="color: #005cc5;">255.0</span><span class="token">, </span><span class="token">alpha:</span><span class="token"> alpha</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> Generates a Hex string, from a current color value.</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> - Parameter includeAlpha: Boolean value indicating whether the alpha channel should be included in a hex string. Default is false.</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> - Returns: Hex color string, generated from a current color value.</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">func getHex</span><span class="token">(</span><span class="token">withAlpha includeAlpha</span><span class="token">: </span><span class="token" style="color: #005cc5;">Bool</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #005cc5;">false</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">-&gt;</span><span class="token"> </span><span class="token" style="color: #005cc5;">String</span><span class="token" style="color: #d73a49;">?</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #d73a49;">guard</span><span class="token"> </span><span class="token" style="color: #d73a49;">let</span><span class="token"> components </span><span class="token" style="color: #d73a49;">=</span><span class="token"> cgColor.components, components.</span><span class="token" style="color: #005cc5;">count</span><span class="token"> </span><span class="token" style="color: #d73a49;">&gt;=</span><span class="token"> </span><span class="token" style="color: #005cc5;">3</span><span class="token"> </span><span class="token" style="color: #d73a49;">else</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #d73a49;">return</span><span class="token"> </span><span class="token" style="color: #005cc5;">nil</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #d73a49;">let</span><span class="token"> r </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #005cc5;">Float</span><span class="token">(</span><span class="token">components</span><span class="token">[</span><span class="token" style="color: #005cc5;">0</span><span class="token">]</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #d73a49;">let</span><span class="token"> g </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #005cc5;">Float</span><span class="token">(</span><span class="token">components</span><span class="token">[</span><span class="token" style="color: #005cc5;">1</span><span class="token">]</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #d73a49;">let</span><span class="token"> b </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #005cc5;">Float</span><span class="token">(</span><span class="token">components</span><span class="token">[</span><span class="token" style="color: #005cc5;">2</span><span class="token">]</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #d73a49;">let</span><span class="token"> a </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #005cc5;">Float</span><span class="token">(</span><span class="token">components.</span><span class="token" style="color: #005cc5;">count</span><span class="token"> </span><span class="token" style="color: #d73a49;">&gt;=</span><span class="token"> </span><span class="token" style="color: #005cc5;">4</span><span class="token"> </span><span class="token" style="color: #d73a49;">?</span><span class="token"> components</span><span class="token">[</span><span class="token" style="color: #005cc5;">3</span><span class="token">]</span><span class="token"> </span><span class="token" style="color: #d73a49;">:</span><span class="token"> </span><span class="token" style="color: #005cc5;">1</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #d73a49;">if</span><span class="token"> includeAlpha </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #d73a49;">return</span><span class="token"> </span><span class="token" style="color: #005cc5;">String</span><span class="token">(</span><span class="token">format:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">#%02lX%02lX%02lX%02lX</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">, </span><span class="token">lroundf(</span><span class="token">r </span><span class="token" style="color: #d73a49;">*</span><span class="token"> </span><span class="token" style="color: #005cc5;">255</span><span class="token">)</span><span class="token">, </span><span class="token">lroundf(</span><span class="token">g </span><span class="token" style="color: #d73a49;">*</span><span class="token"> </span><span class="token" style="color: #005cc5;">255</span><span class="token">)</span><span class="token">, </span><span class="token">lroundf(</span><span class="token">b </span><span class="token" style="color: #d73a49;">*</span><span class="token"> </span><span class="token" style="color: #005cc5;">255</span><span class="token">)</span><span class="token">, </span><span class="token">lroundf(</span><span class="token">a </span><span class="token" style="color: #d73a49;">*</span><span class="token"> </span><span class="token" style="color: #005cc5;">255</span><span class="token">)</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token">}</span><span class="token"> </span><span class="token" style="color: #d73a49;">else</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">            </span><span class="token" style="color: #d73a49;">return</span><span class="token"> </span><span class="token" style="color: #005cc5;">String</span><span class="token">(</span><span class="token">format:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">#%02lX%02lX%02lX</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">, </span><span class="token">lroundf(</span><span class="token">r </span><span class="token" style="color: #d73a49;">*</span><span class="token"> </span><span class="token" style="color: #005cc5;">255</span><span class="token">)</span><span class="token">, </span><span class="token">lroundf(</span><span class="token">g </span><span class="token" style="color: #d73a49;">*</span><span class="token"> </span><span class="token" style="color: #005cc5;">255</span><span class="token">)</span><span class="token">, </span><span class="token">lroundf(</span><span class="token">b </span><span class="token" style="color: #d73a49;">*</span><span class="token"> </span><span class="token" style="color: #005cc5;">255</span><span class="token">)</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-181"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-179">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-180'
	>
	Need to remove insets from your <em>UITextView</em>? We got you covered.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-183"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-swift github-light" data-language="swift" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">public</span><span class="token"> </span><span class="token" style="color: #d73a49;">extension</span><span class="token"> </span><span class="token" style="color: #6f42c1;">UITextView</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #6a737d;">///</span><span class="token" style="color: #6a737d;"> Removes all insets from a textView, so it can act more like a label.</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">func removeAllInsets</span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        textContainer.</span><span class="token">lineFragmentPadding</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #005cc5;">0</span><span class="token">
</span></span><span class="line"><span class="token">        textContainerInset </span><span class="token" style="color: #d73a49;">=</span><span class="token"> .</span><span class="token">zero</span><span class="token">
</span></span><span class="line"><span class="token">        contentInset </span><span class="token" style="color: #d73a49;">=</span><span class="token"> .</span><span class="token">zero</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-186"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-184">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-185'
	>
	This is the biggest feature folder–for a reason. We love working on UI and strive to make user experience the best it can be, so focusing on improving the tools at our disposal is the least we can do.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-189"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-187">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-188'
	>
	Not our first&nbsp;rodeo</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-192"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-190">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-191'
	>
	If things metioned in this article have sparked your interest, you’ll maybe also want to take a peek inside our other open-source iOS stuff:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-195"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-193">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-194'
	>
	<li><strong><a href="https://github.com/infinum/iOS-VIPER-Xcode-Templates">VIPER Xcode templates</a></strong>–Our template generator used to quickly generate all files and structures needed for implementing VIPER app arhitecture.</li><li><strong><a href="https://github.com/infinum/FBAnnotationClustering">FBAnnotationClustering</a></strong>–A library for clustering map annotations in an easy and performant way, which also has an accompanying <a href="https://infinum.com/blog/a-blazingly-fast-open-source-algorithm-for-poi-clustering-on-ios/">blog post</a>.</li><li><strong><a href="https://github.com/infinum/Japx">Japx</a></strong>–A lightweight JSON:API parser that flattens complex <a href="https://jsonapi.org">JSON:API</a> structure and turns it into simple JSON and vice versa.</li><li><strong><a href="https://github.com/infinum/iOS-prince-of-versions">Prince of Versions</a></strong>–A library used for easier versioning of your applications, allowing you to prompt your users to update the app to the newest version.</li><li><strong><a href="https://github.com/infinum/iOS-Loggie">Loggie</a></strong>–Used for capturing all HTTP/S requests the app makes and showing them in a simple table view, enabling easier API debugging.</li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-198"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-196">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-197'
	>
	Your contributions and support is what keeps them evolving as iOS evolves, and we hope that it will continue to be the case.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-201"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-199">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-200'
	>
	Go nuts with it</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-204"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-202">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-203'
	>
	We hope all of these are going to be helpful to you. If you have any suggestions of your own, feel free to open a PR by following steps detailed <a href="https://github.com/infinum/iOS-Nuts-And-Bolts#adding-a-new-feature">here</a>. We’re always looking forward to learning new things, and can’t wait to see wait to see what other tips &amp; tricks our community can come up with.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-207"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-205">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-206'
	>
	Until next time, happy coding!</p></div>	</div>
</div>
</div>		</div>
	</div><p>The post <a href="https://infinum.com/blog/repository-full-of-our-best-practices-in-ios-development/">A Repository Full of Our Best Practices in iOS Development</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</content:encoded>
			</item>
		
	</channel>
</rss>