Weekly Comment
Apple recently updated its App Store Review Guidelines, now allowing emulator apps into the App Store. Just a few days ago, an emulator app named Delta was launched on the store. Delta is an all-in-one emulator designed for iOS, supporting a variety of Nintendo handheld games. This app was actually developed a long time ago but was previously only available to users in non-App Store formats due to policy restrictions.
I downloaded the app as soon as I could, and when those familiar game background tunes started playing, it felt as if I had traveled back to my gaming days years ago. While these classic games can’t compete with modern games in terms of graphics and sound, their excellent gameplay is still captivating to this day. Playing these refined and simple pixel games made me wonder, have today’s games and apps become too bloated?
New hardware platforms allow us to use resources freely without worrying about efficiency, and developers have gradually gotten used to consuming a large amount of resources. However, as hardware and development tools continue to advance, have the applications we create genuinely improved?
This Sunday, I received the SwiftIO Playground Kit from MadMachine, a development board equipped with a 600MHz MCU, 32MB RAM, and 16MB Flash. Its biggest feature is that it supports development using Swift, which is perfect for developers like me who are familiar only with Swift. I plan to work on some small projects on this hardware, trying to curb my growing demand and consumption of resources.
Originals
Core Data Reform: Achieving Elegant Concurrency Operations like SwiftData
SwiftData, as the successor to Core Data, has introduced a multitude of innovative and modern design ideas. Despite its availability for some time now, many developers have yet to adopt it in their projects. This situation is partly due to SwiftData’s higher requirements for the operating system version. Additionally, because SwiftData is not yet mature enough in some functionalities, developers might choose to continue using Core Data even if their operating system version meets SwiftData’s requirements. Can we integrate some of SwiftData’s excellent design philosophies and ingenious implementations into the practical use of Core Data? This article aims to explore how to introduce elegant and safe concurrency operations similar to those of SwiftData into Core Data, implementing a Core Data version of @ModelActor
.
Recent Selections
Is Dynamic Isolation Bad?
In Swift programming, keywords such as nonisolated
, isolated
, and actor
create what’s known as static isolation. This method allows developers to clearly express isolation needs to the compiler through the type system, greatly reducing the risk of potential errors. Moreover, Swift also provides tools for dynamic isolation to help developers gracefully handle existing non-concurrent code. In this article, Matt Massicotte deeply explores the pros and cons of using static versus dynamic isolation. Initially, he was opposed to using MainActor.run
for dynamic isolation. However, after receiving detailed feedback from Rob Napier, he gained a more comprehensive understanding and perspective on the topic.
How to learn TCA
The Composable Architecture (TCA) is an open-source framework launched by Point-Free that integrates tools for state management, component assembly, side effect handling, and testing, aimed at helping developers build applications. Opinions on TCA are mixed: some developers believe it complicates issues, while others see it as an ideal choice when used with SwiftUI. Regardless of the viewpoint, understanding the framework can undoubtedly bring significant benefits in state management, side effect handling, and test planning. In this article, Andrew Harrison offers a guided path on how to start learning TCA. The main purpose of the article is not to directly teach how to use TCA but to provide a good starting point for learning the framework.
Last week, Antoine Lee also discussed the topic related to TCA in the tweet Is TCA the new MVVM?, which interested readers can join.
Towards Building User-Centric Indie Apps
During my trip to Beijing at the end of March, I discussed with Junping his application in development — Context. This app impressed me with its unique interaction methods. “Context” is a fast and precise multilingual dictionary that uses large language models to explain new vocabulary based on the specific context of words. In this article, Junping shares his experience in developing the application. He emphasizes the importance of user-centric design and details the entire development process from inspiration to product launch. Importantly, Junping also shares all the related documents used during the conception and design phases, including planning and Figma documents, to help other developers better understand and apply user-centric design principles.
How to migrate an iOS app to Bazel
Bazel is an open-source multi-language build system widely used in large projects and codebases. It improves build speed, reuse, scalability, and diversity by leveraging build caching and parallel task execution. In this detailed guide, Brentley Jones explains how to migrate an iOS app from Xcode to Bazel. The process includes basic Bazelisk installation, defining build targets, converting an Xcode project, and integrating Xcode. The article uses the Mastodon iOS project as an example, covering various aspects from using rules such as swift_library
and ios_application
to optimizing build performance with remote caching and execution. This article is a valuable resource for iOS developers looking to enhance their project’s build efficiency and manage complexity.
Common Mistakes to Avoid When Using Enums in Swift
Enums are a powerful tool in Swift, offering features not available in many other programming languages. In this article, Leonardo Pugliese discusses several common mistakes iOS developers make when using enums in Swift, including lack of cohesion in mapping values, lazy switching, misuse of the default clause, and incorrect assumptions about automatic raw value incrementation. The article emphasizes thoughtful coding practices, the value of type safety, and the benefits of avoiding shortcuts that compromise code quality. Pugliese reminds readers that good coding practices and attention to detail can significantly improve the reliability and maintainability of software.