<?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>Top 10 Most Useful iOS Libraries in 2020 | Infinum</title>
		<atom:link href="https://infinum.com/blog/top-10-most-useful-ios-libraries/feed/" rel="self" type="application/rss+xml" />
		<link>https://infinum.com/blog/top-10-most-useful-ios-libraries/</link>
		<description>Building digital products</description>
		<lastBuildDate>Fri, 10 Apr 2026 14:51:20 +0000</lastBuildDate>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>

					<item>
				<image>
					<url>7941https://infinum.com/uploads/2020/05/top-10-most-useful-iOS-libraries-0.webp</url>
				</image>
				<title>Top 10 Most Useful iOS Libraries in 2020</title>
				<link>https://infinum.com/blog/top-10-most-useful-ios-libraries/</link>
				<pubDate>Wed, 20 May 2020 17:36:00 +0000</pubDate>
				<dc:creator>Goran Brlas</dc:creator>
				<guid isPermaLink="false">https://infinum.com/the-capsized-eight/top-10-most-useful-ios-libraries/</guid>
				<description>
					<![CDATA[<p>A 2020 list of the top 10 libraries every iOS developer should know about, fresh off the press.</p>
<p>The post <a href="https://infinum.com/blog/top-10-most-useful-ios-libraries/">Top 10 Most Useful iOS Libraries in 2020</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</description>
				<content:encoded>
					<![CDATA[<div
	class="wrapper"
	data-id="es-293"
	 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'
	>
	Nearly five years ago, we published an article listing the<a href="https://infinum.com/blog/top-10-ios-swift-libraries-every-ios-developer-should-know-about/"> top 10 libraries every iOS developer should know about</a>.</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'
	>
	The article provided a great starting point for developers looking to increase their productivity and avoid reinventing the wheel.</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'
	>
	Turns out it was a highly searched topic, and the blog post remained relevant a lot longer than we expected.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-106"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="blockquote block-blockquote__blockquote" data-id="es-102">
	
	<div class="blockquote__content">
		<i
	class="icon blockquote__icon icon--size-16 icon--scale-100"
	 aria-hidden='true' data-name='blockquote-24' data-id='es-103'>
	<svg fill='none' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path clip-rule='evenodd' d='m12 24c6.6274 0 12-5.3726 12-12 0-2.79685-.9568-5.37021-2.561-7.41062-.581.22951-1.0832.60583-1.5069 1.12898-.5132.60844-.7698 1.41969-.7698 2.43375v.07605h2.5789v5.59004h-5.6197v-5.01962c0-1.11547.154-2.06616.4619-2.85205.3336-.81125.757-1.48307 1.2702-2.01545.528-.52161 1.1175-.92155 1.7687-1.1998-2.0728-1.70651-4.7279-2.73128-7.6223-2.73128-6.62742 0-12 5.37258-12 12 0 6.6274 5.37258 12 12 12zm-3.53811-18.05347c-.30793.78589-.46189 1.73658-.46189 2.85205v5.01962h5.6197v-5.59004h-2.5789v-.07605c0-1.01406.2566-1.82531.7698-2.43375.5389-.63379 1.1804-1.05209 1.9245-1.2549v-2.28164c-.7441.07605-1.4626.25351-2.1555.53238-.6928.27887-1.3086.68449-1.84752 1.21688-.51321.53238-.9366 1.2042-1.27019 2.01545z' fill='currentColor' fill-rule='evenodd'/></svg></i><p	class='typography typography--size-36-text js-typography blockquote__quote'
	data-id='es-104'
	>
	With changes introduced in every new iOS release, our development needs have changed as well, resulting in rethinking which libraries we use.</p>
		<div class="blockquote__caption-wrap">
					</div>
	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-109"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-107">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-108'
	>
	Some of them listed in that article have stood the test of time and are making a comeback here, but there are also some newcomers which make our day-to-day programming lives easier.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-112"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-110">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-111'
	>
	With great libraries comes great responsibility</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-115"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-113">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-114'
	>
	Before we actually start going through the list, I’d like to bring up an important disclaimer – <strong>use third-party libraries responsibly</strong>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-118"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-116">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-117'
	>
	Be sure to check whether the libraries you’re going to use are actively maintained and supported.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-121"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-119">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-120'
	>
	Working on a project a year or two down the line could prove to be troublesome if at some point it stops compiling because of a Swift or iOS change that breaks used libraries.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-124"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-122">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-123'
	>
	Also, <strong><em>please</em></strong>, don’t import libraries in your projects just for the sake of it if you’re only going to use a very small part of that library. A great quote I heard at one recent meetup comes to mind here: <em>”Don’t use an excavator where a shovel would suffice.”</em></p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-127"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-125">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-126'
	>
	Now that we’ve covered the disclaimer part, I’d also like to point out that this list was compiled and ordered by looking at <a href="https://infinum.com/work/">our recent projects</a> and needs, and does not reflect any official download numbers or rankings that could be found online.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-130"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-128">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-129'
	>
	Your mileage may vary depending on your project’s domain, but hopefully, you’ll find something of use here as well.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-133"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-131">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-132'
	>
	Top 10 most useful iOS libraries in 2020</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-136"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-134">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-135'
	>
	1. <a href="https://github.com/Alamofire/Alamofire">Alamofire</a></h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-139"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-137">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-138'
	>
	Alamofire is an elegant and composable way to interface with HTTP network requests. It builds on top of Apple’s <a href="https://developer.apple.com/documentation/foundation/url_loading_system/">URL Loading System</a> provided by the Foundation framework. At the core of the system are <em>URLSession</em> and <em>URLSessionTask</em> subclasses.</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-paragraph" data-id="es-140">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-141'
	>
	Alamofire wraps these APIs, and many others, in an easy-to-use interface and provides a variety of functionality necessary for modern application development using HTTP networking.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-144"
	 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">AF
</span></span><span class="line"><span class="token">    .</span><span class="token">request(</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">https://your.api.url</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">    .</span><span class="token">validate(</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">    .</span><span class="token">responseDecodable(</span><span class="token">of:</span><span class="token"> SomeDecodableObject.</span><span class="token" style="color: #d73a49;">self</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token">(</span><span class="token">response</span><span class="token">)</span><span class="token"> </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;">guard</span><span class="token"> </span><span class="token" style="color: #d73a49;">let</span><span class="token"> object </span><span class="token" style="color: #d73a49;">=</span><span class="token"> response.</span><span class="token" style="color: #005cc5;">value</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 class="token" style="color: #d73a49;">return</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;">print</span><span class="token">(</span><span class="token">object</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> Your object, decoded and ready to use.</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></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-147"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-145">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-146'
	>
	From top to bottom, you request the endpoint, validate the response by ensuring the response returned an HTTP status code in the range 200–299 and decode the response into your data model. Easy peasy.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-150"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-148">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-149'
	>
	2. <a href="https://github.com/ReactiveX/RxSwift">RxSwift</a></h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-153"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-151">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-152'
	>
	This is a Swift version of <a href="https://github.com/Reactive-Extensions/Rx.NET">Rx</a>. It tries to port as many concepts from the original version as possible, but some of them were adapted for more pleasant and performant integration with iOS/macOS environment.</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-paragraph" data-id="es-154">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-155'
	>
	Like the original Rx, its intention is to enable easy composition of asynchronous operations and event/data streams. KVO observing, async operations, and streams are all unified under the abstraction of sequence. This is the reason why Rx is so simple, elegant, and powerful.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-159"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-157">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-158'
	>
	Here’s a simple example of how RxSwift can be used to create a logic for enabling a login button that checks two things – whether the username and password are both entered, and if the password is of appropriate minimum length.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-161"
	 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;">let</span><span class="token"> name </span><span class="token" style="color: #d73a49;">=</span><span class="token"> nameTextField.</span><span class="token">rx</span><span class="token">.</span><span class="token" style="color: #005cc5;">text</span><span class="token">.</span><span class="token">asDriver(</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">let</span><span class="token"> password </span><span class="token" style="color: #d73a49;">=</span><span class="token"> passwordTextField.</span><span class="token">rx</span><span class="token">.</span><span class="token" style="color: #005cc5;">text</span><span class="token">.</span><span class="token">asDriver(</span><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;">let</span><span class="token"> isEnabled </span><span class="token" style="color: #d73a49;">=</span><span class="token"> Driver
</span></span><span class="line"><span class="token">    .</span><span class="token">combineLatest(</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token">name</span><span class="token">,
</span></span><span class="line"><span class="token">        </span><span class="token">password
</span></span><span class="line"><span class="token">    </span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token" style="color: #d73a49;">!</span><span class="token" style="color: #005cc5;">$0</span><span class="token">.</span><span class="token" style="color: #005cc5;">isEmpty</span><span class="token"> </span><span class="token" style="color: #d73a49;">&amp;&amp;</span><span class="token"> </span><span class="token" style="color: #005cc5;">$1</span><span class="token">.</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;">6</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">isEnabled
</span></span><span class="line"><span class="token">    .</span><span class="token">drive(</span><span class="token">loginButton.</span><span class="token">rx</span><span class="token">.</span><span class="token">isEnabled</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">    .</span><span class="token">disposed(</span><span class="token">by:</span><span class="token"> disposeBag</span><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-164"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-162">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-163'
	>
	This is just scratching RxSwift’s/RxCocoa’s surface, but you can already see how it can make your life easier. RxSwift has a steeper learning curve than most libraries you could include in your projects, but once you get the hang of it, you’ll be thankful you did and will probably never look back.</p></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'
	>
	Note – <a href="https://developer.apple.com/documentation/combine">Combine</a> will probably at some point going to slowly start sunsetting RxSwift, but since it requires iOS 13 as a minimum OS version, that is still a couple of years away, and RxSwift will prevail until then.</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'
	>
	3. <a href="https://github.com/onevcat/Kingfisher">Kingfisher</a></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'
	>
	Kingfisher is a powerful, pure-Swift library for downloading and caching images from the web. It will download the image from url, send it to both memory cache and disk cache, and display it in an UIImageView, NSImageView, NSButton, or UIButton. When you try to retrieve an image with the same URL later, the image will be retrieved from the cache and shown immediately.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-175"
	 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;"> Basic version</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">let</span><span class="token"> url </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token">URL(</span><span class="token">string:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">https://example.com/image.png</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">imageView.</span><span class="token">kf</span><span class="token">.</span><span class="token">setImage(</span><span class="token">with:</span><span class="token"> url</span><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;"> SwiftUI version</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token" style="color: #6f42c1;">KingfisherSwiftUI</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">var body:</span><span class="token"> </span><span class="token" style="color: #d73a49;">some</span><span class="token"> View </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">KFImage(</span><span class="token">URL(</span><span class="token">string:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">https://example.com/image.png</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">)</span><span class="token" style="color: #d73a49;">!</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-178"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-176">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-177'
	>
	It also provides many powerful additional options such showing a system indicator and a placeholder image while downloading, built-in updating transitions, extensible image processing, formatting, and much more. A must-have if you’re working with remote images!</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-181"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-179">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-180'
	>
	4. <a href="https://github.com/airbnb/lottie-ios">Lottie</a></h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-184"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-182">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-183'
	>
	Let’s be honest, animations in an application make a huge difference. They grasp your user’s attention and steer them through your app’s flow, all the while providing a fun and memorable experience. Since creating animations by hand using <em>UIView</em> or <em>CoreGraphics</em> animations can prove to be quite challenging and time-consuming, Lottie provides us with a perfect tool to incorporate desinger creations into our applications.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-187"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-185">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-186'
	>
	Lottie loads and renders animations and vectors exported in the bodymovin JSON format. Bodymovin JSON can be created and exported from After Effects with <a href="https://github.com/bodymovin/bodymovin">bodymovin</a>, Sketch with <a href="https://github.com/buba447/Lottie-Sketch-Export">Lottie Sketch Export</a>, and from <a href="https://www.haiku.ai/">Haiku</a>.</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-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;">override</span><span class="token"> </span><span class="token">func viewDidLoad</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: #005cc5;">super</span><span class="token">.</span><span class="token">viewDidLoad(</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">startAnimating(</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">func startAnimating</span><span class="token">(</span><span class="token">)</span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    animationView.</span><span class="token">setAnimation(</span><span class="token">named:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">bird_flying</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> &quot;bird_flying&quot; is an example animation that can be found here: https://lottiefiles.com/17655-bird-flying</span><span class="token">
</span></span><span class="line"><span class="token">    animationView.</span><span class="token">play(</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-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'
	>
	After importing Lottie into your project, this is all the code needed to add a beautiful animation to your app. Quite a timesaver.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-195"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-193">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-194'
	>
	5. <a href="https://github.com/realm/SwiftLint">SwiftLint</a></h3></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'
	>
	SwiftLint is a tool used to enforce Swift style and conventions, loosely based on <a href="https://github.com/github/swift-style-guide">GitHub’s Swift Style Guide</a>.</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-paragraph" data-id="es-199">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-200'
	>
	SwiftLint hooks into <a href="http://clang.llvm.org/">Clang</a> and <a href="http://www.jpsim.com/uncovering-sourcekit">SourceKit</a> and uses the <a href="http://clang.llvm.org/docs/IntroductionToTheClangAST.html">AST</a> representation of your source files for more accurate results.</p></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'
	>
	Its <a href="https://realm.github.io/SwiftLint/rule-directory.html">rule list</a> is quite extensive and covers pretty much everything you would want to keep track of in a well-maintained project. It also has the option to disable rules per file or even per line, but use those responsibly. Silencing a warning about a 700-line file or a too long method is maybe not the best way to go around doing things.</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-heading" data-id="es-205">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-206'
	>
	6. <a href="https://github.com/SnapKit/SnapKit">SnapKit</a></h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-210"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-208">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-209'
	>
	SnapKit is an Auto Layout library that simplifies writing auto layout in code with a minimal amount of code needed without losing readability.<br />
It is type-safe by design to help you avoid programming errors while coding your user interface.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-212"
	 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;">let</span><span class="token"> box </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token">UIView(</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">let</span><span class="token"> container </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token">UIView(</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">container.</span><span class="token">addSubview(</span><span class="token">box</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">box.</span><span class="token">snp</span><span class="token">.</span><span class="token">makeConstraints</span><span class="token"> </span><span class="token">{</span><span class="token"> make </span><span class="token" style="color: #d73a49;">in</span><span class="token">
</span></span><span class="line"><span class="token">    make.</span><span class="token" style="color: #005cc5;">size</span><span class="token">.</span><span class="token">equalTo(</span><span class="token" style="color: #005cc5;">50</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">    make.</span><span class="token">center</span><span class="token">.</span><span class="token">equalTo(</span><span class="token">container</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-215"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-213">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-214'
	>
	It’s also very powerful when it comes to views whose constraints are updated frequently. Remaking constraints is much more pleasant than dealing with Auto Layout by hand:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-217"
	 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">func updateBoxSize</span><span class="token">(</span><span class="token">to size</span><span class="token">: </span><span class="token">CGFloat</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    box.</span><span class="token">snp</span><span class="token">.</span><span class="token">remakeConstraints</span><span class="token"> </span><span class="token">{</span><span class="token"> make </span><span class="token" style="color: #d73a49;">in</span><span class="token">
</span></span><span class="line"><span class="token">        make.</span><span class="token" style="color: #005cc5;">size</span><span class="token">.</span><span class="token">equalTo(</span><span class="token">size
</span></span><span class="line"><span class="token">    }
</span></span><span class="line"><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-220"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-218">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-219'
	>
	7. <a href="https://github.com/SwiftyBeaver/SwiftyBeaver">SwiftyBeaver</a></h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-223"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-221">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-222'
	>
	SwiftyBeaver is a colorful, flexible and lightweight library enabling easier logging during the development of your applications. Gone are the days of bland console outputs; using this library makes finding out what went wrong a breeze.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-225"
	 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;">let</span><span class="token"> log </span><span class="token" style="color: #d73a49;">=</span><span class="token"> SwiftyBeaver.</span><span class="token" style="color: #d73a49;">self</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">let</span><span class="token"> console </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token">ConsoleDestination(</span><span class="token">)</span><span class="token">  </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> log to Xcode Console</span><span class="token">
</span></span><span class="line"><span class="token">log.</span><span class="token">addDestination(</span><span class="token">console</span><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;"> Now let’s log!</span><span class="token">
</span></span><span class="line"><span class="token">log.</span><span class="token">verbose(</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">not so important</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">)</span><span class="token">  </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> prio 1, VERBOSE in silver</span><span class="token">
</span></span><span class="line"><span class="token">log.</span><span class="token">debug(</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">something to debug</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">)</span><span class="token">  </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> prio 2, DEBUG in green</span><span class="token">
</span></span><span class="line"><span class="token">log.</span><span class="token">info(</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">a nice information</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">)</span><span class="token">   </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> prio 3, INFO in blue</span><span class="token">
</span></span><span class="line"><span class="token">log.</span><span class="token">warning(</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">oh no, that won’t be good</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">)</span><span class="token">  </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> prio 4, WARNING in yellow</span><span class="token">
</span></span><span class="line"><span class="token">log.</span><span class="token" style="color: #005cc5;">error</span><span class="token">(</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">ouch, an error did occur!</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">)</span><span class="token">  </span><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> prio 5, ERROR in red</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-228"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-226">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-227'
	>
	8. <a href="https://github.com/kishikawakatsumi/KeychainAccess">KeychainAccess</a></h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-231"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-229">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-230'
	>
	KeychainAccess is a simple Swift wrapper for Keychain that works on iOS and macOS. It makes using Keychain APIs extremely easy and much more palatable to use in Swift.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-234"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-232">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-233'
	>
	Saving data to the Keychain and retrieving it has never been easier:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-236"
	 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;"> Save to the keychain</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">let</span><span class="token"> valueToSave </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">Important data</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token">Keychain(</span><span class="token">)</span><span class="token">.</span><span class="token" style="color: #005cc5;">set</span><span class="token">(</span><span class="token">valueToSave</span><span class="token">, </span><span class="token">key:</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">key</span><span class="token" style="color: #032f62;">&quot;</span><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;"> Get from keychain</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">let</span><span class="token"> savedValue </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #d73a49;">try</span><span class="token" style="color: #d73a49;">?</span><span class="token"> </span><span class="token">Keychain(</span><span class="token">)</span><span class="token">.</span><span class="token">get(</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">key</span><span class="token" style="color: #032f62;">&quot;</span><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-239"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-237">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-238'
	>
	9. <a href="https://github.com/HeroTransitions/Hero">Hero</a></h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-242"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-240">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-241'
	>
	Hero is a library for building iOS view controller transitions. It provides a declarative layer on top of the UIKit’s cumbersome transition APIs — making custom transitions an easy task for us.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-245"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-243">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-244'
	>
	It works similar to Keynote’s Magic Move. It checks the <em>heroID</em> property on all source and destination views. Every matched view pair is then automatically transitioned from its old state to its new state.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-248"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-246">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-247'
	>
	Hero can also construct animations for unmatched views. It is easy to define these animations via the heroModifiers property. Hero will run these animations alongside the Magic Move animations. All of these animations can be interactively controlled by user gestures.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-250"
	 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;"> First viewController - VC1</span><span class="token">
</span></span><span class="line"><span class="token">redView.</span><span class="token">hero</span><span class="token">.</span><span class="token">id</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">ironMan</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">blackView.</span><span class="token">hero</span><span class="token">.</span><span class="token">id</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">batMan</span><span class="token" style="color: #032f62;">&quot;</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;"> Second viewController - VC2</span><span class="token">
</span></span><span class="line"><span class="token" style="color: #005cc5;">self</span><span class="token">.</span><span class="token">hero</span><span class="token">.</span><span class="token">isEnabled</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #005cc5;">true</span><span class="token">
</span></span><span class="line"><span class="token">redView.</span><span class="token">hero</span><span class="token">.</span><span class="token">id</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">ironMan</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">blackView.</span><span class="token">hero</span><span class="token">.</span><span class="token">id</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">batMan</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">whiteView.</span><span class="token">hero</span><span class="token">.</span><span class="token">modifiers</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> [.</span><span class="token">translate(</span><span class="token">y:</span><span class="token"> </span><span class="token" style="color: #005cc5;">100</span><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-253"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-251">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-252'
	>
	As you can see, Hero does a lot of heavy lifting in order to provide us with a simple API to create powerful animations.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-256"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-254">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-255'
	>
	10. <a href="https://github.com/AliSoftware/OHHTTPStubs">OHTTPStubs</a></h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-259"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-257">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-258'
	>
	OHTTPStubs is a library designed to stub network requests by using method swizzling. It works with <em>NSURLConnection</em>, <em>NSURLSession</em>, <em>AFNetworking</em>, <em>Alamofire,</em> or any networking framework that uses Cocoa’s URL Loading System.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-261"
	 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">stub(</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">condition:</span><span class="token"> </span><span class="token">{</span><span class="token"> </span><span class="token">(</span><span class="token">request:</span><span class="token"> URLRequest</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" style="color: #d73a49;">in</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;"> check whether this api call should be mocked by using the response closure</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;"> return false if it shouldn’t</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;">true</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">response:</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;">-&gt;</span><span class="token"> OHHTTPStubsResponse </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;">let</span><span class="token"> path </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">...path_to_your_file.json</span><span class="token" style="color: #032f62;">&quot;</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">fixture(</span><span class="token">filePath:</span><span class="token"> path</span><span class="token">, </span><span class="token">status:</span><span class="token"> </span><span class="token" style="color: #005cc5;">200</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-264"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-262">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-263'
	>
	This library comes in handy in several situations:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-267"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-265">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-266'
	>
	<li>mocking different API responses while the app is in development to check if our UI handles every case correctly,</li><li>easier integration testing by providing baked in responses to your testing suite,</li><li>implementing a demo mode inside your application that doesn’t reach the actual server, but uses baked-in responses.</li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-270"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-268">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-269'
	>
	I’ve written about implementing such a demo mode in <a href="https://infinum.com/blog/easy-way-to-implement-demo-mode-in-ios-apps/">one of my previous articles</a>, so be sure to check it out if you’d like to learn more about it.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-273"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-271">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-272'
	>
	Honorable mentions</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-276"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-274">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-275'
	>
	There are a few more libraries we use in most of our projects, but since these are our own open-source projects it didn’t seem fitting that they steal the spotlight of other popular third-party solutions.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-279"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-277">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-278'
	>
	However, since they could prove to be of use to you, we should also list them here as well:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-282"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-280">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-281'
	>
	<li><a href="https://github.com/infinum/iOS-prince-of-versions">Prince of Versions</a> – used for easier versioning of your applications, allowing you to prompt your users to update the app to the newest version.</li><li><a href="https://github.com/infinum/iOS-Loggie">Loggie</a> – used for capturing all HTTP/S requests the app makes and showing them in a simple table view, enabling easier API debugging.</li><li><a href="https://github.com/infinum/Japx">Japx</a> – lightweight <a href="https://jsonapi.org/">JSON:API</a> parser that flattens complex JSON:API structure and turns it into simple JSON and vice versa.</li><li><a href="https://github.com/infinum/Locker">Locker</a> – a lightweight library for handling sensitive data (<em>String</em> type) in Keychain using iOS Biometric features.</li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-285"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-283">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-284'
	>
	While we’re at it, you can also check out <a href="https://github.com/infinum/iOS-Nuts-And-Bolts">Nuts &amp; Bolts</a>, our repo containing a centralized collection of commonly shared and reused code throughout the Infinum iOS team.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-288"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-286">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-287'
	>
	What’s your take on our list?</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-291"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-289">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-290'
	>
	Do you agree with us? Got some other libraries you find useful that you would like to share? Leave a comment or contact us on social media. We’re eager to learn about new things and interesting ways of easing common iOS pain points.</p></div>	</div>
</div>
</div>		</div>
	</div><p>The post <a href="https://infinum.com/blog/top-10-most-useful-ios-libraries/">Top 10 Most Useful iOS Libraries in 2020</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</content:encoded>
			</item>
		
	</channel>
</rss>