PageSourceSearch

https://nemecek.be/

html nemecek.be collected 2026-10-02 10:10:00 UTC 40,654 bytes, 1,188 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        
19Blog | 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    
34
35    <meta property="og:title" content="Filip Němeček | Personal site">
36    <meta property="og:image"
37          content="https://nemecek.be/static/images/filip-nemecek-blog-personal-site-header.e826a3915b85.png">
38
39    <meta name="description"
40          content="Personal site of Filip Němeček with blog, selected projects, apps and more">
41
42    <meta property="og:description"
43          content="Personal site of Filip Němeček with blog, selected projects, apps and more">
44
45    <meta property="og:url" content="https://nemecek.be">
46
47    <meta name="twitter:card" content="summary_large_image"/>
48    <meta name="twitter:site" content="@nemecek_f"/>
49    <meta property="twitter:image"
50          content="https://nemecek.be/static/images/filip-nemecek-blog-personal-site-header.e826a3915b85.png">
51    <meta name="twitter:title" content="Filip Němeček | Personal site"/>
52    <meta name="twitter:description"
53          content="Personal site of Filip Němeček with blog, selected projects, apps and more"/>
54
55
56    <link rel="stylesheet" type="text/css" href="/static/css/homepage.72dc86926f0d.css">
57
58
59
60    <link rel="stylesheet" type="text/css" href="/static/css/dark_mode.6b69f8fdcf7a.css">
61</head>
62<body>
63
64
65
66
67<div class="container">
68    
69    
70
71    <section>
72        <div class="homepage-main-section">
73
74            <div style="display: flex" class="homepage-header">
75                <div class="homepage-photo-container">
76                    <div class="homepage-photo-text" style="opacity: 0;">
77                        <small>Wait! That's too close. I am an introvert..</small>
78                    </div>
79                    <img src="/static/images/websitePhoto.d60bed24e623.png" alt="My photo" class="homepage-photo">
80                </div>
81                <div style="max-width: 380px" class="homepage-bio-container">
82                    <h1 style="margin-bottom: 0.3rem; margin-top: 10px">Filip Němeček</h1>
83
84                    
85                        <p style="margin-top: 10px; margin-bottom: 5px">I am primarily an iOS developer, but I also
86                            create stuff with Python
87                            &
88                            Django.
89                            Feel
90                            free to <a href="/pages/contact">reach out</a>.</p>
91                    
92
93                    <span class="homepage-bio-links">
94                    <svg style="width: 11px; height: 11px" fill="currentColor" viewBox="0 0 20 20"
95                         xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd"
96                                                                  d="M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z"
97                                                                  clip-rule="evenodd"></path></svg>
98                    <a rel="me" href="https://iosdev.space/@nemecek_f" target="_blank">Mastodon</a> •
99                        <a rel="me" href="https://bsky.app/profile/nemecek-filip.bsky.social" target="_blank">Bluesky</a> •
100                    <a href="https://github.com/nemecek-filip" target="_blank">GitHub</a> •
101                    <a href="https://indiecatalog.app/developer/1291909818" target="_blank">Apps</a>
102                </span>
103
104                </div>
105
106            </div>
107
108            <div class="search-and-categories">
109                <div class="mb-md">
110                    <form method="get" action="/search/" id="search-form">
111                        <input type="search" name="query" placeholder="Search blog posts, pages..." id="search-input"
112                               class="textbox" required>
113                        <input title="Search" value="Go" type="submit" class="button">
114
115                    </form>
116                </div>
117
118                
119                    <h4 class="categories-header text-secondary" style="margin-top: 15px;">Categories</h4>
120
121                    <div class="badges-container categories-container">
122                        
123                            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
124    <span class="badge"
125          style="background-color:#f35736">Swift &amp; iOS
126        
127            (143)
128        
129        </span>
130</a>
131                        
132                            <a style="text-decoration: none" class="category-badge-container" href="/blog/django">
133    <span class="badge"
134          style="background-color:#053321">Django
135        
136            (24)
137        
138        </span>
139</a>
140                        
141                            <a style="text-decoration: none" class="category-badge-container" href="/blog/impresskit">
142    <span class="badge"
143          style="background-color:#de2180">ImpressKit
144        
145            (16)
146        
147        </span>
148</a>
149                        
150                            <a style="text-decoration: none" class="category-badge-container" href="/blog/projects">
151    <span class="badge"
152          style="background-color:#224087">Projects
153        
154            (11)
155        
156        </span>
157</a>
158                        
159                            <a style="text-decoration: none" class="category-badge-container" href="/blog/notable">
160    <span class="badge"
161          >Notable
162        
163            (6)
164        
165        </span>
166</a>
167                        
168                            <a style="text-decoration: none" class="category-badge-container" href="/blog/apps">
169    <span class="badge"
170          >Apps
171        
172            (5)
173        
174        </span>
175</a>
176                        
177                            <a style="text-decoration: none" class="category-badge-container" href="/blog/software">
178    <span class="badge"
179          >Software
180        
181            (2)
182        
183        </span>
184</a>
185                        
186
187                        <a style="text-decoration: none" class="category-badge-container"
188                           href="/chats/"><span style="background-color: #404FBF" class="badge"><svg
189                                style="width: 18px; height: 18px" class="badge-inline-icon" fill="none" stroke="white"
190                                viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round"
191                                                                                             stroke-linejoin="round"
192                                                                                             stroke-width="2"
193                                                                                             d="M17 8h2a2 2 0 012 2v6a2 2 0 01-2 2h-2v4l-4-4H9a1.994 1.994 0 01-1.414-.586m0 0L11 14h4a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2v4l.586-.586z"></path></svg>
194                            iOS Chats (23)</span>
195                        </a>
196
197                    </div>
198                
199            </div>
200
201        </div>
202
203        <div style="clear: both"></div>
204
205
206    </section>
207
208    <section id="projectsSection" class="mt-xlg">
209        <h2 class="mb-sm">Apps & projects</h2>
210        <section class="projects">
211    <div class="project-card gamingbuddy">
212        <h2 class="mt-0 header"><a class="nondecorated-link" target="_blank"
213                                   href="https://gamingbuddy.eu">GamingBuddy</a></h2>
214
215        <p>App for videogames discovery and tracking. Uses IGDB data and integrates OpenCritic.</p>
216
217        <a class="cta-button" target="_blank" href="https://apps.apple.com/app/game-widgets-get-hyped/id6447783408">App Store</a>
218    </div>
219
220    <div class="project-card switchbuddy">
221        <h2 class="mt-0 header"><a class="nondecorated-link" target="_blank"
222                                   href="https://switchbuddy.app">SwitchBuddy</a></h2>
223
224        <p>Companion app for Nintendo Switch (2). Find new games, transfer screenshots from Switch 1 and more.</p>
225
226        <a class="cta-button" target="_blank" href="https://apps.apple.com/app/switchbuddy/id1563251210">App Store</a>
227    </div>
228
229    <div class="project-card impress-kit">
230        <svg class="project-icon" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
231            <path fill-rule="evenodd"
232                  d="M12 7a1 1 0 110-2h5a1 1 0 011 1v5a1 1 0 11-2 0V8.414l-4.293 4.293a1 1 0 01-1.414 0L8 10.414l-4.293 4.293a1 1 0 01-1.414-1.414l5-5a1 1 0 011.414 0L11 10.586 14.586 7H12z"
233                  clip-rule="evenodd"></path>
234        </svg>
235
236        <div>
237
238            <h2 class="mt-0 header"><a class="nondecorated-link" target="_blank"
239                                       href="https://nemecek.be/slink/impresskit-project"><span
240                    style="color: var(--theme-color)">Impress</span>Kit</a></h2>
241            <p>The solution for all your Press Kit needs.</p>
242            <p>Get more press with nicely-done press kits. Manage press releases.</p>
243        </div>
244
245
246        <a class="cta-button" target="_blank" href="https://nemecek.be/slink/impresskit-project">I want Press Kit</a>
247    </div>
248
249    <div class="project-card ios-feeds">
250        <div>
251            <h2 class="mt-0 header">iOS Feeds</h2>
252            <p>Keep up with content from iOS Dev community in a single place.</p>
253            <p>Articles, videos, podcasts & more.</p>
254        </div>
255
256
257        <a class="cta-button" target="_blank" href="https://nemecek.be/slink/ios-feeds-project">See community news</a>
258    </div>
259
260    <div class="project-card django-blogs">
261        <div>
262            <h2 class="mt-0 header">Django Blogs</h2>
263            <p>Directory of Django bloggers.</p>
264            <p>Also used as source for <a target="_blank" href="https://djangofeeds.com">Django Feeds</a>.</p>
265        </div>
266
267
268        <a class="cta-button" target="_blank" href="https://nemecek.be/slink/django-blogs-project">Discover blogs</a>
269    </div>
270</section>
271    </section>
272
273    
274        <section class="mt-xlg">
275            <h2 style="margin-bottom: 10px">Don't miss</h2>
276            <section class="posts">
277    
278        
279            <div class="post">
280    <div class="post-inner">
281        
282            <p class="series-annotation">App promotion</p>
283        
284
285        <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>
286
287        <p class="annotation text-secondary">Post on reddit without having your posts immediately removed.</p>
288
289        
290            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
291    <span class="badge"
292          style="background-color:#f35736">Swift &amp; iOS
293        
294        </span>
295</a>
296        
297    </div>
298</div>
299        
300            <div class="post">
301    <div class="post-inner">
302        
303
304        <h2 class="heading"><a href="/blog/208/getting-view-size-in-swiftui-without-geometryreader">Getting view size in SwiftUI without GeometryReader</a></h2>
305
306        <p class="annotation text-secondary">We can avoid GeometryReader now! New modifier supports iOS 16+.</p>
307
308        
309            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
310    <span class="badge"
311          style="background-color:#f35736">Swift &amp; iOS
312        
313        </span>
314</a>
315        
316    </div>
317</div>
318        
319            <div class="post">
320    <div class="post-inner">
321        
322
323        <h2 class="heading"><a href="/blog/206/how-to-support-tinted-home-screen-widgets-in-ios-18">
323How to support tinted home screen widgets in iOS 18</a></h2>
324
325        <p class="annotation text-secondary">Marking views to be rendered with colors, handling images and more.</p>
326
327        
328            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
329    <span class="badge"
330          style="background-color:#f35736">Swift &amp; iOS
331        
332        </span>
333</a>
334        
335    </div>
336</div>
337        
338            <div class="post">
339    <div class="post-inner">
340        
341
342        <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>
343
344        <p class="annotation text-secondary">Quite a lot higher trial start rate with lower conversion percentage.</p>
345
346        
347            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
348    <span class="badge"
349          style="background-color:#f35736">Swift &amp; iOS
350        
351        </span>
352</a>
353        
354    </div>
355</div>
356        
357            <div class="post">
358    <div class="post-inner">
359        
360
361        <h2 class="heading"><a href="/blog/203/impresskit-now-supports-table-of-contents">ImpressKit now supports table of contents</a></h2>
362
363        <p class="annotation text-secondary">I am happy to announce new Markdown-related improvement when creating Press Kits and Press Releases with ImpressKit.</p>
364
365        
366            <a style="text-decoration: none" class="category-badge-container" href="/blog/impresskit">
367    <span class="badge"
368          style="background-color:#de2180">ImpressKit
369        
370        </span>
371</a>
372        
373    </div>
374</div>
375        
376            <div class="post">
377    <div class="post-inner">
378        
379
380        <h2 class="heading"><a href="/blog/200/finding-games-without-remembering-the-name">Finding games without remembering the name</a></h2>
381
382        <p class="annotation text-secondary">Short intro to experimental projects I did over the weekend.</p>
383
384        
385            <a style="text-decoration: none" class="category-badge-container" href="/blog/projects">
386    <span class="badge"
387          style="background-color:#224087">Projects
388        
389        </span>
390</a>
391        
392    </div>
393</div>
394        
395            <div class="post">
396    <div class="post-inner">
397        
398
399        <h2 class="heading"><a href="/blog/192/hotfixing-widgets-for-ios-17-containerbackground-padding">Hotfixing widgets for iOS 17: containerBackground + padding</a></h2>
400
401        <p class="annotation text-secondary">How to fix the issue with background and extra padding.</p>
402
403        
404            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
405    <span class="badge"
406          style="background-color:#f35736">Swift &amp; iOS
407        
408        </span>
409</a>
410        
411    </div>
412</div>
413        
414            <div class="post">
415    <div class="post-inner">
416        
417
418        <h2 class="heading"><a href="/blog/191/impresskit-nominated-in-hacking-with-swift-swift-community-awards">ImpressKit nominated in Hacking with Swift: Swift Community Awards</a></h2>
419
420        <p class="annotation text-secondary">&quot;Best Third-Party Service&quot; 🤯🤯🤯</p>
421
422        
423            <a style="text-decoration: none" class="category-badge-container" href="/blog/impresskit">
424    <span class="badge"
425          style="background-color:#de2180">ImpressKit
426        
427        </span>
428</a>
429        
430    </div>
431</div>
432        
433            <div class="post">
434    <div class="post-inner">
435        
436
437        <h2 class="heading"><a href="/blog/189/wip-sharing-data-with-uiactivityviewcontroller-tips-tricks">Sharing data with UIActivityViewController - tips &amp; tricks</a></h2>
438
439        <p class="annotation text-secondary">All the tips and tricks I have discovered so far. Better previews, subtitles. PNG via AirDrop &amp; more.</p>
440
441        
442            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
443    <span class="badge"
444          style="background-color:#f35736">Swift &amp; iOS
445        
446        </span>
447</a>
448        
449    </div>
450</div>
451        
452            <div class="post">
453    <div class="post-inner">
454        
455
456        <h2 class="heading"><a href="/blog/186/the-weirdest-bugcrash-in-widgets">The weirdest bug/crash in widgets?</a></h2>
457
458        <p class="annotation text-secondary">Mysterious crash and ChatGPT to the rescue.</p>
459
460        
461            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
462    <span class="badge"
463          style="background-color:#f35736">Swift &amp; iOS
464        
465        </span>
466</a>
467        
468    </div>
469</div>
470        
471            <div class="post">
472    <div class="post-inner">
473        
474
475        <h2 class="heading"><a href="/blog/171/dynamic-island-and-live-activities-quick-start-tutorial">
475Dynamic Island (and Live Activities): Quick start tutorial</a></h2>
476
477        <p class="annotation text-secondary">All the steps you need to start creating your own Dynamic Island UIs!</p>
478
479        
480            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
481    <span class="badge"
482          style="background-color:#f35736">Swift &amp; iOS
483        
484        </span>
485</a>
486        
487    </div>
488</div>
489        
490            <div class="post">
491    <div class="post-inner">
492        
493            <p class="series-annotation">App promotion</p>
494        
495
496        <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>
497
498        <p class="annotation text-secondary">Without hoping that some journalist will write about it.</p>
499
500        
501            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
502    <span class="badge"
503          style="background-color:#f35736">Swift &amp; iOS
504        
505        </span>
506</a>
507        
508    </div>
509</div>
510        
511            <div class="post">
512    <div class="post-inner">
513        
514
515        <h2 class="heading"><a href="/blog/88/uimenu-comprehensive-guide">UIMenu: Comprehensive guide</a></h2>
516
517        <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>
518
519        
520            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
521    <span class="badge"
522          style="background-color:#f35736">Swift &amp; iOS
523        
524        </span>
525</a>
526        
527    </div>
528</div>
529        
530
531    
532</section>
533        </section>
534
535
536    
537
538    <section>
539        <h2 class="mt-xlg" style="margin-bottom: 10px">Latest posts</h2>
540        <section class="posts">
541    
542        
543            <div class="post">
544    <div class="post-inner">
545        
546            <p class="series-annotation">App promotion</p>
547        
548
549        <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>
550
551        <p class="annotation text-secondary">Post on reddit without having your posts immediately removed.</p>
552
553        
554            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
555    <span class="badge"
556          style="background-color:#f35736">Swift &amp; iOS
557        
558        </span>
559</a>
560        
561    </div>
562</div>
563        
564            <div class="post">
565    <div class="post-inner">
566        
567
568        <h2 class="heading"><a href="/blog/213/how-new-game-discovery-works-in-gamingbuddy">How new game discovery works in GamingBuddy</a></h2>
569
570        <p class="annotation text-secondary">GamingBuddy makes it easy to find new games to play if you like to try a variety of titles, but also don’t follow video game news daily. In this post, I want to highlight some ways that the app helps.</p>
571
572        
573            <a style="text-decoration: none" class="category-badge-container" href="/blog/apps">
574    <span class="badge"
575          >Apps
576        
577        </span>
578</a>
579        
580    </div>
581</div>
582        
583            <div class="post">
584    <div class="post-inner">
585        
586
587        <h2 class="heading"><a href="/blog/212/solving-bots-registration-problem-by-reinventing-the-wheel">Solving bots registration problem by “reinventing the wheel”</a></h2>
588
589        <p class="annotation text-secondary">Creating simple and custom “captcha” that proved surprisingly useful.</p>
590
591        
592            <a style="text-decoration: none" class="category-badge-container" href="/blog/django">
593    <span class="badge"
594          style="background-color:#053321">Django
595        
596        </span>
597</a>
598        
599    </div>
600</div>
601        
602            <div class="post">
603    <div class="post-inner">
604        
605
606        <h2 class="heading"><a href="/blog/211/gamingbuddy-version-40-testflight-is-available">GamingBuddy version 4.0 TestFlight is available</a></h2>
607
608        <p class="annotation text-secondary">See what&#x27;s new and how to get it.</p>
609
610        
611            <a style="text-decoration: none" class="category-badge-container" href="/blog/apps">
612    <span class="badge"
613          >Apps
614        
615        </span>
616</a>
617        
618    </div>
619</div>
620        
621            <div class="post">
622    <div class="post-inner">
623        
624
625        <h2 class="heading"><a href="/blog/210/how-i-almost-lost-my-ring-fit-adventure-save-data">How I almost lost my Ring Fit Adventure save data</a></h2>
626
627        <p class="annotation text-secondary">Fixed with one &quot;weird trick&quot;.</p>
628
629        
630            <a style="text-decoration: none" class="category-badge-container" href="/blog/gaming">
631    <span class="badge"
632          >Gaming
633        
634        </span>
635</a>
636        
637    </div>
638</div>
639        
640            <div class="post">
641    <div class="post-inner">
642        
643
644        <h2 class="heading"><a href="/blog/209/swiftui-kfimage-notes">
644SwiftUI KFImage notes</a></h2>
645
646        <p class="annotation text-secondary">Just a few snippets to reference later when using Kingfisher library.</p>
647
648        
649            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
650    <span class="badge"
651          style="background-color:#f35736">Swift &amp; iOS
652        
653        </span>
654</a>
655        
656    </div>
657</div>
658        
659            <div class="post">
660    <div class="post-inner">
661        
662
663        <h2 class="heading"><a href="/blog/208/getting-view-size-in-swiftui-without-geometryreader">Getting view size in SwiftUI without GeometryReader</a></h2>
664
665        <p class="annotation text-secondary">We can avoid GeometryReader now! New modifier supports iOS 16+.</p>
666
667        
668            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
669    <span class="badge"
670          style="background-color:#f35736">Swift &amp; iOS
671        
672        </span>
673</a>
674        
675    </div>
676</div>
677        
678            <div class="post">
679    <div class="post-inner">
680        
681
682        <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>
683
684        <p class="annotation text-secondary">Careful how you name your attributes...</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
698    
699</section>
700    </section>
701
702    <section class="mt-xlg">
703        <h2 style="margin-bottom: 10px; margin-top: 5px">Explore posts by Series</h2>
704
705        <div class="badges-container">
706
707            
708                <a style="text-decoration: none" class="category-badge-container"
709                   href="/blog/series/app-promotion">
710                    <span class="badge series-badge"
711                    >App promotion <small>(19)</small></span>
712                </a>
713            
714                <a style="text-decoration: none" class="category-badge-container"
715                   href="/blog/series/building-saas">
716                    <span class="badge series-badge"
717                    >Building SaaS <small>(2)</small></span>
718                </a>
719            
720                <a style="text-decoration: none" class="category-badge-container"
721                   href="/blog/series/cloudkit">
722                    <span class="badge series-badge"
723                    >CloudKit <small>(2)</small></span>
724                </a>
725            
726                <a style="text-decoration: none" class="category-badge-container"
727                   href="/blog/series/codable">
728                    <span class="badge series-badge"
729                    >Codable <small>(2)</small></span>
730                </a>
731            
732                <a style="text-decoration: none" class="category-badge-container"
733                   href="/blog/series/compositional-layout">
734                    <span class="badge series-badge"
735                    >Compositional Layout <small>(15)</small></span>
736                </a>
737            
738                <a style="text-decoration: none" class="category-badge-container"
739                   href="/blog/series/core-data">
740                    <span class="badge series-badge"
741                    >Core Data <small>(5)</small></span>
742                </a>
743            
744                <a style="text-decoration: none" class="category-badge-container"
745                   href="/blog/series/diffable">
746                    <span class="badge series-badge"
747                    >Diffable <small>(4)</small></span>
748                </a>
749            
750                <a style="text-decoration: none" class="category-badge-container"
751                   href="/blog/series/django-gems">
752                    <span class="badge series-badge"
753                    >Django Gems <small>(2)</small></span>
754                </a>
755            
756                <a style="text-decoration: none" class="category-badge-container"
757                   href="/blog/series/django-rest-framework">
758                    <span class="badge series-badge"
759                    >Django Rest Framework <small>(3)</small></span>
760                </a>
761            
762                <a style="text-decoration: none" class="category-badge-container"
763                   href="/blog/series/eventkit">
764                    <span class="badge series-badge"
765                    >EventKit <small>(9)</small></span>
766                </a>
767            
768                <a style="text-decoration: none" class="category-badge-container"
769                   href="/blog/series/evolving-switchbuddy">
770                    <span class="badge series-badge"
771                    >Evolving SwitchBuddy <small>(2)</small></span>
772                </a>
773            
774                <a style="text-decoration: none" class="category-badge-container"
775                   href="/blog/series/swiftui">
776                    <span class="badge series-badge"
777                    >SwiftUI <small>(2)</small></span>
778                </a>
779            
780                <a style="text-decoration: none" class="category-badge-container"
781                   href="/blog/series/useful-tools">
782                    <span class="badge series-badge"
783                    >Useful tools <small>(2)</small></span>
784                </a>
785            
786                <a style="text-decoration: none" class="category-badge-container"
787                   href="/blog/series/wkwebview">
788                    <span class="badge series-badge"
789                    >WKWebView <small>(4)</small></span>
790                </a>
791            
792                <a style="text-decoration: none" class="category-badge-container"
793                   href="/blog/series/wwdc-2020">
794                    <span class="badge series-badge"
795                    >WWDC 2020 <small>(3)</small></span>
796                </a>
797            
798                <a style="text-decoration: none" class="category-badge-container"
799                   href="/blog/series/wwdc-21">
800                    <span class="badge series-badge"
801                    >WWDC 21 <small>(6)</small></span>
802                </a>
803            
804                <a style="text-decoration: none" class="category-badge-container"
805                   href="/blog/series/wwdc-22">
806                    <span class="badge series-badge"
807                    >WWDC 22 <small>(3)</small></span>
808                </a>
809            
810
811            
812                <a style="text-decoration: none" class="category-badge-container"
813                   href="/blog/series/">
814                    <span class="badge series-badge"
815                    >All series</span>
816                </a>
817            
818
819        </div>
820    </section>
821
822
823
824    <article>
825        <h2 class="cards-padding" style="margin-bottom: 5px">More posts</h2>
826        <section class="posts">
827    
828        
829            <div class="post">
830    <div class="post-inner">
831        
832
833        <h2 class="heading"><a href="/blog/206/how-to-support-tinted-home-screen-widgets-in-ios-18">How to support tinted home screen widgets in iOS 18</a></h2>
834
835        <p class="annotation text-secondary">Marking views to be rendered with colors, handling images and more.</p>
836
837        
838            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
839    <span class="badge"
840          style="background-color:#f35736">Swift &amp; iOS
841        
842        </span>
843</a>
844        
845    </div>
846</div>
847        
848            <div class="post">
849    <div class="post-inner">
850        
851
852        <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>
853
854        <p class="annotation text-secondary">Quite a lot higher trial start rate with lower conversion percentage.</p>
855
856        
857            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
858    <span class="badge"
859          style="background-color:#f35736">Swift &amp; iOS
860        
861        </span>
862</a>
863        
864    </div>
865</div>
866        
867            <div class="post">
868    <div class="post-inner">
869        
870
871        <h2 class="heading"><a href="/blog/204/fixing-glossy-keys-on-my-macbook">Fixing “glossy” keys on my MacBook</a></h2>
872
873        <p class="annotation text-secondary">The problem and two solutions that I have tried.</p>
874
875        
876            <a style="text-decoration: none" class="category-badge-container" href="/blog/hardware">
877    <span class="badge"
878          >Hardware
879        
880        </span>
881</a>
882        
883    </div>
884</div>
885        
886            <div class="post">
887    <div class="post-inner">
888        
889
890        <h2 class="heading"><a href="/blog/203/impresskit-now-supports-table-of-contents">ImpressKit now supports table of contents</a></h2>
891
892        <p class="annotation text-secondary">I am happy to announce new Markdown-related improvement when creating Press Kits and Press Releases with ImpressKit.</p>
893
894        
895            <a style="text-decoration: none" class="category-badge-container" href="/blog/impresskit">
896    <span class="badge"
897          style="background-color:#de2180">ImpressKit
898        
899        </span>
900</a>
901        
902    </div>
903</div>
904        
905            <div class="post">
906    <div class="post-inner">
907        
908            <p class="series-annotation">SwiftUI</p>
909        
910
911        <h2 class="heading"><a href="/blog/202/fixing-weird-shadow-animation-glitch-in-swiftui">Fixing weird shadow animation glitch in SwiftUI</a></h2>
912
913        <p class="annotation text-secondary">My “glow” animation started going wrong when switching tabs in a tab bar.</p>
914
915        
916            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
917    <span class="badge"
918          style="background-color:#f35736">Swift &amp; iOS
919        
920        </span>
921</a>
922        
923    </div>
924</div>
925        
926            <div class="post">
927    <div class="post-inner">
928        
929
930        <h2 class="heading"><a href="/blog/201/how-to-update-widgets-for-standby-mode">How to update widgets for StandBy mode</a></h2>
931
932        <p class="annotation text-secondary">Short blog post about supporting StandBy mode introduced in iOS 17.</p>
933
934        
935            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
936    <span class="badge"
937          style="background-color:#f35736">Swift &amp; iOS
938        
939        </span>
940</a>
941        
942    </div>
943</div>
944        
945            <div class="post">
946    <div class="post-inner">
947        
948
949        <h2 class="heading"><a href="/blog/200/finding-games-without-remembering-the-name">Finding games without remembering the name</a></h2>
950
951        <p class="annotation text-secondary">Short intro to experimental projects I did over the weekend.</p>
952
953        
954            <a style="text-decoration: none" class="category-badge-container" href="/blog/projects">
955    <span class="badge"
956          style="background-color:#224087">Projects
957        
958        </span>
959</a>
960        
961    </div>
962</div>
963        
964            <div class="post">
965    <div class="post-inner">
966        
967            <p class="series-annotation">App promotion</p>
968        
969
970        <h2 class="heading"><a href="/blog/199/exploring-seo-route-for-apps-promotion">Exploring “SEO” route for apps promotion</a></h2>
971
972        <p class="annotation text-secondary"></p>
973
974        
975            <a style="text-decoration: none" class="category-badge-container" href="/blog/apps">
976    <span class="badge"
977          >Apps
978        
979        </span>
980</a>
981        
982    </div>
983</div>
984        
985            <div class="post">
986    <div class="post-inner">
987        
988
989        <h2 class="heading"><a href="/blog/198/my-appearance-on-the-django-chat-podcast">My appearance on the Django Chat podcast</a></h2>
990
991        <p class="annotation text-secondary"></p>
992
993        
994            <a style="text-decoration: none" class="category-badge-container" href="/blog/django">
995    <span class="badge"
996          style="background-color:#053321">Django
997        
998        </span>
999</a>
1000        
1001    </div>
1002</div>
1003        
1004            <div class="post">
1005    <div class="post-inner">
1006        
1007
1008        <h2 class="heading"><a href="/blog/197/impresskit-now-offers-analytics-with-telemetrydeck-integration">ImpressKit now offers analytics with TelemetryDeck integration</a></h2>
1009
1010        <p class="annotation text-secondary"></p>
1011
1012        
1013            <a style="text-decoration: none" class="category-badge-container" href="/blog/impresskit">
1014    <span class="badge"
1015          style="background-color:#de2180">ImpressKit
1016        
1017        </span>
1018</a>
1019        
1020    </div>
1021</div>
1022        
1023            <div class="post">
1024    <div class="post-inner">
1025        
1026
1027        <h2 class="heading"><a href="/blog/196/pr-gamingbuddy-adds-sharing-powered-by-universal-links-opencritic-integration">[PR] GamingBuddy adds sharing powered by Universal Links, OpenCritic integration</a></h2>
1028
1029        <p class="annotation text-secondary">New version 1.5.0 of game discovery app GamingBuddy lets users easily share game recommendations with friends. Plus, it features OpenCritic to see scores and reviews for new games easily.</p>
1030
1031        
1032            <a style="text-decoration: none" class="category-badge-container" href="/blog/apps">
1033    <span class="badge"
1034          >Apps
1035        
1036        </span>
1037</a>
1038        
1039    </div>
1040</div>
1041        
1042            <div class="post">
1043    <div class="post-inner">
1044        
1045            <p class="series-annotation">UX Diary</p>
1046        
1047
1048        <h2 class="heading"><a href="/blog/195/ux-diary-onboarding-without-onboarding">UX Diary: Onboarding without onboarding</a></h2>
1049
1050        <p class="annotation text-secondary">About an approach I took in &quot;GameWidgets&quot; to better onboarding users into the app.</p>
1051
1052        
1053            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1054    <span class="badge"
1055          style="background-color:#f35736">Swift &amp; iOS
1056        
1057        </span>
1058</a>
1059        
1060    </div>
1061</div>
1062        
1063            <div class="post">
1064    <div class="post-inner">
1065        
1066
1067        <h2 class="heading"><a href="/blog/194/impresskit-not-supports-markdown-tables">ImpressKit now supports Markdown tables</a></h2>
1068
1069        <p class="annotation text-secondary">You can now make your Press Kits even clearer for journalists.</p>
1070
1071        
1072            <a style="text-decoration: none" class="category-badge-container" href="/blog/impresskit">
1073    <span class="badge"
1074          style="background-color:#de2180">ImpressKit
1075        
1076        </span>
1077</a>
1078        
1079    </div>
1080</div>
1081        
1082            <div class="post">
1083    <div class="post-inner">
1084        
1085
1086        <h2 class="heading"><a href="/blog/193/switchbuddy-updated-with-game-prices-tracking-notifications-lock-screen-widgets">SwitchBuddy updated with game prices tracking, notifications, Lock Screen widgets</a></h2>
1087
1088        <p class="annotation text-secondary">A brief overview of the new features.</p>
1089
1090        
1091            <a style="text-decoration: none" class="category-badge-container" href="/blog/apps">
1092    <span class="badge"
1093          >Apps
1094        
1095        </span>
1096</a>
1097        
1098    </div>
1099</div>
1100        
1101            <div class="post">
1102    <div class="post-inner">
1103        
1104
1105        <h2 class="heading"><a href="/blog/192/hotfixing-widgets-for-ios-17-containerbackground-padding">
1105Hotfixing widgets for iOS 17: containerBackground + padding</a></h2>
1106
1107        <p class="annotation text-secondary">How to fix the issue with background and extra padding.</p>
1108
1109        
1110            <a style="text-decoration: none" class="category-badge-container" href="/blog/swift-and-ios">
1111    <span class="badge"
1112          style="background-color:#f35736">Swift &amp; iOS
1113        
1114        </span>
1115</a>
1116        
1117    </div>
1118</div>
1119        
1120            <div class="post">
1121    <div class="post-inner">
1122        
1123
1124        <h2 class="heading"><a href="/blog/191/impresskit-nominated-in-hacking-with-swift-swift-community-awards">ImpressKit nominated in Hacking with Swift: Swift Community Awards</a></h2>
1125
1126        <p class="annotation text-secondary">&quot;Best Third-Party Service&quot; 🤯🤯🤯</p>
1127
1128        
1129            <a style="text-decoration: none" class="category-badge-container" href="/blog/impresskit">
1130    <span class="badge"
1131          style="background-color:#de2180">ImpressKit
1132        
1133        </span>
1134</a>
1135        
1136    </div>
1137</div>
1138        
1139            <div class="post">
1140    <div class="post-inner">
1141        
1142
1143        <h2 class="heading"><a href="/blog/190/how-impresskit-helps-you-avoid-common-press-kit-mistakes">How ImpressKit helps you avoid common Press Kit mistakes</a></h2>
1144
1145        <p class="annotation text-secondary">Focus on what truly matters for a great press kit.</p>
1146
1147        
1148            <a style="text-decoration: none" class="category-badge-container" href="/blog/impresskit">
1149    <span class="badge"
1150          style="background-color:#de2180">ImpressKit
1151        
1152        </span>
1153</a>
1154        
1155    </div>
1156</div>
1157        
1158
1159    
1160</section>
1161    </article>
1162
1163    
1164
1165    
1165<script src="/static/js/homepage.28dd2894b5f1.js"></script>
1165
1166
1167</div>
1168
1169
1170
1171    <footer>
1172        <a href="/blog/feed/rss" target="_blank">RSS <small>(iOS)</small></a>
1173        <span class="bullet-separator">•</span>
1174        <a href="/blog/feed/all-rss" target="_blank">RSS <small>(all)</small></a>
1175        <span class="bullet-separator">•</span>
1176        <a href="/blog/feed/django" target="_blank">RSS <small>(Django)</small></a>
1177        <span class="bullet-separator">•</span>
1178        <a href="/sitemap" target="_blank">Sitemap</a>
1179    </footer>
1180
1181
1182<script defer
1183  src="https://cdn.telemetrydeck.com/websdk/telemetrydeck.min.js"
1184  data-app-id="E6071C24-30CF-4FBF-9E6F-942FEDDEED35"
1185></script>
1185
1186
1187</body>
1188</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.