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 & 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 & 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 & 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 NÄmeÄek's 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 "GameWidgets" 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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'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 & 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 & 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't straightforward. Let'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 & 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 & 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 & 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 "marketing" ideas for your app</a></h2> 1022 1023 <p class="annotation text-secondary">Ideas to get you started when you want to "do marketing" 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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'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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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'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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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'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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & animations with Compositional Layout</a></h2> 1706 1707 <p class="annotation text-secondary">Let'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 & 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 & 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'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 & 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'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 & 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 & 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 & 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 & 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'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 & 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 & 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 & 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'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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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'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 & 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 & 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 & 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'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 & 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 & 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'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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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'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 & 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 & 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's calendar</a></h2> 2566 2567 <p class="annotation text-secondary">In this post let'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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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'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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 & 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 "Delete" 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 & 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 & 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 & 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="_blank" links in WKWebView in iOS</a></h2> 2937 2938 <p class="annotation text-secondary">Short post explaining why by default target _blank links don'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 & 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.