Title: Peter Friese
Open Graph Title: Peter Friese
X Title: Peter Friese
Description: Welcome to peterfriese.dev!
Open Graph Description: Welcome to peterfriese.dev!
X Description: Welcome to peterfriese.dev!
Opengraph URL: https://peterfriese.dev/
X: @peterfriese
Generator: Astro v5.18.1
Domain: peterfriese.dev
| author | Peter Friese |
| title | Peter Friese |
| og:type | website |
| og:locale | en_UK |
| og:site_name | Peter Friese |
| og:image | https://peterfriese.dev/blog-placeholder.jpg |
| twitter:card | summary_large_image |
| twitter:url | https://peterfriese.dev/ |
| twitter:image | https://peterfriese.dev/blog-placeholder.jpg |
Links:
| home | https://peterfriese.dev/ |
| About | https://peterfriese.dev/about |
| About | https://peterfriese.dev/about |
| Books | https://peterfriese.dev/books |
| Tutorials | https://peterfriese.dev/tutorials |
| Daily | https://peterfriese.dev/daily-read |
| Newsletter | https://peterfriese.dev/newsletter |
| Sponsor | https://peterfriese.dev/sponsor |
| Agentic Coding in Xcode with Gemini CLI Build apps with AI assistance in Xcode using Gemini CLI Feb 11, 2026 | https://peterfriese.dev/blog/2026/agentic-coding-xcode-geminicli |
| Turn Your Photos Into Miniature Magic with Nano Banana Build stunning image generation apps in iOS with just a few lines of Swift Sep 12, 2025 | https://peterfriese.dev/blog/2025/gemini-nano-banana-ios |
| Reverse-Engineering Xcode's Coding Intelligence prompt A look under the hood Jun 21, 2025 | https://peterfriese.dev/blog/2025/reveng-xcode-coding-intelligence |
| Extracting structured data from PDFs using Gemini 2.0 and Genkit Feb 16, 2025 | https://peterfriese.dev/blog/2025/gemini-genkit-pdf-structured-data |
| Understanding SwiftUI Preferences SwiftUI Parent / Child View Communication Feb 3, 2025 | https://peterfriese.dev/blog/2025/swiftui-preferences-swift6 |
| Creating a reusable action menu component in SwiftUI Jan 20, 2025 | https://peterfriese.dev/blog/2025/swiftui-action-menu |
| Creating custom SF Symbols using the SF Symbols app No Design Skills Needed Jan 9, 2025 | https://peterfriese.dev/blog/2025/custom-sf-symbols |
| Improve your app's UX with SwiftUI's task view modifier Mastering the art of the pause Oct 18, 2024 | https://peterfriese.dev/blog/2024/delay-task-modifier |
| SwiftUI Hero Animations with NavigationTransition Replicating the App Store Hero Animation Jun 21, 2024 | https://peterfriese.dev/blog/2024/hero-animation |
| Styling SwiftUI Views How does view styling work? Jan 6, 2023 | https://peterfriese.dev/blog/2023/swiftui-styling-views |
| Previewing Stateful SwiftUI Views Interactive Previews for your SwiftUI views Dec 21, 2022 | https://peterfriese.dev/blog/2022/swiftui-previews-interactive |
| Asynchronous programming with SwiftUI and Combine The Future of Combine and async/await Mar 21, 2022 | https://peterfriese.dev/blog/2022/combine-vs-async |
| Building a Custom Combine Operator for Exponential Backoff Make your Combine code reusable Mar 3, 2022 | https://peterfriese.dev/blog/2022/swiftui-combine-custom-operators |
| Error Handling with Combine and SwiftUI How to handle errors and expose them to the user Feb 14, 2022 | https://peterfriese.dev/blog/2022/swiftui-combine-networking-errorhandling |
| Calling asynchronous Firebase APIs from Swift Callbacks, Combine, and async/await Jan 31, 2022 | https://peterfriese.dev/blog/2022/firebase-async-calls-swift |
| Optimise your networking layer with Combine Efficient networking for SwiftUI apps Jan 24, 2022 | https://peterfriese.dev/blog/2022/swiftui-combine-networking-efficient |
| Networking with Combine and SwiftUI Getting Started Jan 17, 2022 | https://peterfriese.dev/blog/2022/swiftui-combine-networking-gettingstarted |
| Confirmation Dialogs in SwiftUI Replicating Apple's Reminders app Nov 26, 2021 | https://peterfriese.dev/blog/2021/swiftui-confirmation-dialogs |
| Using View Modifiers to Display Empty State Replicating Apple's Reminders app Nov 12, 2021 | https://peterfriese.dev/blog/2021/swiftui-empty-state |
| Managing Focus in SwiftUI List Views Make It So - Again! Nov 5, 2021 | https://peterfriese.dev/blog/2021/swiftui-list-focus |
| Swipe Actions in SwiftUI 3 The Ultimate Guide to SwiftUI List Views - Part 4 Oct 18, 2021 | https://peterfriese.dev/blog/2021/swiftui-listview-part4 |
| Styling List Views The Ultimate Guide to SwiftUI List Views - Part 3 Sep 29, 2021 | https://peterfriese.dev/blog/2021/swiftui-listview-part3 |
| Building Dynamic Lists in SwiftUI The Ultimate Guide to SwiftUI List Views - Part 2 Sep 6, 2021 | https://peterfriese.dev/blog/2021/swiftui-listview-part2 |
| Building Static Lists in SwiftUI The Ultimate Guide to SwiftUI List Views - Part 1 Aug 30, 2021 | https://peterfriese.dev/blog/2021/swiftui-listview-part1 |
| Cooperative Task Cancellation SwiftUI Concurrency Essentials Jul 11, 2021 | https://peterfriese.dev/blog/2021/swiftui-concurrency-essentials-part2 |
| Getting Started with async/await in SwiftUI SwiftUI Concurrency Essentials Jun 24, 2021 | https://peterfriese.dev/blog/2021/swiftui-concurrency-essentials-part1 |
| SwiftUI List Bindings Behind the Scenes Jun 10, 2021 | https://peterfriese.dev/blog/2021/swiftui-list-item-bindings-behind-the-scenes |
| Mapping Firestore Data in Swift The Comprehensive Guide Mar 23, 2021 | https://peterfriese.dev/blog/2021/firestore-codable-the-comprehensive-guide |
| Using async/await in SwiftUI Swift Evolution Feb 9, 2021 | https://peterfriese.dev/blog/2021/async-await-in-swiftui |
| Firebase Authentication: Migrating User Data Replicating the iOS Reminders App, Part 4 Nov 9, 2020 | https://peterfriese.dev/blog/2020/replicating-reminder-swiftui-firebase-part4 |
| Firebase and the new SwiftUI 2 Application Life Cycle SwiftUI 2 Oct 19, 2020 | https://peterfriese.dev/blog/2020/swiftui-new-app-lifecycle-firebase |
| The Ultimate Guide to the SwiftUI 2 Application Life Cycle SwiftUI 2 Oct 9, 2020 | https://peterfriese.dev/blog/2020/ultimate-guide-to-swiftui2-application-lifecycle |
| Updating Data in Firestore from a SwiftUI app Application Architecture for SwiftUI & Firebase Sep 28, 2020 | https://peterfriese.dev/blog/2020/swiftui-firebase-update-data |
| Fetching API Keys from Property List Files Tips & Tricks for iOS Development Aug 12, 2020 | https://peterfriese.dev/blog/2020/reading-api-keys-from-plist-files |
| Adding Data to Firestore from a SwiftUI app Application Architecture for SwiftUI & Firebase Jul 1, 2020 | https://peterfriese.dev/blog/2020/swiftui-firebase-add-data |
| SwiftUI: Mapping Firestore Documents using Swift Codable Application Architecture for SwiftUI & Firebase May 5, 2020 | https://peterfriese.dev/blog/2020/swiftui-firebase-codable |
| SwiftUI: Fetching Data from Firestore in Real Time Application Architecture for SwiftUI & Firebase Apr 22, 2020 | https://peterfriese.dev/blog/2020/swiftui-firebase-fetch-data |
| Sign in with Apple using SwiftUI and Firebase Replicating the iOS Reminders App, Part 3 Mar 24, 2020 | https://peterfriese.dev/blog/2020/replicating-reminder-swiftui-firebase-part3 |
| Connecting SwiftUI and Cloud Firestore Replicating the iOS Reminders App, Part 2 Feb 5, 2020 | https://peterfriese.dev/blog/2020/replicating-reminder-swiftui-firebase-part2 |
| SwiftUI, Combine, and Firebase Replicating the iOS Reminders App, Part 1 Jan 18, 2020 | https://peterfriese.dev/blog/2020/replicating-reminder-swiftui-firebase-part1 |
| Essential Xcode Shortcuts for More Efficient Coding Accelerate Your Coding Workflow Oct 7, 2019 | https://peterfriese.dev/blog/2019/xcode-shortcuts |
| SwiftUI + Combine = ❤️ Why SwiftUI and Combine will help you to build better apps Sep 13, 2019 | https://peterfriese.dev/blog/2019/swift-combine-love |
| RSS | https://peterfriese.dev/rss.xml |
| Newsletter | https://peterfriese.dev/newsletter |
| YouTube ↗ | https://www.youtube.com/@PeterFriese |
| Twitter ↗ | https://twitter.com/peterfriese |
| Mastodon ↗ | https://iosdev.space/@peterfriese |
| GitHub ↗ | https://github.com/peterfriese |
| Medium ↗ | https://medium.com/@peterfriese |
| LinkedIn ↗ | https://www.linkedin.com/in/peterfriese/ |
| Xing ↗ | https://www.xing.com/profile/Peter_Friese |
Viewport: width=device-width,initial-scale=1