Stacktrace

PODCAST · technology

Stacktrace

A podcast about life and technology from two developers’ perspectives. With John Sundell and Gui Rambo.

  1. 128

    207: “It’s not magic, it’s all in the kernel”

    John builds a cross-platform UI framework in Rust, and Rambo uses the macOS virtualization system to create a virtual iPhone.

  2. 127

    206: “Let’s deprecate Xcode projects”

    Using Android as an iOS user, and the state of Swift Package Manager, including how it could become a more full-featured orchestration tool for Xcode projects.

  3. 126

    205: “The 2026 edition”

    On this first episode of the 2026 season, John and Rambo discuss how they’re using AI agents when working on different projects, and how to approach learning new programming languages in 2026.

  4. 125

    204: “Ship a prompt”

    Stacktrace is back! John and Rambo check their hype levels for WWDC24, and discuss how AI might fit into Apple’s plans for this year’s releases. Also, Xcode wishes, and the challenges of building distributed systems.

  5. 124

    203: “The Sherlock Holmes of debugging”

    John and Rambo reflect on what they’ve been learning and how they’ve been aiming to improve as developers during 2023. Also, tips for getting better at debugging, deploying generative AI within existing apps, and are view models really such a good fit for SwiftUI views?

  6. 123

    202: “Incrementing the integer”

    Reactions to Apple’s “Scary fast” event, Rambo’s review of the iPhone 15 Pro Max, and under the hood of CleanupBuddy.

  7. 122

    201: “USB-C utopia”

    Will this year’s iPhones switch to USB-C instead of Lightning, what could an Apple Watch Ultra-style action button be used for on a phone, and will Apple give us another look at the Vision Pro at their upcoming “Wanderlust” event?

  8. 121

    200: “Expectation recalibration”

    Rambo’s custom implementation of macOS desktop widgets and how they relate to Apple’s new built-in system feature, why the experience of using SwiftUI depends so much on the environment it’s being used in, and a mini-review of the ASUS ROG Ally.

  9. 120

    199: “Taking the cover off the API”

    John and Rambo start diving into the new announcements from WWDC23 — including the Apple Vision Pro and visionOS, the new Apple Silicon-powered Mac Pro, as well as many of the updates to Apple’s various operating systems.

  10. 119

    198: “WWDC23 Keynote Poker”

    With the start of WWDC23 just around the corner, John and Rambo share their predictions, hopes, and dreams as to what Apple might introduce during this year’s edition of the conference. It’s Keynote Poker time!

  11. 118

    197: “Perceived fluidity”

    Reducing UI flickering, designing in-app purchase and signup flows, and how adding delays can interestingly make a UI feel more smooth and stable.

  12. 117

    196: “That new Mac smell”

    Integrating AI-powered features into an iOS app, using high refresh rate monitors with a Mac, the advantages of simple abstractions, and how the M1 and M2 Max compare in terms of Xcode work.

  13. 116

    195: “The Swift historian”

    John and Rambo celebrate the 5-year anniversary of the show by looking back at how their work and the technology they use have changed since the beginning of the show. Also, how might things change during the next 5 years, specifically when it comes to machine learning, AR, and the openness of Apple’s platforms?

  14. 115

    194: “Definitely not called a puppy”

    How game controllers communicate with a Mac, handling asynchronous data and actions in SwiftUI, and various ways to use view models within a code base.

  15. 114

    193: “Build your own Mac”

    Thoughts on the most recent Mac Pro rumors, building custom layouts for SwiftUI views in a backward-compatible manner, and the mechanics of making a UI interaction feel responsive and fluid.

  16. 113

    192: “Sundell Silicon”

    Building computers, running A/B tests as an indie developer, using UIKit as a layout tool for SwiftUI views, and deciding whether to use Core Data or a more simple on-disk data storage solution.

  17. 112

    191: “Back to the future”

    Building custom collection view layouts, introducing new features into a legacy code base, and managing patch releases while also working on a major new version of an app at the same time.

  18. 111

    190: “Actual trips to the Dynamic Island“

    John’s got the new AirPods Pro, Rambo’s got the iPhone 14 Pro, so the two share their initial impressions of using these new devices and how features like Dynamic Island and Adaptive Transparency work in day-to-day use.

  19. 110

    189: “The UI equivalent of a singleton”

    John and Rambo discuss three of the key announcements that Apple made during their “Far Out” event — the Apple Watch Ultra, the new AirPods Pro, and the iPhone 14 Pro.

  20. 109

    188: “The least risky of the risky ones”

    With Apple’s upcoming “Far Out” event just around the corner, John and Rambo share their predictions as to what new devices, services and features that might be announced. It’s Apple Keynote Poker time!

  21. 108

    187: “An endless supply of SwiftUI thoughts”

    John gains a new “job title”, Rambo starts working on an iOS version of AirBuddy, and the two discuss how come the Apple developer community tends to be so focused on UI frameworks.

  22. 107

    186: “A relational database using Markdown”

    John and Rambo share their initial impressions of some of the new APIs that were announced at WWDC22, and talk about managing releases, learning when and how to apply generics, and the launch of the Gigahertz podcast network.

  23. 106

    185: “A big ‘finally’ moment”, the WWDC22 keynote review

    John and Rambo discuss Apple’s WWDC22 keynote, and share their first impressions of the new features and APIs that were announced.

  24. 105

    184: “State of anticipation”

    It’s time for John and Rambo to play another round of Apple Keynote Poker! This time the two place their bets as to what Apple might introduce during the WWDC22 keynote and State of the Union session.

  25. 104

    183: “Let’s just call it MVC”

    Organizing workspaces and hobby projects, the pros and cons of view models and controllers, and rendering Core Animation layers within SwiftUI view hierarchies.

  26. 103

    182: “Are you ready to enter a rabbit hole?”

    A deep dive into how WidgetKit and SwiftUI’s serialization mechanism works under the hood, why John removed the ads from the Swift by Sundell website, and the discontinuation of the last iPod model.

  27. 102

    181: “The banner effect”

    Balancing refactoring with feature development, abstracting system services, and building delightful UIs.

  28. 101

    180: “Production software is a lot of work”

    Custom macOS virtualization on Apple Silicon, the pros and cons of SwiftUI’s List view, initial thoughts on WWDC 2022, and why Italy is such an amazing place.

  29. 100

    179: “An iMac without the Mac”

    New website, new logo, same show! Rambo shares his initial impressions of using Apple’s new Studio Display, along with some interesting spelunking results. Also, behind the scenes of the show’s new website, and a few web development tips.

  30. 99

    178: “Let’s try something new”

    John and Rambo celebrate the show’s 4th birthday with a big announcement, and then talk about security research, project priorities, and how to combine SwiftUI views with protocol-based observable objects. Download MP3 Hosts Gui on Twitter: @_insideJohn on Twitter: @johnsundell Links The first ever episode of the showThe show’s new email: [email protected]’s blog post about his CVESteve Jobs’s joke about iMovie on the App StoreDemo of John’s SwiftUI-based gameModeling loading states using enumsProtocol inheritance/specializationReflection in Swift Subscribe 🟣 Apple Podcasts🟠 Overcast🟢 Spotify If you have any feedback about the show, feel free to reach out on Twitter or send us an email.

  31. 98

    177: “The stand is included!”

    John and Rambo share their first impressions of the products announced at Apple’s “Peek Performance” event — including the new iPhone SE and iPad Air, M1 Ultra, Mac Studio and the Studio Display. Sponsored by Journey: Get 10% off the new Journey cases for iPhone with code JOURNEY10. Sponsored by Kandji: A modern, cloud-based platform to manage and secure your Mac, iPhone, iPad, and Apple TV devices. Kandji saves IT teams hours of manual work with features like one-click compliance templates and 150+ pre-built automations, apps, and workflows. Request access. Download MP3 Hosts Gui on Twitter: @_insideJohn on Twitter: @johnsundell Links Apple’s “Peek Performance” eventThe Banker on Apple TV+“There is only one MTLDevice on M1 Ultra.”Mac StudioStudio Display Subscribe 🟣 Apple Podcasts🟠 Overcast🟢 Spotify If you have any feedback about the show, feel free to reach out on Twitter or send us an email.

  32. 97

    176: “Extra Keynote Poker”

    On this extra episode of the show, John and Rambo share their bets, hopes and predictions for Apple’s upcoming “Peek Performance” event. Sponsored by Sentry: Actionable iOS error tracking and performance monitoring. Try Sentry for free today. New users can use the code 'STACKTRACE' during sign-up to get 3 free months of Sentry. Sponsored by Kandji: A modern, cloud-based platform to manage and secure your Mac, iPhone, iPad, and Apple TV devices. Kandji saves IT teams hours of manual work with features like one-click compliance templates and 150+ pre-built automations, apps, and workflows. Request access. Download MP3 Hosts Gui on Twitter: @_insideJohn on Twitter: @johnsundell Links UpgradeMac Studio rumors Subscribe 🟣 Apple Podcasts🟠 Overcast🟢 Spotify If you have any feedback about the show, feel free to reach out on Twitter or send us an email.

  33. 96

    175: “A Bluetooth fanboy”

    Unit testing SwiftUI-based views, view and data architecture, as well as a behind the scenes look at Rambo’s home automation setup. Sponsored by Sentry: Actionable iOS error tracking and performance monitoring. Try Sentry for free today. New users can use the code 'STACKTRACE' during sign-up to get 3 free months of Sentry. Download MP3 Hosts Gui on Twitter: @_insideJohn on Twitter: @johnsundell Links Unit testing SwiftUI-based viewsSwiftUI’s state management systemThe “Locks and Keys” principlePhilips HueFibaro switchesZigbeeShelly 2.5 Subscribe 🟣 Apple Podcasts🟠 Overcast🟢 Spotify If you have any feedback about the show, feel free to reach out on Twitter or send us an email.

  34. 95

    174: “An operating system toolkit”

    John and Rambo speculate what the SDK for Apple’s rumored AR/VR devices might look like, and what sort of user experiences that we might be able to build using it. Sponsored by Sentry: Actionable iOS error tracking and performance monitoring. Try Sentry for free today. New users can use the code 'STACKTRACE' during sign-up to get 3 free months of Sentry. Download MP3 Hosts Gui on Twitter: @_insideJohn on Twitter: @johnsundell Links realityOS references in Apple’s open source codeSwiftUIARKitRealityKitGoogle CardboardBlenderRambo’s AR article from 2019Reality ComposerQuixelUIKit scenesApple AR/VR headset rendersIKEA Place Subscribe 🟣 Apple Podcasts🟠 Overcast🟢 Spotify If you have any feedback about the show, feel free to reach out on Twitter or send us an email.

  35. 94

    173: “The fabric of space-time”

    SwiftUI for animations, prototyping, and game development. Plus, a second review of the M1 Max-based MacBook Pro, and an update on how well it performs for gaming. Sponsored by Sentry: Actionable iOS error tracking and performance monitoring. Try Sentry for free today. New users can use the code 'STACKTRACE' during sign-up to get 3 free months of Sentry. Download MP3 Hosts Gui on Twitter: @_insideJohn on Twitter: @johnsundell Links Rambo’s MacBook Pro specsDivinity: Original Sin 2SpriteKitImagine EngineJohn’s new SwiftUI-based game demoPart of the source code from John’s new gameSwiftUI animationsThe SwiftUI Namespace APICustom SwiftUI view modifiersSwiftUI transactions Subscribe 🟣 Apple Podcasts🟠 Overcast🟢 Spotify If you have any feedback about the show, feel free to reach out on Twitter or send us an email.

  36. 93

    Stacktrace Podcast 172: “The ‘weak self’ dance”

    How memory management works when using Swift’s new concurrency features, getting out of productivity traps, remote pair programming, and the process of installing Mac apps. Sponsored by Sentry: Actionable iOS error tracking and performance monitoring. Try Sentry for free today. New users can use the code 'STACKTRACE' during sign-up to get 3 free months of Sentry. Download MP3 Hosts Gui on Twitter: @_insideJohn on Twitter: @johnsundell Links Memory management when using async/await in SwiftSwift’s closure capturing mechanicsAppZapperThe dmg file formatThe pkg file format Subscribe 🟣 Apple Podcasts🟠 Overcast🟢 Spotify If you have any feedback about the show, feel free to reach out on Twitter or send us an email.

  37. 92

    Stacktrace Podcast 171: “Three levels of happiness”

    Continued discussions around using SwiftUI for custom animations and layouts, more on phased rollouts and prioritizing bug fixes, content exclusivity and acquisitions, and various ways of sharing code across Apple’s platforms. Sponsored by Sentry: Actionable iOS error tracking and performance monitoring. Try Sentry for free today. Download MP3 Hosts Gui on Twitter: @_insideJohn on Twitter: @johnsundell Links Yoshi's InstagramAsset catalog namespacing“Microsoft buys Activision Blizzard for $68.7B” — Polygon“Sony acquiring Bungie, creators of Destiny, in $3.6B deal” — PolygonWordleEeroCall of DutyStarfieldCustomizing how an external Swift type is encoded or decodedUsing compiler directives in SwiftBridging SwiftUI with UIKit or AppKitDave DeLong’s article about building cross-platform frameworksManaging dependencies using the Swift Package Manager Subscribe 🟣 Apple Podcasts🟠 Overcast🟢 Spotify If you have any feedback about the show, feel free to reach out on Twitter or send us an email.

  38. 91

    Stacktrace Podcast 170: “Welcome to programming”

    John and Rambo revisit the topic of SwiftUI and UIKit interoperability, and discuss which of the two UI frameworks that’s recommend for beginners to start with. Also, the launch of AirBuddy 2.5, and using phased rollouts when releasing new app versions. Download MP3 Hosts Gui on Twitter: @_insideJohn on Twitter: @johnsundell Links SwiftUI and UIKit interoperabilityRambo’s HostingWindowControllerSparklePaddleRambo’s “AirBuddy 2.5 development trivia” Twitter thread Subscribe 🟣 Apple Podcasts🟠 Overcast🟢 Spotify If you have any feedback about the show, feel free to reach out on Twitter or send us an email.

  39. 90

    169: “Choosing what bugs to ship”

    Stacktrace is back! On this first episode of 2022, John and Rambo talk about their holidays, using Swift Playgrounds to build apps on the iPad, Mac gaming, and project goals. Download MP3 Hosts Gui on Twitter: @_insideJohn on Twitter: @johnsundell Links GastropodRambo’s implementation of the App Library animationInkPlot Subscribe 🟣 Apple Podcasts🟠 Overcast🟢 Spotify If you have any feedback about the show, feel free to reach out on Twitter or send us an email.

  40. 89

    168: “The 2021/2022 New Year’s Eve Special”

    Join John and Rambo on this special New Year’s Eve episode of Stacktrace, on which they celebrate some of their favorite moments, products, media, and learnings from 2021. Sponsored by ALOGIC: Get 10% off ALOGIC"S new BLAZE Docks & Hubs with code ALOGIC10. Enter the MacBook Pro giveaway. Download MP3 Hosts Gui on Twitter: @_insideJohn on Twitter: @johnsundell Links UpgradeRaycastWWDC by Sundell & FriendsDuolingoXbox Game PassPayoneerRambo’s WWDC article about StoreKit 2John’s WWDC article about the new UIButton systemPlot ComponentsThe ExpanseFoundationTruth be ToldTed LassoMetroid DreadThe Forgotten City Subscribe 🟣 Apple Podcasts🟠 Overcast🟢 Spotify If you have any feedback about the show, feel free to reach out on Twitter or send us an email.

  41. 88

    167: “iPad is now Turing Complete”

    John and Rambo share their first impressions of the newly released Swift Playgrounds 4, which enables developers to build full iOS apps right on the iPad. Also, the value of narrowly scoped open source libraries, and what it’s like using GitHub CoPilot in practice. Download MP3 Hosts Gui on Twitter: @_insideJohn on Twitter: @johnsundell Links GumroadPaddleCloudflare WorkersGitHub CoPilotDiscover Concurrency on Swift by SundellCollectionConcurrencyKitAsyncCompatibilityKitSimplyCoreAudio Subscribe 🟣 Apple Podcasts🟠 Overcast🟢 Spotify If you have any feedback about the show, feel free to reach out on Twitter or send us an email.

  42. 87

    166: “A little bit of compiler magic”

    The importance of sleep for both humans and async tasks, transferring apps and Apple developer accounts, and what things John and Rambo carry in their bags at all times. Download MP3 Hosts Gui on Twitter: @_insideJohn on Twitter: @johnsundell Links Pillow (disclaimer: has sponsored the show in the past)Delaying an async Swift TaskSwift’s closure capturing mechanicsRambo’s new company website Subscribe 🟣 Apple Podcasts🟠 Overcast🟢 Spotify If you have any feedback about the show, feel free to reach out on Twitter or send us an email.

  43. 86

    165: “It’s not the technology, it’s the people”

    John and Rambo discuss software quality trends, async functions and unit testing, Apple’s approach to private data with CloudKit, and dealing with technical debt. Download MP3 Hosts Gui on Twitter: @_insideJohn on Twitter: @johnsundell Links Using CloudKit for content hosting and feature flagsCloudKit Web ServicesFunctional networking in SwiftRambo roasting his own code on Twitter Subscribe 🟣 Apple Podcasts🟠 Overcast🟢 Spotify If you have any feedback about the show, feel free to reach out on Twitter or send us an email.

  44. 85

    164: “Your wattage may vary”

    It’s time for the first ever Stacktrace Headphone Holiday Guide! Along with discussions about writing technical articles, view models and the MVVM design pattern, and using Swift actors to solve race conditions and data races. Sponsored by Shortcut: The project management tool built specifically for software development teams. Start your extended two-month free trial at shortcut.com/sundell Sponsored by Pillow: Pillow is an all-in-one sleep tracking solution to help you get a better night’s sleep. Download it from the App Store today. Download MP3 Hosts Gui on Twitter: @_insideJohn on Twitter: @johnsundell Links NetNewsWireTiltCloudKit 101Common pitfalls when using Keychain Sharing on iOSSwift actors: How do they work, and what kinds of problems do they solve?Beats Studio BudsSteelseries Arctis 7XView modelsSwiftUI’s state management systemCombine subjectsJohn “The Lost Art of System Design” talkRambo’s “MVC: Many View Controllers” talk Subscribe 🟣 Apple Podcasts🟠 Overcast🟢 Spotify If you have any feedback about the show, feel free to reach out on Twitter or send us an email.

  45. 84

    163: “The Rambo Objective-C Manifest”

    Rambo shares his set of principles for when and how to rewrite existing Objective-C code in Swift, John talks about his preferred workshop formats, and the two discuss the current state of Apple’s services. Sponsored by Pillow: Pillow is an all-in-one sleep tracking solution to help you get a better night’s sleep. Download it from the App Store today. Download MP3 Hosts Gui on Twitter: @_insideJohn on Twitter: @johnsundell Links Connecting async/await to other Swift codeSwiftUI and UIKit interoperabilityPeripherynotify_register_dispatchProperty wrappersThe Shrink Next Door on Apple TV+Foundation on Apple TV+ Subscribe 🟣 Apple Podcasts🟠 Overcast🟢 Spotify If you have any feedback about the show, feel free to reach out on Twitter or send us an email.

  46. 83

    162: “Hanging on the cliff for a whole week”

    John and Rambo discuss asynchronous unit testing, using Windows as a development platform, SwiftUI previews on laptops, and conclude their deep dive into Swift’s concurrency system by talking about actors and structured concurrency. Sponsored by Pillow: Pillow is an all-in-one sleep tracking solution to help you get a better night’s sleep. Download it from the App Store today. Download MP3 Hosts Gui on Twitter: @_insideJohn on Twitter: @johnsundell Links Unit testing Swift code that uses async/awaitTest expectations Unit testing in SwiftRaspberry Pi PicoIOKitAudacity Actors in SwiftThe MainActor attributeUsing async let to run multiple tasks in parallel Subscribe 🟣 Apple Podcasts🟠 Overcast🟢 Spotify If you have any feedback about the show, feel free to reach out on Twitter or send us an email.

  47. 82

    161: “One big data transformation engine”

    Rambo longs to get back to UI development, John releases a new open source project, and the two embark on part one of their deep dive into Swift’s new concurrency system. Also, organizing devices, and mechanical keyboards. Sponsored by Shortcut: The project management tool built specifically for software development teams. Start your extended two-month free trial at shortcut.com/sundell Sponsored by RevenueCat: RevenueCat makes it easy to build and manage in-app purchases on iOS, Android, and the web. Learn more.  Download MP3 Hosts Gui on Twitter: @_insideJohn on Twitter: @johnsundell Links Swift by Sundell episode with Christian SeligCollectionConcurrencyKitThe new, concurrent version of PublishAsync sequences and streamsSketchNSXPCConnectionSwift’s concurrency systemThe WIP MultipeerKit concurrency implementationAdding pull-to-refresh to a SwiftUI List using async/awaitMaking URLSession’s async APIs backward compatibleTaskAn example of running async unit tests on LinuxKeychron K2 Subscribe 🟣 Apple Podcasts🟠 Overcast🟢 Spotify If you have any feedback about the show, feel free to reach out on Twitter or send us an email.

  48. 81

    160: “M1 Macintoshes”

    John shares his first impressions of the new 14-inch MacBook Pro and how he has been utilizing Swift’s new concurrency features to get the most out of the M1 Max. Also, Rambo’s work with Shortcuts, maintaining SwiftUI-based Mac apps, and much more. Accelerate app development with Firebase: Use Firebase's backend services like Firestore, Cloud Storage, Authentication, and more to build serverless, secure apps at global scale. Get started now. Sponsored by Survivor: Protect your iPhone 13 w/ Survivors new MagSafe collection and enter to win the iPhone 13 Pro. Sponsored by RevenueCat: RevenueCat makes it easy to build and manage in-app purchases on iOS, Android, and the web. Learn more.  Download MP3 Hosts Gui on Twitter: @_insideJohn on Twitter: @johnsundell Links Using SwiftUI to build internal toolsJohn’s MacBook Pro box tweetSwift’s new concurrency system gains backward compatibility in Xcode 13.2Publish Subscribe 🟣 Apple Podcasts🟠 Overcast🟢 Spotify If you have any feedback about the show, feel free to reach out on Twitter or send us an email.

  49. 80

    159: “A really powerful new toy”

    After a discussion about Swift generics and when to use them, Rambo shares his initial impressions of using the new iPad mini, and John explains why he’s going back to the Mac for his portable computing needs. Sponsored by Kandji: A modern, cloud-based platform to manage and secure your Mac, iPhone, iPad, and Apple TV devices. Kandji saves IT teams hours of manual work with features like one-click compliance templates and 150+ pre-built automations, apps, and workflows. Request access. Sponsored by RevenueCat: RevenueCat makes it easy to build and manage in-app purchases on iOS, Android, and the web. Learn more.  Download MP3 Hosts Gui on Twitter: @_insideJohn on Twitter: @johnsundell Links Swift genericsPlot’s NodeConvertible protocolAvoiding SwiftUI’s AnyViewPull Request adding SharePlay support to the WWDC app for MacRambo’s SharePlay WWDC articleRambo’s InstagramPixelmator Photo Subscribe 🟣 Apple Podcasts🟠 Overcast🟢 Spotify If you have any feedback about the show, feel free to reach out on Twitter or send us an email.

  50. 79

    158: “Double unleashed”

    The 14 and 16-inch Apple Silicon-based MacBook Pros have finally been revealed, and John and Rambo share their initial impressions of these new products and everything else that Apple announced during their “Unleashed” event. Sponsored by Kandji: A modern, cloud-based platform to manage and secure your Mac, iPhone, iPad, and Apple TV devices. Kandji saves IT teams hours of manual work with features like one-click compliance templates and 150+ pre-built automations, apps, and workflows. Request access. Sponsored by RevenueCat: RevenueCat makes it easy to build and manage in-app purchases on iOS, Android, and the web. Learn more.  Sponsored by Totallee: Get 20% off totallee iPhone 13 cases and more with code SLEEK at totalleecase.com or (SLEEK20DEAL on Amazon). Download MP3 Hosts Gui on Twitter: @_insideJohn on Twitter: @johnsundell Links The Moiré effectHigh-resolution version of John’s 3x iPhone 13 Pro photo of Warsaw’s Palace of Culture and ScienceThe new Beats Fit Pro earbudsNew AppKit API for retrieving the area next to the notch on the new MacBook Pros Subscribe 🟣 Apple Podcasts🟠 Overcast🟢 Spotify If you have any feedback about the show, feel free to reach out on Twitter or send us an email.

Type above to search every episode's transcript for a word or phrase. Matches are scoped to this podcast.

Searching…

No matches for "" in this podcast's transcripts.

Showing of matches

No topics indexed yet for this podcast.

Loading reviews...

ABOUT THIS SHOW

A podcast about life and technology from two developers’ perspectives. With John Sundell and Gui Rambo.

HOSTED BY

John Sundell and Gui Rambo

CATEGORIES

URL copied to clipboard!