<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Writing — Marko Engelman</title><description>Articles on Swift, iOS architecture and Domain Driven Design: patterns, concurrency and modelling, with the code to go with them.</description><link>https://markoengelman.com/</link><item><title>Architectural Patterns – Decorator</title><link>https://markoengelman.com/decorator/</link><guid isPermaLink="true">https://markoengelman.com/decorator/</guid><description>The Decorator pattern in Swift: adding behaviour to existing components without changing them, shown through a token-refresh example.</description><pubDate>Wed, 27 Sep 2023 00:00:00 GMT</pubDate><category>Clean Architecture</category><category>Composition</category><category>iOS</category><category>Swift</category></item><item><title>Detect user’s country without accessing their location</title><link>https://markoengelman.com/detect-users-country-without-accessing-their-location/</link><guid isPermaLink="true">https://markoengelman.com/detect-users-country-without-accessing-their-location/</guid><description>How to find out which country an iOS app&apos;s user is in, without CoreLocation and without asking for their location.</description><pubDate>Tue, 12 Apr 2022 00:00:00 GMT</pubDate><category>iOS</category><category>Swift</category></item><item><title>DDD – Aggregates part I.</title><link>https://markoengelman.com/ddd-aggregates-part-i/</link><guid isPermaLink="true">https://markoengelman.com/ddd-aggregates-part-i/</guid><description>What an aggregate is in Domain Driven Design, and how referencing other entities by ID affects an iOS app&apos;s loading speed and memory use.</description><pubDate>Fri, 18 Feb 2022 00:00:00 GMT</pubDate><category>Clean Architecture</category><category>Domain Driven Design</category></item><item><title>Async execution of long-running operations using Swift’s Task</title><link>https://markoengelman.com/async-execution-of-long-running-tasks-with-task-api/</link><guid isPermaLink="true">https://markoengelman.com/async-execution-of-long-running-tasks-with-task-api/</guid><description>Adopt Swift&apos;s Task to run long-running operations on a background thread, without changing the existing implementation of the operation.</description><pubDate>Thu, 13 Jan 2022 00:00:00 GMT</pubDate><category>Composition</category><category>Concurrency</category><category>iOS</category><category>Swift</category><category>Actors</category><category>Async</category><category>MainActor</category><category>Task</category></item><item><title>Use Swift’s ‘async’ without breaking the existing codebase</title><link>https://markoengelman.com/use-swifts-async-without-breaking-the-existing-codebase/</link><guid isPermaLink="true">https://markoengelman.com/use-swifts-async-without-breaking-the-existing-codebase/</guid><description>How to adopt Swift&apos;s async/await APIs where they&apos;re needed, without breaking or changing the existing codebase.</description><pubDate>Mon, 01 Nov 2021 00:00:00 GMT</pubDate><category>Composition</category><category>Concurrency</category><category>iOS</category><category>Swift</category><category>SwiftUI</category><category>Async</category></item><item><title>How to connect to Wi-Fi device from iOS app using Swift</title><link>https://markoengelman.com/how-to-connect-to-wi-fi-device-from-ios-app-using-swift/</link><guid isPermaLink="true">https://markoengelman.com/how-to-connect-to-wi-fi-device-from-ios-app-using-swift/</guid><description>Connecting an iOS app to a Wi-Fi device with NEHotspotConfigurationManager, and the gotchas along the way.</description><pubDate>Sat, 14 Aug 2021 00:00:00 GMT</pubDate><category>iOS</category><category>Hotspot</category><category>Wi-Fi</category></item><item><title>DDD – When to use and how to design Entities</title><link>https://markoengelman.com/ddd-learn-when-to-use-and-how-to-design-entities/</link><guid isPermaLink="true">https://markoengelman.com/ddd-learn-when-to-use-and-how-to-design-entities/</guid><description>When to use entities in Domain Driven Design, and how to design them in Swift: unique identity, properties, behaviour and invariants.</description><pubDate>Fri, 19 Feb 2021 00:00:00 GMT</pubDate><category>Clean Architecture</category><category>Domain Driven Design</category></item><item><title>DDD – Understating Value Objects with Swift</title><link>https://markoengelman.com/ddd-value-objects/</link><guid isPermaLink="true">https://markoengelman.com/ddd-value-objects/</guid><description>How value objects differ from entity objects in Domain Driven Design, and how to define their identity and use them in Swift.</description><pubDate>Fri, 12 Feb 2021 00:00:00 GMT</pubDate><category>Clean Architecture</category><category>Domain Driven Design</category></item><item><title>DDD – Anemic vs. Rich Domain Model</title><link>https://markoengelman.com/ddd-anemic-vs-rich-domain-model/</link><guid isPermaLink="true">https://markoengelman.com/ddd-anemic-vs-rich-domain-model/</guid><description>What an anemic domain model is, what its downsides are, and how to refactor it towards a rich domain model, with examples in Swift.</description><pubDate>Fri, 05 Feb 2021 00:00:00 GMT</pubDate><category>Clean Architecture</category><category>Domain Driven Design</category></item><item><title>Observing model changes using Swift’s @propertyWrapper</title><link>https://markoengelman.com/observing-model-changes-using-propertywrapper/</link><guid isPermaLink="true">https://markoengelman.com/observing-model-changes-using-propertywrapper/</guid><description>An alternative way to observe model changes with Swift&apos;s @propertyWrapper, compared against didSet, KVO and delegates.</description><pubDate>Fri, 29 Jan 2021 00:00:00 GMT</pubDate><category>Swift</category></item><item><title>How to encapsulate business rules using policies</title><link>https://markoengelman.com/how-to-encapsulate-business-rules-using-policies/</link><guid isPermaLink="true">https://markoengelman.com/how-to-encapsulate-business-rules-using-policies/</guid><description>Encapsulating simple business rules in Swift with policies, instead of hiding them inside methods and properties.</description><pubDate>Fri, 22 Jan 2021 00:00:00 GMT</pubDate><category>Swift</category></item><item><title>A better way to handle weak properties and memory management</title><link>https://markoengelman.com/a-better-way-to-handle-weak-properties-and-memory-management/</link><guid isPermaLink="true">https://markoengelman.com/a-better-way-to-handle-weak-properties-and-memory-management/</guid><description>Handle memory management in Swift without leaking implementation details into components or reaching for weak properties all over the codebase.</description><pubDate>Fri, 15 Jan 2021 00:00:00 GMT</pubDate><category>Swift</category></item></channel></rss>