PageSourceSearch

https://nemecek.be/blog/swift-and-ios

html nemecek.be collected 2026-10-02 10:10:01 UTC 99,005 bytes, 2,981 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3<head>
4    <meta charset="UTF-8">
5    <meta name="viewport" content="width=device-width">
6    <meta name="keywords" content="ios, developer, swift, mobile development, tutorials, blog"/>
7    <meta name="description" content="Personal site of Filip Němeček with blog, selected projects, apps and more"/>
8    <meta name="subject" content="Blog about iOS & Swift, Django and some other stuff">
9    <meta name="language" content="EN">
10    <meta name="robots" content="index,follow"/>
11    <meta name="author" content="Filip Němeček">
12
13    <link rel="alternate" title="RSS - Swift & iOS" href="/blog/feed/rss" type="application/rss+xml">
14    <link rel="alternate" title="RSS - All" href="/blog/feed/all-rss" type="application/rss+xml">
15    <link rel="alternate" title="RSS - Django" href="/blog/feed/django" type="application/rss+xml">
16
17    <title>
18        
19    Swift &amp; iOS | Filip Němeček
20
21    </title>
22
23    
24    <link rel="stylesheet" type="text/css" href="/static/css/styles.690df6c3cdb1.css">
25
26
27    
28        <link rel="shortcut icon" type="image/png" href="/static/favicon.1533c9bfcf8d.ico"/>
29    
30
31
32    
33    <meta property="og:title" content="Swift &amp; iOS">
34
35    <meta property="og:url" content="https://nemecek.be/blog/swift-and-ios">
36
37    <meta name="twitter:card" content="summary"/>
38    <meta name="twitter:site" content="@nemecek_f"/>
39    <meta name="twitter:title" content="Swift &amp; iOS"/>
40
41
42    <link rel="stylesheet" type="text/css" href="/static/css/dark_mode.6b69f8fdcf7a.css">
43</head>
44<body>
45
46    
47    <nav>
48        <div class="nav-content">
49            <a href="/" >Filip&nbsp;Němeček's&nbsp;Blog</a>
50
51            <span class="icon-links">
52                <a class="icon" href="https://github.com/nemecek-filip" target="_blank"><img class="social-icon"
53                                                                                             src="/static/images/github_icon.6861c11c8159.png"
54                                                                                             alt="GitHub logo"></a>
55            <a class="icon" href="https://iosdev.space/@nemecek_f" target="_blank"><img class="social-icon"
56                                                                                      src="/static/images/mastodon-icon.4cf2ad8821ef.png"
57                                                                                      alt="Mastodon logo"></a>
58            </span>
59
60            
61                <form method="get" action="/search/" id="search-form">
62                    <input type="search" name="query" placeholder="Search..." id="search-input"
63                           class="textbox" required value="">
64                    <input title="Search" value="Go" type="submit" class="button">
65
66                </form>
67            
68
69
70        </div>
71
72    </nav>
73
74
75<div class="container">
76    
77
78    <h1 class="cards-padding" style="margin-bottom: 0px;">Swift &amp; iOS</h1>
79    <p class="cards-padding" style="margin-top: 10px">143 posts</p>
80
81    <section class="posts">
82    
83        
84            <div class="post">
85    <div class="post-inner">
86        
87            <p class="series-annotation">App promotion</p>
88        
89
90        <h2 class="heading"><a href="/blog/214/new-friendly-place-to-share-updates-about-your-indie-apps">New friendly place to share updates about your indie apps</a></h2>
91
92        <p class="annotation text-secondary">Post on reddit without having your posts immediately removed.</p>
93
94        
95            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
96    <span class="badge"
97          style="background-color:#f35736">Swift &amp; iOS
98        
99        </span>
100</a>
101        
102    </div>
103</div>
104        
105            <div class="post">
106    <div class="post-inner">
107        
108
109        <h2 class="heading"><a href="/blog/209/swiftui-kfimage-notes">SwiftUI KFImage notes</a></h2>
110
111        <p class="annotation text-secondary">Just a few snippets to reference later when using Kingfisher library.</p>
112
113        
114            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
115    <span class="badge"
116          style="background-color:#f35736">Swift &amp; iOS
117        
118        </span>
119</a>
120        
121    </div>
122</div>
123        
124            <div class="post">
125    <div class="post-inner">
126        
127
128        <h2 class="heading"><a href="/blog/208/getting-view-size-in-swiftui-without-geometryreader">Getting view size in SwiftUI without GeometryReader</a></h2>
129
130        <p class="annotation text-secondary">We can avoid GeometryReader now! New modifier supports iOS 16+.</p>
131
132        
133            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
134    <span class="badge"
135          style="background-color:#f35736">Swift &amp; iOS
136        
137        </span>
138</a>
139        
140    </div>
141</div>
142        
143            <div class="post">
144    <div class="post-inner">
145        
146
147        <h2 class="heading"><a href="/blog/207/the-weirdest-core-data-crash-i-have-seen">The weirdest Core Data crash I have seen</a></h2>
148
149        <p class="annotation text-secondary">Careful how you name your attributes...</p>
150
151        
152            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
153    <span class="badge"
154          style="background-color:#f35736">Swift &amp; iOS
155        
156        </span>
157</a>
158        
159    </div>
160</div>
161        
162            <div class="post">
163    <div class="post-inner">
164        
165
166        <h2 class="heading"><a href="/blog/206/how-to-support-tinted-home-screen-widgets-in-ios-18">
166How to support tinted home screen widgets in iOS 18</a></h2>
167
168        <p class="annotation text-secondary">Marking views to be rendered with colors, handling images and more.</p>
169
170        
171            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
172    <span class="badge"
173          style="background-color:#f35736">Swift &amp; iOS
174        
175        </span>
176</a>
177        
178    </div>
179</div>
180        
181            <div class="post">
182    <div class="post-inner">
183        
184
185        <h2 class="heading"><a href="/blog/205/my-experience-with-the-blinkist-trial-big-boost">My experience with the “Blinkist trial”: Big boost</a></h2>
186
187        <p class="annotation text-secondary">Quite a lot higher trial start rate with lower conversion percentage.</p>
188
189        
190            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
191    <span class="badge"
192          style="background-color:#f35736">Swift &amp; iOS
193        
194        </span>
195</a>
196        
197    </div>
198</div>
199        
200            <div class="post">
201    <div class="post-inner">
202        
203            <p class="series-annotation">SwiftUI</p>
204        
205
206        <h2 class="heading"><a href="/blog/202/fixing-weird-shadow-animation-glitch-in-swiftui">Fixing weird shadow animation glitch in SwiftUI</a></h2>
207
208        <p class="annotation text-secondary">My “glow” animation started going wrong when switching tabs in a tab bar.</p>
209
210        
211            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
212    <span class="badge"
213          style="background-color:#f35736">Swift &amp; iOS
214        
215        </span>
216</a>
217        
218    </div>
219</div>
220        
221            <div class="post">
222    <div class="post-inner">
223        
224
225        <h2 class="heading"><a href="/blog/201/how-to-update-widgets-for-standby-mode">How to update widgets for StandBy mode</a></h2>
226
227        <p class="annotation text-secondary">Short blog post about supporting StandBy mode introduced in iOS 17.</p>
228
229        
230            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
231    <span class="badge"
232          style="background-color:#f35736">Swift &amp; iOS
233        
234        </span>
235</a>
236        
237    </div>
238</div>
239        
240            <div class="post">
241    <div class="post-inner">
242        
243            <p class="series-annotation">UX Diary</p>
244        
245
246        <h2 class="heading"><a href="/blog/195/ux-diary-onboarding-without-onboarding">UX Diary: Onboarding without onboarding</a></h2>
247
248        <p class="annotation text-secondary">About an approach I took in &quot;GameWidgets&quot; to better onboarding users into the app.</p>
249
250        
251            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
252    <span class="badge"
253          style="background-color:#f35736">Swift &amp; iOS
254        
255        </span>
256</a>
257        
258    </div>
259</div>
260        
261            <div class="post">
262    <div class="post-inner">
263        
264
265        <h2 class="heading"><a href="/blog/192/hotfixing-widgets-for-ios-17-containerbackground-padding">Hotfixing widgets for iOS 17: containerBackground + padding</a></h2>
266
267        <p class="annotation text-secondary">How to fix the issue with background and extra padding.</p>
268
269        
270            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
271    <span class="badge"
272          style="background-color:#f35736">Swift &amp; iOS
273        
274        </span>
275</a>
276        
277    </div>
278</div>
279        
280            <div class="post">
281    <div class="post-inner">
282        
283
284        <h2 class="heading"><a href="/blog/189/wip-sharing-data-with-uiactivityviewcontroller-tips-tricks">Sharing data with UIActivityViewController - tips &amp; tricks</a></h2>
285
286        <p class="annotation text-secondary">All the tips and tricks I have discovered so far. Better previews, subtitles. PNG via AirDrop &amp; more.</p>
287
288        
289            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
290    <span class="badge"
291          style="background-color:#f35736">Swift &amp; iOS
292        
293        </span>
294</a>
295        
296    </div>
297</div>
298        
299            <div class="post">
300    <div class="post-inner">
301        
302
303        <h2 class="heading"><a href="/blog/187/how-to-implementing-shared-with-you-apis">
303How to: Implementing “Shared with You” APIs</a></h2>
304
305        <p class="annotation text-secondary">Short tutorial about adopting the Shared with You framework available in iOS 16.</p>
306
307        
308            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
309    <span class="badge"
310          style="background-color:#f35736">Swift &amp; iOS
311        
312        </span>
313</a>
314        
315    </div>
316</div>
317        
318            <div class="post">
319    <div class="post-inner">
320        
321
322        <h2 class="heading"><a href="/blog/186/the-weirdest-bugcrash-in-widgets">The weirdest bug/crash in widgets?</a></h2>
323
324        <p class="annotation text-secondary">Mysterious crash and ChatGPT to the rescue.</p>
325
326        
327            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
328    <span class="badge"
329          style="background-color:#f35736">Swift &amp; iOS
330        
331        </span>
332</a>
333        
334    </div>
335</div>
336        
337            <div class="post">
338    <div class="post-inner">
339        
340
341        <h2 class="heading"><a href="/blog/185/implementing-double-tap-tab-bar-to-scroll-to-top">Implementing “double tap tab bar to scroll to top”</a></h2>
342
343        <p class="annotation text-secondary">I got inspired by Ivory for Mastodon and implemented my solution in SwitchBuddy.</p>
344
345        
346            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
347    <span class="badge"
348          style="background-color:#f35736">Swift &amp; iOS
349        
350        </span>
351</a>
352        
353    </div>
354</div>
355        
356            <div class="post">
357    <div class="post-inner">
358        
359
360        <h2 class="heading"><a href="/blog/184/how-to-successfully-launch-app-on-product-hunt-balance-by-alexander-sandberg">How to successfully launch app on Product Hunt: Balance by Alexander Sandberg</a></h2>
361
362        <p class="annotation text-secondary">The story behind winning #1 Product of the Day and #3 Product of the Week.</p>
363
364        
365            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
366    <span class="badge"
367          style="background-color:#f35736">Swift &amp; iOS
368        
369        </span>
370</a>
371        
372    </div>
373</div>
374        
375            <div class="post">
376    <div class="post-inner">
377        
378            <p class="series-annotation">SwiftUI</p>
379        
380
381        <h2 class="heading"><a href="/blog/183/swiftui-tip-always-correct-corner-radius-for-subviews">SwiftUI Tip: Always correct corner radius for subviews</a></h2>
382
383        <p class="annotation text-secondary">Meet ContainerRelativeShape!</p>
384
385        
386            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
387    <span class="badge"
388          style="background-color:#f35736">Swift &amp; iOS
389        
390        </span>
391</a>
392        
393    </div>
394</div>
395        
396            <div class="post">
397    <div class="post-inner">
398        
399
400        <h2 class="heading"><a href="/blog/182/how-to-customize-share-sheet-content-for-airdrop">How to customize share sheet content for AirDrop</a></h2>
401
402        <p class="annotation text-secondary">Or other share destinations, like adding to a reading list.</p>
403
404        
405            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
406    <span class="badge"
407          style="background-color:#f35736">Swift &amp; iOS
408        
409        </span>
410</a>
411        
412    </div>
413</div>
414        
415            <div class="post">
416    <div class="post-inner">
417        
418
419        <h2 class="heading"><a href="/blog/181/how-to-allow-landscape-for-single-screen-in-your-uikit-app">How to allow landscape for single screen in your UIKit app</a></h2>
420
421        <p class="annotation text-secondary">Controlling device orientation without modifying the Info.plist or using “top view controller”.</p>
422
423        
424            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
425    <span class="badge"
426          style="background-color:#f35736">Swift &amp; iOS
427        
428        </span>
429</a>
430        
431    </div>
432</div>
433        
434            <div class="post">
435    <div class="post-inner">
436        
437
438        <h2 class="heading"><a href="/blog/180/how-to-combine-dynamic-type-and-monospaced-font">How to combine Dynamic Type and monospaced font</a></h2>
439
440        <p class="annotation text-secondary">This is a small tip for cases with countdown labels and similar UI.</p>
441
442        
443            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
444    <span class="badge"
445          style="background-color:#f35736">Swift &amp; iOS
446        
447        </span>
448</a>
449        
450    </div>
451</div>
452        
453            <div class="post">
454    <div class="post-inner">
455        
456
457        <h2 class="heading"><a href="/blog/178/the-day-my-app-got-thousands-of-downloads-and-in-app-unlocks">The day my app got thousands of downloads and in-app unlocks</a></h2>
458
459        <p class="annotation text-secondary">
459What happens when a quiet app gets almost a thousand new downloads, and in-app unlocks each hour?</p>
460
461        
462            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
463    <span class="badge"
464          style="background-color:#f35736">Swift &amp; iOS
465        
466        </span>
467</a>
468        
469    </div>
470</div>
471        
472            <div class="post">
473    <div class="post-inner">
474        
475
476        <h2 class="heading"><a href="/blog/174/adding-private-analytics-with-telemetrydeck-quick-start">Adding private analytics with TelemetryDeck: Quick Start</a></h2>
477
478        <p class="annotation text-secondary">Quick look at how to add and use TelemetryDeck SDK to your Swift app.</p>
479
480        
481            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
482    <span class="badge"
483          style="background-color:#f35736">Swift &amp; iOS
484        
485        </span>
486</a>
487        
488    </div>
489</div>
490        
491            <div class="post">
492    <div class="post-inner">
493        
494
495        <h2 class="heading"><a href="/blog/171/dynamic-island-and-live-activities-quick-start-tutorial">Dynamic Island (and Live Activities): Quick start tutorial</a></h2>
496
497        <p class="annotation text-secondary">All the steps you need to start creating your own Dynamic Island UIs!</p>
498
499        
500            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
501    <span class="badge"
502          style="background-color:#f35736">Swift &amp; iOS
503        
504        </span>
505</a>
506        
507    </div>
508</div>
509        
510            <div class="post">
511    <div class="post-inner">
512        
513            <p class="series-annotation">App promotion</p>
514        
515
516        <h2 class="heading"><a href="/blog/170/psa-ios-16-is-a-huge-opportunity-to-promote-your-app">PSA: iOS 16 is a huge opportunity to promote your app</a></h2>
517
518        <p class="annotation text-secondary">This may be obvious, but I still wanted to remind everyone.</p>
519
520        
521            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
522    <span class="badge"
523          style="background-color:#f35736">Swift &amp; iOS
524        
525        </span>
526</a>
527        
528    </div>
529</div>
530        
531            <div class="post">
532    <div class="post-inner">
533        
534            <p class="series-annotation">App promotion</p>
535        
536
537        <h2 class="heading"><a href="/blog/169/how-to-get-featured-on-the-app-store">How to get featured on the App Store</a></h2>
538
539        <p class="annotation text-secondary">According to devs who got features many times.</p>
540
541        
542            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
543    <span class="badge"
544          style="background-color:#f35736">Swift &amp; iOS
545        
546        </span>
547</a>
548        
549    </div>
550</div>
551        
552            <div class="post">
553    <div class="post-inner">
554        
555            <p class="series-annotation">App promotion</p>
556        
557
558        <h2 class="heading"><a href="/blog/168/press-releases-step-by-step-guide">Press Releases: Step-by-step guide</a></h2>
559
560        <p class="annotation text-secondary">Detailed how-to about sending your first app press release.</p>
561
562        
563            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
564    <span class="badge"
565          style="background-color:#f35736">Swift &amp; iOS
566        
567        </span>
568</a>
569        
570    </div>
571</div>
572        
573            <div class="post">
574    <div class="post-inner">
575        
576            <p class="series-annotation">App promotion</p>
577        
578
579        <h2 class="heading"><a href="/blog/166/does-your-app-need-a-press-kit">Does your app need a Press Kit?</a></h2>
580
581        <p class="annotation text-secondary">Should you put the time into creating a Press Kit? And how much energy?</p>
582
583        
584            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
585    <span class="badge"
586          style="background-color:#f35736">Swift &amp; iOS
587        
588        </span>
589</a>
590        
591    </div>
592</div>
593        
594            <div class="post">
595    <div class="post-inner">
596        
597            <p class="series-annotation">Compositional Layout</p>
598        
599
600        <h2 class="heading"><a href="/blog/164/how-to-add-swipe-actions-to-collection-view">How to add swipe actions to Collection View</a></h2>
601
602        <p class="annotation text-secondary">With the Compositional Layout list configuration this is fairly easy.<
602/p>
603
604        
605            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
606    <span class="badge"
607          style="background-color:#f35736">Swift &amp; iOS
608        
609        </span>
610</a>
611        
612    </div>
613</div>
614        
615            <div class="post">
616    <div class="post-inner">
617        
618            <p class="series-annotation">Compositional Layout</p>
619        
620
621        <h2 class="heading"><a href="/blog/163/how-to-create-a-list-with-compositional-layout">How to create a list with Compositional Layout</a></h2>
622
623        <p class="annotation text-secondary">The easiest way for creating standard list layouts with the new APIs available from iOS 14.</p>
624
625        
626            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
627    <span class="badge"
628          style="background-color:#f35736">Swift &amp; iOS
629        
630        </span>
631</a>
632        
633    </div>
634</div>
635        
636            <div class="post">
637    <div class="post-inner">
638        
639
640        <h2 class="heading"><a href="/blog/162/xcode-how-to-upload-build-with-different-bundle-id-to-testflight">Xcode: How to upload build with different Bundle ID to TestFlight</a></h2>
641
642        <p class="annotation text-secondary">When you need to really separate development backend from production one.</p>
643
644        
645            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
646    <span class="badge"
647          style="background-color:#f35736">Swift &amp; iOS
648        
649        </span>
650</a>
651        
652    </div>
653</div>
654        
655            <div class="post">
656    <div class="post-inner">
657        
658            <p class="series-annotation">WWDC 22</p>
659        
660
661        <h2 class="heading"><a href="/blog/161/how-to-use-uicalendarview-in-ios">How to use UICalendarView in iOS</a></h2>
662
663        <p class="annotation text-secondary">Look at setting up the proper calendar view with selections and customizations.</p>
664
665        
666            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
667    <span class="badge"
668          style="background-color:#f35736">Swift &amp; iOS
669        
670        </span>
671</a>
672        
673    </div>
674</div>
675        
676            <div class="post">
677    <div class="post-inner">
678        
679            <p class="series-annotation">WWDC 22</p>
680        
681
682        <h2 class="heading"><a href="/blog/160/how-to-use-live-text-api-in-your-ios-app">How to use Live Text API in your iOS app</a></h2>
683
684        <p class="annotation text-secondary">Quick start guide showing the newly available API in iOS 16.</p>
685
686        
687            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
688    <span class="badge"
689          style="background-color:#f35736">Swift &amp; iOS
690        
691        </span>
692</a>
693        
694    </div>
695</div>
696        
697            <div class="post">
698    <div class="post-inner">
699        
700            <p class="series-annotation">WWDC 22</p>
701        
702
703        <h2 class="heading"><a href="/blog/159/how-to-configure-uikit-bottom-sheet-with-custom-size">How to configure UIKit bottom sheet with custom size</a></h2>
704
705        <p class="annotation text-secondary">With iOS 16, we can ask for any size we want!</p>
706
707        
708            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
709    <span class="badge"
710          style="background-color:#f35736">Swift &amp; iOS
711        
712        </span>
713</a>
714        
715    </div>
716</div>
717        
718            <div class="post">
719    <div class="post-inner">
720        
721
722        <h2 class="heading"><a href="/blog/157/how-to-resize-image-in-swift">How to resize image in Swift</a></h2>
723
724        <p class="annotation text-secondary">While keeping the aspect ratio. Meaning the resize will be without stretching.</p>
725
726        
727            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
728    <span class="badge"
729          style="background-color:#f35736">Swift &amp; iOS
730        
731        </span>
732</a>
733        
734    </div>
735</div>
736        
737            <div class="post">
738    <div class="post-inner">
739        
740
741        <h2 class="heading"><a href="/blog/155/how-to-let-user-select-file-from-files">How to let user select file from Files</a></h2>
742
743        <p class="annotation text-secondary">Quick look at the `UIDocumentPickerViewController` to access the Files app.</p>
744
745        
746            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
747    <span class="badge"
748          style="background-color:#f35736">Swift &amp; iOS
749        
750        </span>
751</a>
752        
753    </div>
754</div>
755        
756            <div class="post">
757    <div class="post-inner">
758        
759            <p class="series-annotation">App promotion</p>
760        
761
762        <h2 class="heading"><a href="/blog/154/press-kit-examples-for-inspiration">Press Kit examples for inspiration</a></h2>
763
764        <p class="annotation text-secondary">Here are a few examples of nicely done press kits that can also serve as a template.</p>
765
766        
767            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
768    <span class="badge"
769          style="background-color:#f35736">Swift &amp; iOS
770        
771        </span>
772</a>
773        
774    </div>
775</div>
776        
777            <div class="post">
778    <div class="post-inner">
779        
780
781        <h2 class="heading"><a href="/blog/153/stuff-to-implement-before-you-launch-on-app-store">
781Stuff to implement before you launch on App Store</a></h2>
782
783        <p class="annotation text-secondary">A collection of small-ish things that can make a difference.</p>
784
785        
786            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
787    <span class="badge"
788          style="background-color:#f35736">Swift &amp; iOS
789        
790        </span>
791</a>
792        
793    </div>
794</div>
795        
796            <div class="post">
797    <div class="post-inner">
798        
799            <p class="series-annotation">App promotion</p>
800        
801
802        <h2 class="heading"><a href="/blog/152/boost-your-press-kit-with-lifestyle-photos">Boost your Press Kit with lifestyle photos</a></h2>
803
804        <p class="annotation text-secondary">Looking to increase chances of getting covered by the press? Shoot some real-life photos.</p>
805
806        
807            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
808    <span class="badge"
809          style="background-color:#f35736">Swift &amp; iOS
810        
811        </span>
812</a>
813        
814    </div>
815</div>
816        
817            <div class="post">
818    <div class="post-inner">
819        
820            <p class="series-annotation">App promotion</p>
821        
822
823        <h2 class="heading"><a href="/blog/151/are-press-kits-still-relevant">Are Press Kits still relevant?</a></h2>
824
825        <p class="annotation text-secondary">The short answer is yes. But it depends on your app and goals.</p>
826
827        
828            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
829    <span class="badge"
830          style="background-color:#f35736">Swift &amp; iOS
831        
832        </span>
833</a>
834        
835    </div>
836</div>
837        
838            <div class="post">
839    <div class="post-inner">
840        
841
842        <h2 class="heading"><a href="/blog/150/customizing-the-navigation-bar-in-uikit">Customizing the navigation bar in UIKit</a></h2>
843
844        <p class="annotation text-secondary">What worked for me and what didn’t.</p>
845
846        
847            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
848    <span class="badge"
849          style="background-color:#f35736">Swift &amp; iOS
850        
851        </span>
852</a>
853        
854    </div>
855</div>
856        
857            <div class="post">
858    <div class="post-inner">
859        
860
861        <h2 class="heading"><a href="/blog/149/debugging-files-in-ios">Debugging files in iOS</a></h2>
862
863        <p class="annotation text-secondary">A couple of tips on verifying that your files and folder operations do what you expect.</p>
864
865        
866            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
867    <span class="badge"
868          style="background-color:#f35736">Swift &amp; iOS
869        
870        </span>
871</a>
872        
873    </div>
874</div>
875        
876            <div class="post">
877    <div class="post-inner">
878        
879            <p class="series-annotation">App promotion</p>
880        
881
882        <h2 class="heading"><a href="/blog/148/lessons-from-reviewing-10-press-kits">Lessons from reviewing 10+ press kits</a></h2>
883
884        <p class="annotation text-secondary">Here is what I learned and recommend after reviewing bunch of press kits.</p>
885
886        
887            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
888    <span class="badge"
889          style="background-color:#f35736">Swift &amp; iOS
890        
891        </span>
892</a>
893        
894    </div>
895</div>
896        
897            <div class="post">
898    <div class="post-inner">
899        
900            <p class="series-annotation">App promotion</p>
901        
902
903        <h2 class="heading"><a href="/blog/147/tips-for-reaching-out-to-press">5 tips for reaching out to press</a></h2>
904
905        <p class="annotation text-secondary">While there are no guarantees, choosing the right strategy will significantly improve your odds.</p>
906
907        
908            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
909    <span class="badge"
910          style="background-color:#f35736">Swift &amp; iOS
911        
912        </span>
913</a>
914        
915    </div>
916</div>
917        
918            <div class="post">
919    <div class="post-inner">
920        
921
922        <h2 class="heading"><a href="/blog/145/open-your-apps-documents-folder-programmatically-in-files-app">Open your app&#x27;s Documents folder programmatically in Files app</a></h2>
923
924        <p class="annotation text-secondary">There is a scheme to launch the iOS Files app inside your app directory quickly.</p>
925
926        
927            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
928    <span class="badge"
929          style="background-color:#f35736">Swift &amp; iOS
930        
931        </span>
932</a>
933        
934    </div>
935</div>
936        
937            <div class="post">
938    <div class="post-inner">
939        
940
941        <h2 class="heading"><a href="/blog/144/gradient-borders-in-uikit">Gradient borders in UIKit</a></h2>
942
943        <p class="annotation text-secondary">Short post on applying gradient to borders without too much hassle.</p>
944
945        
946            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
947    <span class="badge"
948          style="background-color:#f35736">Swift &amp; iOS
949        
950        </span>
951</a>
952        
953    </div>
954</div>
955        
956            <div class="post">
957    <div class="post-inner">
958        
959
960        <h2 class="heading"><a href="/blog/143/always-correct-gradient-text-in-uikit">Always correct gradient text in UIKit</a></h2>
961
962        <p class="annotation text-secondary">Applying gradient colors to UILabel text isn&#x27;t straightforward. Let&#x27;s see how to do it.</p>
963
964        
965            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
966    <span class="badge"
967          style="background-color:#f35736">Swift &amp; iOS
968        
969        </span>
970</a>
971        
972    </div>
973</div>
974        
975            <div class="post">
976    <div class="post-inner">
977        
978
979        <h2 class="heading"><a href="/blog/142/creating-patterns-with-uicolor-yes-really">Creating patterns with UIColor. Yes, really</a></h2>
980
981        <p class="annotation text-secondary">Short post about fun usage of UIImage inside of UIColor.</p>
982
983        
984            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
985    <span class="badge"
986          style="background-color:#f35736">Swift &amp; iOS
987        
988        </span>
989</a>
990        
991    </div>
992</div>
993        
994            <div class="post">
995    <div class="post-inner">
996        
997            <p class="series-annotation">Compositional Layout</p>
998        
999
1000        <h2 class="heading"><a href="/blog/141/how-to-show-page-indicator-with-compositional-layout">
1000How to show page indicator with Compositional Layout</a></h2>
1001
1002        <p class="annotation text-secondary">Short guide how to do it with UIPageControl and Combine. Full source code available.</p>
1003
1004        
1005            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1006    <span class="badge"
1007          style="background-color:#f35736">Swift &amp; iOS
1008        
1009        </span>
1010</a>
1011        
1012    </div>
1013</div>
1014        
1015            <div class="post">
1016    <div class="post-inner">
1017        
1018            <p class="series-annotation">App promotion</p>
1019        
1020
1021        <h2 class="heading"><a href="/blog/140/8-marketing-ideas-for-your-app">8 &quot;marketing&quot; ideas for your app</a></h2>
1022
1023        <p class="annotation text-secondary">Ideas to get you started when you want to &quot;do marketing&quot; for your app.</p>
1024
1025        
1026            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1027    <span class="badge"
1028          style="background-color:#f35736">Swift &amp; iOS
1029        
1030        </span>
1031</a>
1032        
1033    </div>
1034</div>
1035        
1036            <div class="post">
1037    <div class="post-inner">
1038        
1039
1040        <h2 class="heading"><a href="/blog/139/quickly-preview-app-icon-on-a-real-device">Quickly preview app icon on a real device</a></h2>
1041
1042        <p class="annotation text-secondary">Introducing small new tool called App Icon Preview.</p>
1043
1044        
1045            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1046    <span class="badge"
1047          style="background-color:#f35736">Swift &amp; iOS
1048        
1049        </span>
1050</a>
1051        
1052    </div>
1053</div>
1054        
1055            <div class="post">
1056    <div class="post-inner">
1057        
1058            <p class="series-annotation">Diffable</p>
1059        
1060
1061        <h2 class="heading"><a href="/blog/138/fixing-wrong-animations-with-diffable-data-source">Fixing wrong animations with Diffable Data Source</a></h2>
1062
1063        <p class="annotation text-secondary">The most common causes and how to fix it.</p>
1064
1065        
1066            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1067    <span class="badge"
1068          style="background-color:#f35736">Swift &amp; iOS
1069        
1070        </span>
1071</a>
1072        
1073    </div>
1074</div>
1075        
1076            <div class="post">
1077    <div class="post-inner">
1078        
1079            <p class="series-annotation">App promotion</p>
1080        
1081
1082        <h2 class="heading"><a href="/blog/137/careful-when-getting-inspiration-from-popular-apps">Careful when getting inspiration from popular apps</a></h2>
1083
1084        <p class="annotation text-secondary">On the pitfalls of mistaking correlation with causation.</p>
1085
1086        
1087            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1088    <span class="badge"
1089          style="background-color:#f35736">Swift &amp; iOS
1090        
1091        </span>
1092</a>
1093        
1094    </div>
1095</div>
1096        
1097            <div class="post">
1098    <div class="post-inner">
1099        
1100            <p class="series-annotation">App promotion</p>
1101        
1102
1103        <h2 class="heading"><a href="/blog/136/minimal-press-kit-your-app-should-have">Minimal Press Kit your app should have</a></h2>
1104
1105        <p class="annotation text-secondary">Assuming you plan to contact the press.</p>
1106
1107        
1108            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1109    <span class="badge"
1110          style="background-color:#f35736">Swift &amp; iOS
1111        
1112        </span>
1113</a>
1114        
1115    </div>
1116</div>
1117        
1118            <div class="post">
1119    <div class="post-inner">
1120        
1121
1122        <h2 class="heading"><a href="/blog/135/make-rounding-specific-corners-easier-with-extension">Make rounding specific corners easier with extension</a></h2>
1123
1124        <p class="annotation text-secondary">Renaming constants goes a long way...</p>
1125
1126        
1127            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1128    <span class="badge"
1129          style="background-color:#f35736">Swift &amp; iOS
1130        
1131        </span>
1132</a>
1133        
1134    </div>
1135</div>
1136        
1137            <div class="post">
1138    <div class="post-inner">
1139        
1140            <p class="series-annotation">App promotion</p>
1141        
1142
1143        <h2 class="heading"><a href="/blog/134/what-is-a-press-release-should-you-care-as-a-developer">What is a Press Release? Should you care as a developer?</a></h2>
1144
1145        <p class="annotation text-secondary">Why bother? And how to get started without getting overwhelmed.</p>
1146
1147        
1148            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1149    <span class="badge"
1150          style="background-color:#f35736">Swift &amp; iOS
1151        
1152        </span>
1153</a>
1154        
1155    </div>
1156</div>
1157        
1158            <div class="post">
1159    <div class="post-inner">
1160        
1161            <p class="series-annotation">App promotion</p>
1162        
1163
1164        <h2 class="heading"><a href="/blog/133/5-tips-for-better-app-store-screenshots">5 tips for better App Store screenshots</a></h2>
1165
1166        <p class="annotation text-secondary">Whether you are preparing to publish your first app or want to improve screenshots for already published one, I hope at least some of these tips will be helpful.</p>
1167
1168        
1169            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1170    <span class="badge"
1171          style="background-color:#f35736">Swift &amp; iOS
1172        
1173        </span>
1174</a>
1175        
1176    </div>
1177</div>
1178        
1179            <div class="post">
1180    <div class="post-inner">
1181        
1182            <p class="series-annotation">App promotion</p>
1183        
1184
1185        <h2 class="heading"><a href="/blog/132/4-reasons-why-zip-file-press-kit-isnt-an-ideal-solution">4 reasons why ZIP file Press Kit isn&#x27;t an ideal solution</a></h2>
1186
1187        <p class="annotation text-secondary">You may be losing press coverage because of this.</p>
1188
1189        
1190            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1191    <span class="badge"
1192          style="background-color:#f35736">Swift &amp; iOS
1193        
1194        </span>
1195</a>
1196        
1197    </div>
1198</div>
1199        
1200            <div class="post">
1201    <div class="post-inner">
1202        
1203            <p class="series-annotation">App promotion</p>
1204        
1205
1206        <h2 class="heading"><a href="/blog/129/places-you-can-promote-your-app-for-free">Where to promote your app for free? [2026 update]</a></h2>
1207
1208        <p class="annotation text-secondary">Without hoping that some journalist will write about it.</p>
1209
1210        
1211            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1212    <span class="badge"
1213          style="background-color:#f35736">Swift &amp; iOS
1214        
1215        </span>
1216</a>
1217        
1218    </div>
1219</div>
1220        
1221            <div class="post">
1222    <div class="post-inner">
1223        
1224
1225        <h2 class="heading"><a href="/blog/127/how-to-disable-automatic-transparent-tabbar-in-ios-15">How to disable automatic transparent tabBar in iOS 15</a></h2>
1226
1227        <p class="annotation text-secondary">With Xcode 13 and the iOS 15 SDK there are important changes to UITabBar.</p>
1228
1229        
1230            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1231    <span class="badge"
1232          style="background-color:#f35736">Swift &amp; iOS
1233        
1234        </span>
1235</a>
1236        
1237    </div>
1238</div>
1239        
1240            <div class="post">
1241    <div class="post-inner">
1242        
1243
1244        <h2 class="heading"><a href="/blog/126/how-to-disable-automatic-transparent-navbar-in-ios-15">How to disable automatic transparent navbar in iOS 15</a></h2>
1245
1246        <p class="annotation text-secondary">Xcode 13 along with iOS 15 SDK brings substantial changes to UINavigationBar.</p>
1247
1248        
1249            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1250    <span class="badge"
1251          style="background-color:#f35736">Swift &amp; iOS
1252        
1253        </span>
1254</a>
1255        
1256    </div>
1257</div>
1258        
1259            <div class="post">
1260    <div class="post-inner">
1261        
1262
1263        <h2 class="heading"><a href="/blog/123/loading-html-text-into-uitextview">Loading HTML text into UITextView</a></h2>
1264
1265        <p class="annotation text-secondary">Using NSAttributedString. With pitfalls to avoid.</p>
1266
1267        
1268            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1269    <span class="badge"
1270          style="background-color:#f35736">Swift &amp; iOS
1271        
1272        </span>
1273</a>
1274        
1275    </div>
1276</div>
1277        
1278            <div class="post">
1279    <div class="post-inner">
1280        
1281
1282        <h2 class="heading"><a href="/blog/119/how-to-check-if-mobile-data-is-enabled-for-your-app">How to check if Mobile (Cellular) Data is enabled for your app</a></h2>
1283
1284        <p class="annotation text-secondary">Another niche topic, that may be quite useful in certain situations.</p>
1285
1286        
1287            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1288    <span class="badge"
1289          style="background-color:#f35736">Swift &amp; iOS
1290        
1291        </span>
1292</a>
1293        
1294    </div>
1295</div>
1296        
1297            <div class="post">
1298    <div class="post-inner">
1299        
1300
1301        <h2 class="heading"><a href="/blog/117/implementing-drag-drop-for-collection-view">Implementing drag &amp; drop for Collection View</a></h2>
1302
1303        <p class="annotation text-secondary">A quick loot at implementing drag and drop capabilities in your app using Collection View.</p>
1304
1305        
1306            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1307    <span class="badge"
1308          style="background-color:#f35736">Swift &amp; iOS
1309        
1310        </span>
1311</a>
1312        
1313    </div>
1314</div>
1315        
1316            <div class="post">
1317    <div class="post-inner">
1318        
1319
1320        <h2 class="heading"><a href="/blog/114/implementing-alternate-icons-in-ios">Implementing alternate icons in iOS</a></h2>
1321
1322        <p class="annotation text-secondary">Overview of what you need to do to allow users to select custom icons. With common pitfalls and iPad implementation.</p>
1323
1324        
1325            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1326    <span class="badge"
1327          style="background-color:#f35736">Swift &amp; iOS
1328        
1329        </span>
1330</a>
1331        
1332    </div>
1333</div>
1334        
1335            <div class="post">
1336    <div class="post-inner">
1337        
1338            <p class="series-annotation">WWDC 21</p>
1339        
1340
1341        <h2 class="heading"><a href="/blog/111/wkwebview-improvements-in-ios-15">WKWebView improvements in iOS 15</a></h2>
1342
1343        <p class="annotation text-secondary">Media playback APIs, theme color, async support, downloads and more.</p>
1344
1345        
1346            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1347    <span class="badge"
1348          style="background-color:#f35736">Swift &amp; iOS
1349        
1350        </span>
1351</a>
1352        
1353    </div>
1354</div>
1355        
1356            <div class="post">
1357    <div class="post-inner">
1358        
1359            <p class="series-annotation">WWDC 21</p>
1360        
1361
1362        <h2 class="heading"><a href="/blog/110/sfsafariviewcontroller-improvements-in-ios-15">SFSafariViewController improvements in iOS 15</a></h2>
1363
1364        <p class="annotation text-secondary">There&#x27;s an option to run custom extension on the page content and also preload some content.</p>
1365
1366        
1367            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1368    <span class="badge"
1369          style="background-color:#f35736">Swift &amp; iOS
1370        
1371        </span>
1372</a>
1373        
1374    </div>
1375</div>
1376        
1377            <div class="post">
1378    <div class="post-inner">
1379        
1380            <p class="series-annotation">WWDC 21</p>
1381        
1382
1383        <h2 class="heading"><a href="/blog/109/core-location-ui-new-way-to-get-one-time-location">Core Location UI: New way to get one-time location</a></h2>
1384
1385        <p class="annotation text-secondary">Apple has new solution for apps which need location only sometimes.</p>
1386
1387        
1388            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1389    <span class="badge"
1390          style="background-color:#f35736">Swift &amp; iOS
1391        
1392        </span>
1393</a>
1394        
1395    </div>
1396</div>
1397        
1398            <div class="post">
1399    <div class="post-inner">
1400        
1401            <p class="series-annotation">WWDC 21</p>
1402        
1403
1404        <h2 class="heading"><a href="/blog/108/meet-the-new-bottom-sheet-in-ios-15">Meet the new bottom sheet in iOS 15</a></h2>
1405
1406        <p class="annotation text-secondary">We can finally use the modal sheet that does not take up the entire screen on an iPhone. And it is just a bit of configuration.</p>
1407
1408        
1409            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1410    <span class="badge"
1411          style="background-color:#f35736">Swift &amp; iOS
1412        
1413        </span>
1414</a>
1415        
1416    </div>
1417</div>
1418        
1419            <div class="post">
1420    <div class="post-inner">
1421        
1422            <p class="series-annotation">WWDC 21</p>
1423        
1424
1425        <h2 class="heading"><a href="/blog/107/big-improvements-to-uibutton-in-ios-15">Big improvements to UIButton in iOS 15</a></h2>
1426
1427        <p class="annotation text-secondary">Predefined styles. Trailing images! Loading style and much more.</p>
1428
1429        
1430            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1431    <span class="badge"
1432          style="background-color:#f35736">Swift &amp; iOS
1433        
1434        </span>
1435</a>
1436        
1437    </div>
1438</div>
1439        
1440            <div class="post">
1441    <div class="post-inner">
1442        
1443            <p class="series-annotation">WWDC 21</p>
1444        
1445
1446        <h2 class="heading"><a href="/blog/106/new-approach-to-formatters-in-ios-15">New approach to formatters in iOS 15</a></h2>
1447
1448        <p class="annotation text-secondary">There are huge foundation news regarding formatters. They were basically moved behind the scenes.</p>
1449
1450        
1451            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1452    <span class="badge"
1453          style="background-color:#f35736">Swift &amp; iOS
1454        
1455        </span>
1456</a>
1457        
1458    </div>
1459</div>
1460        
1461            <div class="post">
1462    <div class="post-inner">
1463        
1464
1465        <h2 class="heading"><a href="/blog/104/checking-if-device-is-locked-or-sleeping-in-ios">Checking if device is locked (or sleeping) in iOS</a></h2>
1466
1467        <p class="annotation text-secondary">This is easier in the main app, but there is a way to do this in the extension as well.</p>
1468
1469        
1470            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1471    <span class="badge"
1472          style="background-color:#f35736">Swift &amp; iOS
1473        
1474        </span>
1475</a>
1476        
1477    </div>
1478</div>
1479        
1480            <div class="post">
1481    <div class="post-inner">
1482        
1483            <p class="series-annotation">AppStories</p>
1484        
1485
1486        <h2 class="heading"><a href="/blog/103/solving-difficult-problem-by-solving-way-easier-one">Solving difficult problem by solving way easier one</a></h2>
1487
1488        <p class="annotation text-secondary">First post in new experimental article format.</p>
1489
1490        
1491            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1492    <span class="badge"
1493          style="background-color:#f35736">Swift &amp; iOS
1494        
1495        </span>
1496</a>
1497        
1498    </div>
1499</div>
1500        
1501            <div class="post">
1502    <div class="post-inner">
1503        
1504
1505        <h2 class="heading"><a href="/blog/102/connecting-to-wi-fi-programmatically-in-ios-with-swift">Connecting to Wi-Fi programmatically in iOS with Swift</a></h2>
1506
1507        <p class="annotation text-secondary">With a little bit of code, you can prompt the user to connect to Wi-Fi network 
1507of your choice.</p>
1508
1509        
1510            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1511    <span class="badge"
1512          style="background-color:#f35736">Swift &amp; iOS
1513        
1514        </span>
1515</a>
1516        
1517    </div>
1518</div>
1519        
1520            <div class="post">
1521    <div class="post-inner">
1522        
1523
1524        <h2 class="heading"><a href="/blog/98/how-to-save-image-into-photos">How to save image into Photos</a></h2>
1525
1526        <p class="annotation text-secondary">Without that crazy Objective-C method that requires selector.</p>
1527
1528        
1529            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1530    <span class="badge"
1531          style="background-color:#f35736">Swift &amp; iOS
1532        
1533        </span>
1534</a>
1535        
1536    </div>
1537</div>
1538        
1539            <div class="post">
1540    <div class="post-inner">
1541        
1542
1543        <h2 class="heading"><a href="/blog/97/creating-basic-configurable-siri-shortcut">Creating basic configurable Siri Shortcut</a></h2>
1544
1545        <p class="annotation text-secondary">Simplest possible tutorial to get you started with Siri Intents.</p>
1546
1547        
1548            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1549    <span class="badge"
1550          style="background-color:#f35736">Swift &amp; iOS
1551        
1552        </span>
1553</a>
1554        
1555    </div>
1556</div>
1557        
1558            <div class="post">
1559    <div class="post-inner">
1560        
1561            <p class="series-annotation">Codable</p>
1562        
1563
1564        <h2 class="heading"><a href="/blog/95/how-to-decode-dates-with-codable">How to decode dates with Codable</a></h2>
1565
1566        <p class="annotation text-secondary">In this post we will look at strategies you can use to decode dates. Custom decoder isn&#x27;t needed.</p>
1567
1568        
1569            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1570    <span class="badge"
1571          style="background-color:#f35736">Swift &amp; iOS
1572        
1573        </span>
1574</a>
1575        
1576    </div>
1577</div>
1578        
1579            <div class="post">
1580    <div class="post-inner">
1581        
1582
1583        <h2 class="heading"><a href="/blog/94/backend-for-swift-developers-workshop-info">
1583Backend for Swift developers workshop [info]</a></h2>
1584
1585        <p class="annotation text-secondary">Custom backend for your apps is not exactly rocket science and can give you a big boost.</p>
1586
1587        
1588            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1589    <span class="badge"
1590          style="background-color:#f35736">Swift &amp; iOS
1591        
1592        </span>
1593</a>
1594        
1595    </div>
1596</div>
1597        
1598            <div class="post">
1599    <div class="post-inner">
1600        
1601            <p class="series-annotation">Core Data</p>
1602        
1603
1604        <h2 class="heading"><a href="/blog/93/how-to-save-enum-to-core-data">How to save enum to Core Data</a></h2>
1605
1606        <p class="annotation text-secondary">With a bit of help of computed property, we can save enumerations into Core Data quite easily!</p>
1607
1608        
1609            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1610    <span class="badge"
1611          style="background-color:#f35736">Swift &amp; iOS
1612        
1613        </span>
1614</a>
1615        
1616    </div>
1617</div>
1618        
1619            <div class="post">
1620    <div class="post-inner">
1621        
1622            <p class="series-annotation">WKWebView</p>
1623        
1624
1625        <h2 class="heading"><a href="/blog/92/javascript-basics-for-ios-developers">JavaScript basics for iOS developers</a></h2>
1626
1627        <p class="annotation text-secondary">What you need to know to manipulate content in WKWebView, how to make Swift &amp; JavaScript talk to each other, how to call JavaScript functions and more.</p>
1628
1629        
1630            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1631    <span class="badge"
1632          style="background-color:#f35736">Swift &amp; iOS
1633        
1634        </span>
1635</a>
1636        
1637    </div>
1638</div>
1639        
1640            <div class="post">
1641    <div class="post-inner">
1642        
1643            <p class="series-annotation">Codable</p>
1644        
1645
1646        <h2 class="heading"><a href="/blog/90/how-to-decode-snake-case-with-codable">How to decode snake case with Codable</a></h2>
1647
1648        <p class="annotation text-secondary">Forget CodingKeys. There is much better solution available!</p>
1649
1650        
1651            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1652    <span class="badge"
1653          style="background-color:#f35736">Swift &amp; iOS
1654        
1655        </span>
1656</a>
1657        
1658    </div>
1659</div>
1660        
1661            <div class="post">
1662    <div class="post-inner">
1663        
1664
1665        <h2 class="heading"><a href="/blog/89/randomness-in-swift-comprehensive-overview">Randomness in Swift: Comprehensive overview</a></h2>
1666
1667        <p class="annotation text-secondary">Random numbers, random array elements, random color, fair randomness and more.</p>
1668
1669        
1670            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1671    <span class="badge"
1672          style="background-color:#f35736">Swift &amp; iOS
1673        
1674        </span>
1675</a>
1676        
1677    </div>
1678</div>
1679        
1680            <div class="post">
1681    <div class="post-inner">
1682        
1683
1684        <h2 class="heading"><a href="/blog/88/uimenu-comprehensive-guide">UIMenu: Comprehensive guide</a></h2>
1685
1686        <p class="annotation text-secondary">Learn how to use UIMenu to build modern UI. This tutorial shows basic example, how to add separator, how to work with submenus and more.</p>
1687
1688        
1689            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1690    <span class="badge"
1691          style="background-color:#f35736">Swift &amp; iOS
1692        
1693        </span>
1694</a>
1695        
1696    </div>
1697</div>
1698        
1699            <div class="post">
1700    <div class="post-inner">
1701        
1702            <p class="series-annotation">Compositional Layout</p>
1703        
1704
1705        <h2 class="heading"><a href="/blog/86/re-creating-apple-photos-layout-animations-with-compositional-layout">Re-creating Apple Photos layout &amp; animations with Compositional Layout</a></h2>
1706
1707        <p class="annotation text-secondary">Let&#x27;s see how we can create layout similar to the native Photos app in iOS. Complete with the transitions.</p>
1708
1709        
1710            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1711    <span class="badge"
1712          style="background-color:#f35736">Swift &amp; iOS
1713        
1714        </span>
1715</a>
1716        
1717    </div>
1718</div>
1719        
1720            <div class="post">
1721    <div class="post-inner">
1722        
1723
1724        <h2 class="heading"><a href="/blog/85/how-to-show-uimenu-from-uibutton-or-uibarbuttonitem">How to show UIMenu from UIButton or UIBarButtonItem</a></h2>
1725
1726        <p class="annotation text-secondary">Learn how to display context / popup menu from UIBarButtonItem and UIButton with this guide.</p>
1727
1728        
1729            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1730    <span class="badge"
1731          style="background-color:#f35736">Swift &amp; iOS
1732        
1733        </span>
1734</a>
1735        
1736    </div>
1737</div>
1738        
1739            <div class="post">
1740    <div class="post-inner">
1741        
1742            <p class="series-annotation">Compositional Layout</p>
1743        
1744
1745        <h2 class="heading"><a href="/blog/84/how-to-create-responsive-compositional-layout">
1745How to create responsive Compositional Layout</a></h2>
1746
1747        <p class="annotation text-secondary">Let&#x27;s look at basic example tutorial about creating Compositional Layout that adapts to available screen space.</p>
1748
1749        
1750            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1751    <span class="badge"
1752          style="background-color:#f35736">Swift &amp; iOS
1753        
1754        </span>
1755</a>
1756        
1757    </div>
1758</div>
1759        
1760            <div class="post">
1761    <div class="post-inner">
1762        
1763            <p class="series-annotation">Compositional Layout</p>
1764        
1765
1766        <h2 class="heading"><a href="/blog/83/how-to-create-sticky-headers-with-compositional-layout">How to create sticky headers with Compositional Layout</a></h2>
1767
1768        <p class="annotation text-secondary">It is actually quite easy, but you need to know where to activate this behavior. Let&#x27;s see how to enable pinned headers.</p>
1769
1770        
1771            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1772    <span class="badge"
1773          style="background-color:#f35736">Swift &amp; iOS
1774        
1775        </span>
1776</a>
1777        
1778    </div>
1779</div>
1780        
1781            <div class="post">
1782    <div class="post-inner">
1783        
1784            <p class="series-annotation">Compositional Layout</p>
1785        
1786
1787        <h2 class="heading"><a href="/blog/82/useful-extensions-for-collectionview-and-compositional-layout">Useful extensions for CollectionView and Compositional Layout</a></h2>
1788
1789        <p class="annotation text-secondary">With a few extensions, you can make working with CollectionViews and Compositional Layout a lot cleaner.</p>
1790
1791        
1792            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1793    <span class="badge"
1794          style="background-color:#f35736">Swift &amp; iOS
1795        
1796        </span>
1797</a>
1798        
1799    </div>
1800</div>
1801        
1802            <div class="post">
1803    <div class="post-inner">
1804        
1805            <p class="series-annotation">Compositional Layout</p>
1806        
1807
1808        <h2 class="heading"><a href="/blog/81/how-to-create-onboarding-with-compositional-layout">How to create onboarding with Compositional Layout</a></h2>
1809
1810        <p class="annotation text-secondary">Utilizing Compositional Layout to create onboarding flow. Full code example is available.</p>
1811
1812        
1813            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1814    <span class="badge"
1815          style="background-color:#f35736">Swift &amp; iOS
1816        
1817        </span>
1818</a>
1819        
1820    </div>
1821</div>
1822        
1823            <div class="post">
1824    <div class="post-inner">
1825        
1826
1827        <h2 class="heading"><a href="/blog/78/how-to-use-nsdatadetector-to-detect-links-email-addresses-phone-numbers-and-more">How to use NSDataDetector to detect links, email addresses, phone numbers and more</a></h2>
1828
1829        <p class="annotation text-secondary">And also a look on creating prettier API with the help of extensions and enums.</p>
1830
1831        
1832            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1833    <span class="badge"
1834          style="background-color:#f35736">Swift &amp; iOS
1835        
1836        </span>
1837</a>
1838        
1839    </div>
1840</div>
1841        
1842            <div class="post">
1843    <div class="post-inner">
1844        
1845            <p class="series-annotation">Compositional Layout</p>
1846        
1847
1848        <h2 class="heading"><a href="/blog/77/how-to-create-grid-with-compositional-layout">How to create grid with Compositional Layout</a></h2>
1849
1850        <p class="annotation text-secondary">Let&#x27;s look at creating basic grid layouts using Compositional Layout.</p>
1851
1852        
1853            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1854    <span class="badge"
1855          style="background-color:#f35736">Swift &amp; iOS
1856        
1857        </span>
1858</a>
1859        
1860    </div>
1861</div>
1862        
1863            <div class="post">
1864    <div class="post-inner">
1865        
1866
1867        <h2 class="heading"><a href="/blog/76/what-is-intrinsic-content-size-and-why-care">What is intrinsic content size and why care?</a></h2>
1868
1869        <p class="annotation text-secondary">In this post I would like to touch a bit on a less known part of UIKit layout. The what and why of intrinsic content size.</p>
1870
1871        
1872            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1873    <span class="badge"
1874          style="background-color:#f35736">Swift &amp; iOS
1875        
1876        </span>
1877</a>
1878        
1879    </div>
1880</div>
1881        
1882            <div class="post">
1883    <div class="post-inner">
1884        
1885            <p class="series-annotation">Compositional Layout</p>
1886        
1887
1888        <h2 class="heading"><a href="/blog/73/example-project-showing-compositional-layout-and-diffable">Example project showing Compositional Layout and Diffable</a></h2>
1889
1890        <p class="annotation text-secondary">Check out my GitHub project for hand-on examples showcasing how to build various layouts using modern APIs.</p>
1891
1892        
1893            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1894    <span class="badge"
1895          style="background-color:#f35736">Swift &amp; iOS
1896        
1897        </span>
1898</a>
1899        
1900    </div>
1901</div>
1902        
1903            <div class="post">
1904    <div class="post-inner">
1905        
1906            <p class="series-annotation">Compositional Layout</p>
1907        
1908
1909        <h2 class="heading"><a href="/blog/72/building-instagram-profile-screen-with-compositional-layout">Building Instagram profile screen with Compositional Layout</a></h2>
1910
1911        <p class="annotation text-secondary">Let&#x27;s build the profile page with avatar, followers count, highlights and photos.</p>
1912
1913        
1914            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1915    <span class="badge"
1916          style="background-color:#f35736">Swift &amp; iOS
1917        
1918        </span>
1919</a>
1920        
1921    </div>
1922</div>
1923        
1924            <div class="post">
1925    <div class="post-inner">
1926        
1927            <p class="series-annotation">Compositional Layout</p>
1928        
1929
1930        <h2 class="heading"><a href="/blog/71/using-background-decoration-views-with-compositional-layout">Using background decoration views with Compositional Layout</a></h2>
1931
1932        <p class="annotation text-secondary">These can help you add a bit of visual flair or maybe imitate the inset table view style.</p>
1933
1934        
1935            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1936    <span class="badge"
1937          style="background-color:#f35736">Swift &amp; iOS
1938        
1939        </span>
1940</a>
1941        
1942    </div>
1943</div>
1944        
1945            <div class="post">
1946    <div class="post-inner">
1947        
1948            <p class="series-annotation">Diffable</p>
1949        
1950
1951        <h2 class="heading"><a href="/blog/70/tips-and-practices-for-setting-up-diffable-data-sources">Tips and practices for setting up Diffable Data Sources</a></h2>
1952
1953        <p class="annotation text-secondary">In this post I would like to show a few approaches that make working with Diffable cleaner and better.</p>
1954
1955        
1956            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1957    <span class="badge"
1958          style="background-color:#f35736">Swift &amp; iOS
1959        
1960        </span>
1961</a>
1962        
1963    </div>
1964</div>
1965        
1966            <div class="post">
1967    <div class="post-inner">
1968        
1969            <p class="series-annotation">Compositional Layout</p>
1970        
1971
1972        <h2 class="heading"><a href="/blog/69/supplementary-views-with-compositional-layout-and-diffable-data-source">Supplementary views with Compositional Layout and Diffable Data Source</a></h2>
1973
1974        <p class="annotation text-secondary">In this post we will see how to add badges to CollectionView. You will learn how to add supplementary views, configure them and display them.</p>
1975
1976        
1977            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1978    <span class="badge"
1979          style="background-color:#f35736">Swift &amp; iOS
1980        
1981        </span>
1982</a>
1983        
1984    </div>
1985</div>
1986        
1987            <div class="post">
1988    <div class="post-inner">
1989        
1990            <p class="series-annotation">Compositional Layout</p>
1991        
1992
1993        <h2 class="heading"><a href="/blog/66/detailed-look-at-the-nscollectionlayoutgroup">Detailed look at the NSCollectionLayoutGroup</a></h2>
1994
1995        <p class="annotation text-secondary">With the NSCollectionLayoutGroup definition we can create quite different layouts while keeping the rest of the code the same.</p>
1996
1997        
1998            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1999    <span class="badge"
2000          style="background-color:#f35736">Swift &amp; iOS
2001        
2002        </span>
2003</a>
2004        
2005    </div>
2006</div>
2007        
2008            <div class="post">
2009    <div class="post-inner">
2010        
2011            <p class="series-annotation">Contacts</p>
2012        
2013
2014        <h2 class="heading"><a href="/blog/64/how-to-let-user-select-contact-from-their-contact-list">How to let user select contact from their contact list</a></h2>
2015
2016        <p class="annotation text-secondary">A short look at the CNContactPickerViewController from the ContactsUI framework. Learn how to leverage this contact picker to access contact details.</p>
2017
2018        
2019            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2020    <span class="badge"
2021          style="background-color:#f35736">Swift &amp; iOS
2022        
2023        </span>
2024</a>
2025        
2026    </div>
2027</div>
2028        
2029            <div class="post">
2030    <div class="post-inner">
2031        
2032            <p class="series-annotation">EventKit</p>
2033        
2034
2035        <h2 class="heading"><a href="/blog/63/how-to-monitor-system-calendar-for-changes-with-eventkit">How to monitor system calendar for changes with EventKit</a></h2>
2036
2037        <p class="annotation text-secondary">If you are working with either calendar events or reminders via EventKit framework, you need keep the data up-to-date with the system calendar database.</p>
2038
2039        
2040            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2041    <span class="badge"
2042          style="background-color:#f35736">Swift &amp; iOS
2043        
2044        </span>
2045</a>
2046        
2047    </div>
2048</div>
2049        
2050            <div class="post">
2051    <div class="post-inner">
2052        
2053            <p class="series-annotation">Diffable</p>
2054        
2055
2056        <h2 class="heading"><a href="/blog/62/how-to-refresh-headerfooter-with-diffable-data-source">How to refresh header / footer with Diffable Data Source</a></h2>
2057
2058        <p class="annotation text-secondary">All that is needed is correctly configured section with associated value. Learn how to properly refresh supplementary views with Diffable Data Source.</p>
2059
2060        
2061            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2062    <span class="badge"
2063          style="background-color:#f35736">Swift &amp; iOS
2064        
2065        </span>
2066</a>
2067        
2068    </div>
2069</div>
2070        
2071            <div class="post">
2072    <div class="post-inner">
2073        
2074
2075        <h2 class="heading"><a href="/blog/61/ios-14-how-to-send-email-using-default-email-app">iOS 14: How to send email using default email app</a></h2>
2076
2077        <p class="annotation text-secondary">Letting your users send you feedback just got significantly easier with iOS 14. Let&#x27;s see how.</p>
2078
2079        
2080            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2081    <span class="badge"
2082          style="background-color:#f35736">Swift &amp; iOS
2083        
2084        </span>
2085</a>
2086        
2087    </div>
2088</div>
2089        
2090            <div class="post">
2091    <div class="post-inner">
2092        
2093            <p class="series-annotation">Diffable</p>
2094        
2095
2096        <h2 class="heading"><a href="/blog/60/implementing-loadingshimmer-with-diffable-data-source">Implementing loading / shimmer with Diffable Data Source</a></h2>
2097
2098        <p class="annotation text-secondary">Quick look on one way how to implement loading state for your collection view or table view when using diffable.</p>
2099
2100        
2101            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2102    <span class="badge"
2103          style="background-color:#f35736">Swift &amp; iOS
2104        
2105        </span>
2106</a>
2107        
2108    </div>
2109</div>
2110        
2111            <div class="post">
2112    <div class="post-inner">
2113        
2114            <p class="series-annotation">Core Data</p>
2115        
2116
2117        <h2 class="heading"><a href="/blog/59/demystifying-core-data-a-guide-for-newcomers">Demystifying Core Data: A guide for newcomers</a></h2>
2118
2119        <p class="annotation text-secondary">This post is intended for newcomers to the development on Apple platforms. Since Core Data will undoubtedly feel daunting for a lot of new developers, I decided to try to explain it in simpler terms.</p>
2120
2121        
2122            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2123    <span class="badge"
2124          style="background-color:#f35736">Swift &amp; iOS
2125        
2126        </span>
2127</a>
2128        
2129    </div>
2130</div>
2131        
2132            <div class="post">
2133    <div class="post-inner">
2134        
2135
2136        <h2 class="heading"><a href="/blog/57/making-files-from-your-app-available-in-the-ios-files-app">Making files from your app available in the iOS Files app</a></h2>
2137
2138        <p class="annotation text-secondary">Learn how and why you can make your app&#x27;s Documents folder accessible via Files app in iOS. And also how to write files into the Application Support directory.</p>
2139
2140        
2141            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2142    <span class="badge"
2143          style="background-color:#f35736">Swift &amp; iOS
2144        
2145        </span>
2146</a>
2147        
2148    </div>
2149</div>
2150        
2151            <div class="post">
2152    <div class="post-inner">
2153        
2154            <p class="series-annotation">Compositional Layout</p>
2155        
2156
2157        <h2 class="heading"><a href="/blog/56/basic-anatomy-of-collection-view-compositional-layout">Basic anatomy of collection view compositional layout</a></h2>
2158
2159        <p class="annotation text-secondary">Understanding the basic building blocks of the great compositional layout for collection views.</p>
2160
2161        
2162            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2163    <span class="badge"
2164          style="background-color:#f35736">Swift &amp; iOS
2165        
2166        </span>
2167</a>
2168        
2169    </div>
2170</div>
2171        
2172            <div class="post">
2173    <div class="post-inner">
2174        
2175
2176        <h2 class="heading"><a href="/blog/55/porting-iphone-app-to-ipad-my-experience">Porting iPhone app to iPad: My experience</a></h2>
2177
2178        <p class="annotation text-secondary">Tips and approaches to use when you don&#x27;t have the time to build iPad version from scratch.</p>
2179
2180        
2181            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2182    <span class="badge"
2183          style="background-color:#f35736">Swift &amp; iOS
2184        
2185        </span>
2186</a>
2187        
2188    </div>
2189</div>
2190        
2191            <div class="post">
2192    <div class="post-inner">
2193        
2194
2195        <h2 class="heading"><a href="/blog/52/implementing-multi-user-support-in-tvos-14">Implementing multi-user support in tvOS 14</a></h2>
2196
2197        <p class="annotation text-secondary">Turns out it is pretty easy change to make with potential benefits for your users.</p>
2198
2199        
2200            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2201    <span class="badge"
2202          style="background-color:#f35736">Swift &amp; iOS
2203        
2204        </span>
2205</a>
2206        
2207    </div>
2208</div>
2209        
2210            <div class="post">
2211    <div class="post-inner">
2212        
2213
2214        <h2 class="headi
2214ng"><a href="/blog/51/refactoring-uialertcontroller-helper-class-and-protocol-approaches">Refactoring UIAlertController: Helper class and protocol approaches</a></h2>
2215
2216        <p class="annotation text-secondary">Detailed look at two possible approaches to avoid writing boiler plate code over and over.</p>
2217
2218        
2219            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2220    <span class="badge"
2221          style="background-color:#f35736">Swift &amp; iOS
2222        
2223        </span>
2224</a>
2225        
2226    </div>
2227</div>
2228        
2229            <div class="post">
2230    <div class="post-inner">
2231        
2232
2233        <h2 class="heading"><a href="/blog/50/how-to-approach-complex-programming-problems">How to approach complex programming problems</a></h2>
2234
2235        <p class="annotation text-secondary">Some tips and approaches how to tackle difficult problems. Including examples from my Chill Zones app.</p>
2236
2237        
2238            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2239    <span class="badge"
2240          style="background-color:#f35736">Swift &amp; iOS
2241        
2242        </span>
2243</a>
2244        
2245    </div>
2246</div>
2247        
2248            <div class="post">
2249    <div class="post-inner">
2250        
2251            <p class="series-annotation">EventKit</p>
2252        
2253
2254        <h2 class="heading"><a href="/blog/45/how-to-create-new-calendar-using-eventkit-in-swift">How to create new calendar using EventKit in Swift</a></h2>
2255
2256        <p class="annotation text-secondary">Apart from reminders and events, EventKit framework also gives you the power to create new calendars for users. Learn how.</p>
2257
2258        
2259            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2260    <span class="badge"
2261          style="background-color:#f35736">Swift &amp; iOS
2262        
2263        </span>
2264</a>
2265        
2266    </div>
2267</div>
2268        
2269            <div class="post">
2270    <div class="post-inner">
2271        
2272            <p class="series-annotation">Core Data</p>
2273        
2274
2275        <h2 class="heading"><a href="/blog/44/minimal-example-of-using-diffable-data-source-with-core-data">Minimal example of using Diffable Data Source with Core Data</a></h2>
2276
2277        <p class="annotation text-secondary">The new Diffable Data Source is totally different way to setup Table Views and Collection Views. This example will get you started.</p>
2278
2279        
2280            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2281    <span class="badge"
2282          style="background-color:#f35736">Swift &amp; iOS
2283        
2284        </span>
2285</a>
2286        
2287    </div>
2288</div>
2289        
2290            <div class="post">
2291    <div class="post-inner">
2292        
2293            <p class="series-annotation">Core Data</p>
2294        
2295
2296        <h2 class="heading"><a href="/blog/42/how-to-create-core-data-database-from-multiple-model-files">How to create Core Data database from multiple model files</a></h2>
2297
2298        <p class="annotation text-secondary">This is useful if you want to split your app into modules but still keep and manage only single database inside the main target.</p>
2299
2300        
2301            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2302    <span class="badge"
2303          style="background-color:#f35736">Swift &amp; iOS
2304        
2305        </span>
2306</a>
2307        
2308    </div>
2309</div>
2310        
2311            <div class="post">
2312    <div class="post-inner">
2313        
2314            <p class="series-annotation">Core Data</p>
2315        
2316
2317        <h2 class="heading"><a href="/blog/41/my-approach-to-setting-up-core-data-stack">My approach to setting up Core Data stack</a></h2>
2318
2319        <p class="annotation text-secondary">This post details how I set up Core Data in my projects and also explains what and why. It includes working with background context.</p>
2320
2321        
2322            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2323    <span class="badge"
2324          style="background-color:#f35736">Swift &amp; iOS
2325        
2326        </span>
2327</a>
2328        
2329    </div>
2330</div>
2331        
2332            <div class="post">
2333    <div class="post-inner">
2334        
2335            <p class="series-annotation">EventKit</p>
2336        
2337
2338        <h2 class="heading"><a href="/blog/40/how-to-use-ekeventeditviewcontroller-in-swiftui">How to use EKEventEditViewController in SwiftUI</a></h2>
2339
2340        <p class="annotation text-secondary">My finished solution to bridging this view controller for creating new events and editing existing ones to SwiftUI.</p>
2341
2342        
2343            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2344    <span class="badge"
2345          style="background-color:#f35736">Swift &amp; iOS
2346        
2347        </span>
2348</a>
2349        
2350    </div>
2351</div>
2352        
2353            <div class="post">
2354    <div class="post-inner">
2355        
2356            <p class="series-annotation">EventKit</p>
2357        
2358
2359        <h2 class="heading"><a href="/blog/39/how-to-use-ekcalendarchooser-with-swiftui">How to use EKCalendarChooser with SwiftUI</a></h2>
2360
2361        <p class="annotation text-secondary">Short post showing how to bridge this controller with SwiftUI and get selected calendars.</p>
2362
2363        
2364            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2365    <span class="badge"
2366          style="background-color:#f35736">Swift &amp; iOS
2367        
2368        </span>
2369</a>
2370        
2371    </div>
2372</div>
2373        
2374            <div class="post">
2375    <div class="post-inner">
2376        
2377
2378        <h2 class="heading"><a href="/blog/38/how-to-implement-ocr-with-vision-framework-in-ios-13">How to implement OCR in iOS without 3rd party frameworks</a></h2>
2379
2380        <p class="annotation text-secondary">Learn the basics of getting OCR up and running plus a few tips and extra stuff you may want to know.</p>
2381
2382        
2383            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2384    <span class="badge"
2385          style="background-color:#f35736">Swift &amp; iOS
2386        
2387        </span>
2388</a>
2389        
2390    </div>
2391</div>
2392        
2393            <div class="post">
2394    <div class="post-inner">
2395        
2396            <p class="series-annotation">EventKit</p>
2397        
2398
2399        <h2 class="heading"><a href="/blog/35/how-to-create-ios-reminders-in-code-with-alarms-or-recurrences">How to create iOS reminders programatically with alarms or recurrences</a></h2>
2400
2401        <p class="annotation text-secondary">Learn how you can create reminders that will show in the Reminders app. With alarms and recurrences.</p>
2402
2403        
2404            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2405    <span class="badge"
2406          style="background-color:#f35736">Swift &amp; iOS
2407        
2408        </span>
2409</a>
2410        
2411    </div>
2412</div>
2413        
2414            <div class="post">
2415    <div class="post-inner">
2416        
2417            <p class="series-annotation">WWDC 2020</p>
2418        
2419
2420        <h2 class="heading"><a href="/blog/34/ios-14-quick-dive-into-the-new-uicolorwell">iOS 14: Quick dive into the new UIColorWell</a></h2>
2421
2422        <p class="annotation text-secondary">This looks like an ideal solution if you want to let user pick multiple colors.</p>
2423
2424        
2425            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2426    <span class="badge"
2427          style="background-color:#f35736">Swift &amp; iOS
2428        
2429        </span>
2430</a>
2431        
2432    </div>
2433</div>
2434        
2435            <div class="post">
2436    <div class="post-inner">
2437        
2438            <p class="series-annotation">WKWebView</p>
2439        
2440
2441        <h2 class="heading"><a href="/blog/32/ios-14-what-is-new-for-wkwebview">iOS 14: What is new for WKWebView</a></h2>
2442
2443        <p class="annotation text-secondary">JavaScript sandboxing. Support for JavaScript promises, find on page, zoom and more!</p>
2444
2445        
2446            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2447    <span class="badge"
2448          style="background-color:#f35736">Swift &amp; iOS
2449        
2450        </span>
2451</a>
2452        
2453    </div>
2454</div>
2455        
2456            <div class="post">
2457    <div class="post-inner">
2458        
2459            <p class="series-annotation">CloudKit</p>
2460        
2461
2462        <h2 class="heading"><a href="/blog/31/how-to-setup-cloudkit-subscription-to-get-notified-for-changes">How to setup CloudKit subscription to get notified for changes</a></h2>
2463
2464        <p class="annotation text-secondary">CloudKit subscription offers best way to keep data up-to-date for your user. I will show you the simplest setup to get started in this cloudkit subscriptions tutorial.</p>
2465
2466        
2467            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2468    <span class="badge"
2469          style="background-color:#f35736">Swift &amp; iOS
2470        
2471        </span>
2472</a>
2473        
2474    </div>
2475</div>
2476        
2477            <div class="post">
2478    <div class="post-inner">
2479        
2480            <p class="series-annotation">WWDC 2020</p>
2481        
2482
2483        <h2 class="heading"><a href="/blog/30/checking-out-the-new-phpickerviewcontroller-in-ios-14-to-select-photos-or-videos">How to let user select photos from iOS Photo Library</a></h2>
2484
2485        <p class="annotation text-secondary">Much better experience. No permissions required and multi-select!</p>
2486
2487        
2488            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2489    <span class="badge"
2490          style="background-color:#f35736">Swift &amp; iOS
2491        
2492        </span>
2493</a>
2494        
2495    </div>
2496</div>
2497        
2498            <div class="post">
2499    <div class="post-inner">
2500        
2501            <p class="series-annotation">WWDC 2020</p>
2502        
2503
2504        <h2 class="heading"><a href="/blog/29/first-look-at-the-new-uicolorpickerviewcontroller-in-ios-14">Look at the new UIColorPickerViewController in iOS 14</a></h2>
2505
2506        <p class="annotation text-secondary">Learn how to use the iOS color picker which also features palette of colors and sliders. There is also limited customization.</p>
2507
2508        
2509            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2510    <span class="badge"
2511          style="background-color:#f35736">Swift &amp; iOS
2512        
2513        </span>
2514</a>
2515        
2516    </div>
2517</div>
2518        
2519            <div class="post">
2520    <div class="post-inner">
2521        
2522            <p class="series-annotation">EventKit</p>
2523        
2524
2525        <h2 class="heading"><a href="/blog/28/how-to-save-event-into-users-calendar">How to save event into user&#x27;s calendar</a></h2>
2526
2527        <p class="annotation text-secondary">
2527In this post we will use the EventKit framework to save event to default calendar.</p>
2528
2529        
2530            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2531    <span class="badge"
2532          style="background-color:#f35736">Swift &amp; iOS
2533        
2534        </span>
2535</a>
2536        
2537    </div>
2538</div>
2539        
2540            <div class="post">
2541    <div class="post-inner">
2542        
2543
2544        <h2 class="heading"><a href="/blog/26/how-to-scan-documents-in-under-10-lines-of-code">How to scan documents in under 10 lines of code</a></h2>
2545
2546        <p class="annotation text-secondary">Thanks to VisionKit framework scanning documents is very easy with iOS 13 and up. In this blog post I will show you how.</p>
2547
2548        
2549            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2550    <span class="badge"
2551          style="background-color:#f35736">Swift &amp; iOS
2552        
2553        </span>
2554</a>
2555        
2556    </div>
2557</div>
2558        
2559            <div class="post">
2560    <div class="post-inner">
2561        
2562            <p class="series-annotation">EventKit</p>
2563        
2564
2565        <h2 class="heading"><a href="/blog/24/ios-how-to-load-events-from-users-calendar">How to load events from user&#x27;s calendar</a></h2>
2566
2567        <p class="annotation text-secondary">In this post let&#x27;s go over how to load events that user has in their system calendar. Learn about permissions, requesting access and load the events.</p>
2568
2569        
2570            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2571    <span class="badge"
2572          style="background-color:#f35736">Swift &amp; iOS
2573        
2574        </span>
2575</a>
2576        
2577    </div>
2578</div>
2579        
2580            <div class="post">
2581    <div class="post-inner">
2582        
2583
2584        <h2 class="heading"><a href="/blog/22/how-to-get-file-size-using-filemanager-formatting">How to get file size using FileManager + formatting</a></h2>
2585
2586        <p class="annotation text-secondary">Learn how to get file size URL and also how to format it to human-readable string by special formatter.</p>
2587
2588        
2589            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2590    <span class="badge"
2591          style="background-color:#f35736">Swift &amp; iOS
2592        
2593        </span>
2594</a>
2595        
2596    </div>
2597</div>
2598        
2599            <div class="post">
2600    <div class="post-inner">
2601        
2602
2603        <h2 class="heading"><a href="/blog/21/a-few-autolayout-and-general-uikit-tips-tricks">Improve your UIKit layouts with these tips &amp; tricks</a></h2>
2604
2605        <p class="annotation text-secondary">A collection of tips that I found very helpful when building UI and why to avoid Table View Controller.</p>
2606
2607        
2608            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2609    <span class="badge"
2610          style="background-color:#f35736">Swift &amp; iOS
2611        
2612        </span>
2613</a>
2614        
2615    </div>
2616</div>
2617        
2618            <div class="post">
2619    <div class="post-inner">
2620        
2621
2622        <h2 class="heading"><a href="/blog/20/ios-13-launchoptions-always-nil-this-is-the-reason-solution">iOS 13: launchOptions always nil? This is the reason &amp; solution</a></h2>
2623
2624        <p class="annotation text-secondary">launchOptions have moved and you find them in AppDelegate no longer.</p>
2625
2626        
2627            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2628    <span class="badge"
2629          style="background-color:#f35736">Swift &amp; iOS
2630        
2631        </span>
2632</a>
2633        
2634    </div>
2635</div>
2636        
2637            <div class="post">
2638    <div class="post-inner">
2639        
2640            <p class="series-annotation">WKWebView</p>
2641        
2642
2643        <h2 class="heading"><a href="/blog/19/using-wkwebview-in-headless-mode">Using WKWebView in headless mode</a></h2>
2644
2645        <p class="annotation text-secondary">This is another short post about using `WKWebView`.  Yet another useful use case can be to run `WKWebView` in the background, meaning user does not see it on the screen.</p>
2646
2647        
2648            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2649    <span class="badge"
2650          style="background-color:#f35736">Swift &amp; iOS
2651        
2652        </span>
2653</a>
2654        
2655    </div>
2656</div>
2657        
2658            <div class="post">
2659    <div class="post-inner">
2660        
2661
2662        <h2 class="heading"><a href="/blog/18/how-to-quickly-remove-duplicates-from-array-keep-order">How to quickly remove duplicates from Array &amp; keep order</a></h2>
2663
2664        <p class="annotation text-secondary">Removing duplicates (objects, characters, ..) is swift in Swift thanks to the Set type. We can also leverage NSOrderedSet to not lose order of the items.</p>
2665
2666        
2667            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2668    <span class="badge"
2669          style="background-color:#f35736">Swift &amp; iOS
2670        
2671        </span>
2672</a>
2673        
2674    </div>
2675</div>
2676        
2677            <div class="post">
2678    <div class="post-inner">
2679        
2680
2681        <h2 class="heading"><a href="/blog/17/how-to-add-badge-to-uibarbuttonitem">How to add badge to UIBarButtonItem</a></h2>
2682
2683        <p class="annotation text-secondary">Badges on UIBarButtonItem are not natively supported but we can fix that with custom UILabel.</p>
2684
2685        
2686            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2687    <span class="badge"
2688          style="background-color:#f35736">Swift &amp; iOS
2689        
2690        </span>
2691</a>
2692        
2693    </div>
2694</div>
2695        
2696            <div class="post">
2697    <div class="post-inner">
2698        
2699            <p class="series-annotation">EventKit</p>
2700        
2701
2702        <h2 class="heading"><a href="/blog/16/how-to-use-ekcalendarchooser-in-swift-to-let-user-select-calendar-in-ios">How to use EKCalendarChooser in Swift to let user select calendar in iOS</a></h2>
2703
2704        <p class="annotation text-secondary">Learn about working with EventKitUI to let user select their calendars with the calendar picker. Permissions and delegate explained.</p>
2705
2706        
2707            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2708    <span class="badge"
2709          style="background-color:#f35736">Swift &amp; iOS
2710        
2711        </span>
2712</a>
2713        
2714    </div>
2715</div>
2716        
2717            <div class="post">
2718    <div class="post-inner">
2719        
2720
2721        <h2 class="heading"><a href="/blog/15/how-to-let-users-send-feedback-using-email-app-of-their-choice-in-ios">How to let users send feedback using email app of their choice in iOS</a></h2>
2722
2723        <p class="annotation text-secondary">Don&#x27;t force your users to use Apple Mail. Offer them Outlook, Gmail or Spark.</p>
2724
2725        
2726            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2727    <span class="badge"
2728          style="background-color:#f35736">Swift &amp; iOS
2729        
2730        </span>
2731</a>
2732        
2733    </div>
2734</div>
2735        
2736            <div class="post">
2737    <div class="post-inner">
2738        
2739
2740        <h2 class="heading"><a href="/blog/14/how-to-create-reusable-uiview-with-xib-file-for-easy-design">How to create reusable UIView with .XIB file for easy design</a></h2>
2741
2742        <p class="annotation text-secondary">Create cleaner project by leveraging reusable views with design done in .XIB files.</p>
2743
2744        
2745            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2746    <span class="badge"
2747          style="background-color:#f35736">Swift &amp; iOS
2748        
2749        </span>
2750</a>
2751        
2752    </div>
2753</div>
2754        
2755            <div class="post">
2756    <div class="post-inner">
2757        
2758
2759        <h2 class="heading"><a href="/blog/13/how-to-easily-display-files-like-pdf-documents-images-and-more-in-your-app">How to display files like PDFs, documents, GIFs, images and more in y
2759our app</a></h2>
2760
2761        <p class="annotation text-secondary">Short guide demonstrating how to use QLPreviewController for easy file previews. It even supports ARKit models!</p>
2762
2763        
2764            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2765    <span class="badge"
2766          style="background-color:#f35736">Swift &amp; iOS
2767        
2768        </span>
2769</a>
2770        
2771    </div>
2772</div>
2773        
2774            <div class="post">
2775    <div class="post-inner">
2776        
2777
2778        <h2 class="heading"><a href="/blog/12/how-to-generate-image-previewsthumbnails-of-various-files">How to generate image previews / thumbnails of various files</a></h2>
2779
2780        <p class="annotation text-secondary">Creating previews for files is breeze thanks to Quick Look framework. This quick guide will get you started.</p>
2781
2782        
2783            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2784    <span class="badge"
2785          style="background-color:#f35736">Swift &amp; iOS
2786        
2787        </span>
2788</a>
2789        
2790    </div>
2791</div>
2792        
2793            <div class="post">
2794    <div class="post-inner">
2795        
2796
2797        <h2 class="heading"><a href="/blog/11/advanced-string-comparison-and-sorting-in-swift">Advanced string comparison and sorting in Swift</a></h2>
2798
2799        <p class="annotation text-secondary">Going beyond standard contains and hasPrefix methods. Learn locale-aware sorting and how to ignore diacritics.</p>
2800
2801        
2802            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2803    <span class="badge"
2804          style="background-color:#f35736">Swift &amp; iOS
2805        
2806        </span>
2807</a>
2808        
2809    </div>
2810</div>
2811        
2812            <div class="post">
2813    <div class="post-inner">
2814        
2815
2816        <h2 class="heading"><a href="/blog/10/few-book-recommendations-that-will-make-you-a-better-developer">Few book recommendations that will make you a better developer</a></h2>
2817
2818        <p class="annotation text-secondary">I have selected a few books from many I have read and wrote up why I think these are great choices for iOS developers.</p>
2819
2820        
2821            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2822    <span class="badge"
2823          style="background-color:#f35736">Swift &amp; iOS
2824        
2825        </span>
2826</a>
2827        
2828    </div>
2829</div>
2830        
2831            <div class="post">
2832    <div class="post-inner">
2833        
2834
2835        <h2 class="heading"><a href="/blog/9/easy-way-to-temporarily-cover-whole-screen-of-your-application">How to temporarily cover whole screen of your application</a></h2>
2836
2837        <p class="annotation text-secondary">Learn to hide sensitive information when the app is visible in the app switcher or just prepare something cool for the users.</p>
2838
2839        
2840            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2841    <span class="badge"
2842          style="background-color:#f35736">Swift &amp; iOS
2843        
2844        </span>
2845</a>
2846        
2847    </div>
2848</div>
2849        
2850            <div class="post">
2851    <div class="post-inner">
2852        
2853            <p class="series-annotation">CloudKit</p>
2854        
2855
2856        <h2 class="heading"><a href="/blog/6/saving-files-into-users-icloud-drive-using-filemanager">Saving files into user’s iCloud Drive using FileManager</a></h2>
2857
2858        <p class="annotation text-secondary">This is an example of accessing iCloud Drive and saving files there. Learn how to save files with my guide in iOS.</p>
2859
2860        
2861            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2862    <span class="badge"
2863          style="background-color:#f35736">Swift &amp; iOS
2864        
2865        </span>
2866</a>
2867        
2868    </div>
2869</div>
2870        
2871            <div class="post">
2872    <div class="post-inner">
2873        
2874
2875        <h2 class="heading"><a href="/blog/5/how-to-implement-swipe-to-delete-action-with-custom-icon">How to implement swipe to delete action with custom icon in TableView</a></h2>
2876
2877        <p class="annotation text-secondary">Learn how to use trash icon (or any other image) instead of the standard &quot;Delete&quot; text.</p>
2878
2879        
2880            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2881    <span class="badge"
2882          style="background-color:#f35736">Swift &amp; iOS
2883        
2884        </span>
2885</a>
2886        
2887    </div>
2888</div>
2889        
2890            <div class="post">
2891    <div class="post-inner">
2892        
2893            <p class="series-annotation">EventKit</p>
2894        
2895
2896        <h2 class="heading"><a href="/blog/3/how-to-use-ekeventeditviewcontroller-in-swift-to-let-user-save-event-to-ios-calendar">How to use EKEventEditViewController in Swift to let user save event to iOS calendar</a></h2>
2897
2898        <p class="annotation text-secondary">Short example showcasing the usage of EKEventEditViewController to let user edit and add events to iOS calendar.</p>
2899
2900        
2901            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2902    <span class="badge"
2903          style="background-color:#f35736">Swift &amp; iOS
2904        
2905        </span>
2906</a>
2907        
2908    </div>
2909</div>
2910        
2911            <div class="post">
2912    <div class="post-inner">
2913        
2914
2915        <h2 class="heading"><a href="/blog/2/four-tips-to-level-up-your-swift">Four tips to level up your Swift</a></h2>
2916
2917        <p class="annotation text-secondary">How to unwrap optionals in a loop. Utilize @autoclosures, cleaner range checking and easy randomness.</p>
2918
2919        
2920            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2921    <span class="badge"
2922          style="background-color:#f35736">Swift &amp; iOS
2923        
2924        </span>
2925</a>
2926        
2927    </div>
2928</div>
2929        
2930            <div class="post">
2931    <div class="post-inner">
2932        
2933            <p class="series-annotation">WKWebView</p>
2934        
2935
2936        <h2 class="heading"><a href="/blog/1/how-to-open-target_blank-links-in-wkwebview-in-ios">How to open target=&quot;_blank&quot; links in WKWebView in iOS</a></h2>
2937
2938        <p class="annotation text-secondary">Short post explaining why by default target _blank links don&#x27;t do anything and how to fix it with example code.</p>
2939
2940        
2941            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
2942    <span class="badge"
2943          style="background-color:#f35736">Swift &amp; iOS
2944        
2945        </span>
2946</a>
2947        
2948    </div>
2949</div>
2950        
2951
2952    
2953</section>
2954
2955    
2956        
2957    
2958
2959
2960</div>
2961
2962
2963
2964    <footer>
2965        <a href="/blog/feed/rss" target="_blank">RSS <small>(iOS)</small></a>
2966        <span class="bullet-separator">•</span>
2967        <a href="/blog/feed/all-rss" target="_blank">RSS <small>(all)</small></a>
2968        <span class="bullet-separator">•</span>
2969        <a href="/blog/feed/django" target="_blank">RSS <small>(Django)</small></a>
2970        <span class="bullet-separator">•</span>
2971        <a href="/sitemap" target="_blank">Sitemap</a>
2972    </footer>
2973
2974
2975<script defer
2976  src="https://cdn.telemetrydeck.com/websdk/telemetrydeck.min.js"
2977  data-app-id="E6071C24-30CF-4FBF-9E6F-942FEDDEED35"
2978></script>
2978
2979
2980</body>
2981</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.