# 70 : Feedback and Communication

Published on

Article Image

Photo by Austin Distel on Unsplash

Recently, I received an email from Apple informing me that an issue I reported last April—@State’s abnormal initial value behavior in multi-window applications—has been fixed. What’s even more delightful is that this fix applies not only to the latest system but is also backward compatible with iOS 17.5, macOS 14.5, tvOS 17.5, watchOS 10.5, and visionOS 1.3. At the same time, the adaptation of certain new features in WWDC 2024 to older systems appears to signal that the SwiftUI team is breaking away from the traditional practice of confining new features and bug fixes solely to the newest systems.

Although the period from when I submitted the feedback last April until the fix was implemented at the beginning of this year was not short, I couldn’t hide my inner joy upon receiving the notification. This joy stems not only from the complete resolution of the issue but also from the recognition of my contribution as a developer to the ecosystem.

Even more coincidentally, a few days ago I received a private message from an engineer on the SwiftUI development team. He not only confirmed the other issue regarding the abnormal behavior of onChange that I reported but also candidly shared the consistency challenges that the SwiftUI API faces when adapting to Apple’s diverse system platforms. Compared to the polite yet somewhat formulaic reply from the Feedback Assistant, this direct, two-way communication resonates more deeply with ordinary developers.

In terms of maintaining developer relations, although Apple still has significant room for improvement, there are signs they are actively making changes. For instance, in the SwiftUI, Concurrency, and DB sections of the Apple Developer Forums, which I frequently browse, DTS engineers have notably improved in terms of response frequency, timeliness, and depth. I recommend that developers share the Feedback Assistant’s feedback ID when discussing issues on the forums, as this will undoubtedly help expedite the resolution process.

Quinn created a post to guide developers on how to provide clear and efficient feedback through the Feedback Assistant.

No matter how lively community discussions become, developers always look forward to receiving more accurate and in-depth technical insights from Apple engineers. I hope that Apple will continue to host multi-party interactive events like WWDC Digital Lounge or Ask Apple, elevating the relationship from one-way feedback to genuine two-way communication. Only then can we cultivate a healthier, more vibrant, and more attractive ecosystem community.

Recent Recommendations

Apple Vision Pro: 1 Year Later

In what seems like the blink of an eye, it has been one year since the release of Apple Vision Pro. In this article, Basic Apple Guy reflects on his experience over the past year and examines AVP’s performance in hardware, software, and user acceptance. The author believes that AVP offers an immersive, calm, and unhurried spatial computing experience—a quality that is both its strength and a factor that makes it challenging to become mainstream in our fast-paced society. Despite its excellent UI design, hardware craftsmanship, and media consumption experience, issues such as the lack of killer native apps, suboptimal wearing comfort, and short battery life make it difficult for AVP to integrate into everyday life. Nevertheless, the author hopes that by adjusting usage habits, AVP can deliver greater value, and he remains optimistic about its future development. At the end of the article, he also shares some accessory recommendations to enhance wearing comfort and overall user experience.

Grouping Controls with ControlGroup

In SwiftUI, the way components are presented can vary depending on the context. However, ControlGroup significantly improves interface clarity, discoverability, and consistency by grouping semantically related controls together, thereby optimizing the user experience. In this article, Antonella Giugliano provides a detailed introduction to the various uses of ControlGroup and demonstrates how to customize its appearance by conforming to the ControlGroupStyle protocol—such as modifying background colors or adding borders—to create a more visually appealing and unified interaction. Additionally, ControlGroup plays an important role in accessibility by incorporating textual labels, making it easier for users who rely on assistive technologies to understand the function of the controls.

Sound Engineering on iOS: AudioToolbox, AVAudioSession, and UIFeedbackGenerator

Sound, music, and haptic feedback have always been vital components in enhancing the iOS user experience. In this article, Uwais Alqadri provides an in-depth look at iOS audio and haptic feedback technologies. Through code examples, he explains how to use AudioToolbox, AVAudioSession, and UIFeedbackGenerator to handle system sound effects, audio playback and recording, and haptic feedback. The article covers key topics such as system sound IDs, Taptic Engine haptic feedback, and audio session management, helping developers better optimize the audio interaction experience within their iOS applications.

Drawing Maps with Swift Charts

In this article, Artem Novichkov combines MapKit and Swift Charts to achieve a map visualization based on population data from various regions in Kazakhstan. The author uses MKGeoJSONDecoder to parse GeoJSON data and extends MKPolygon to extract coordinates and compute the centroid of regions. Subsequently, he employs Swift Charts’ AreaPlot, LinePlot, and PointMark to render a population distribution map that vividly presents the differences across regions. By flexibly combining Apple’s official frameworks, Novichkov greatly enhances data processing and visualization efficiency, demonstrating Swift Charts’ potential in geographical data visualization.

Mastering TaskGroups in Swift

TaskGroups provide a means to manage dynamic subtasks, execute asynchronous tasks in batches, and flexibly control concurrency—making Swift’s concurrent programming more efficient. In this article, Majid Jabrayilov not only introduces the basic usage of TaskGroups but also highlights how improper use can lead to high memory consumption. To optimize task management, he proposes a strategy of adding tasks in batches: limiting the number of concurrent tasks and dynamically adding new ones only after the current tasks have been completed, thereby reducing memory usage and enhancing execution efficiency.

Parameterized Tests in Swift: Reducing Boilerplate Code

Parameterized tests in Swift Testing allow developers to run the same test function repeatedly with a set of input parameters, thereby avoiding the need to write separate test methods for each input and significantly reducing redundant code. Additionally, Xcode’s Test Navigator can clearly display the test results for each parameter, making debugging and issue identification more straightforward. In this article, Antoine van der Lee not only introduces the basic usage of parameterized tests but also discusses how to handle multiple parameter combinations. For instance, he explains how to set different free trial counts for different Features and uses the zip method to match each Feature with its corresponding number of tries, ensuring that the test logic remains clear and the code concise.

Weekly Swift & SwiftUI highlights!