# 74 - The Cycle of Expectation and Disappointment: Apple's AI Dilemma and Resilience

Published on

Article Image

Photo by Medhat Dawoud on Unsplash

A few days ago, Apple announced that its “More Personalized Siri” feature would be delayed until next year. Combined with the continued absence of Swift Assist, it’s clear Apple has not fulfilled the AI vision it presented at WWDC 2024. At least in the realm of large language models, Apple has not exhibited its characteristic agility in keeping pace with industry trends.

Yet it’s premature to conclude that Apple has lost its capability to respond to this AI wave. Whether by design or not, Apple’s transition to unified memory architecture with the introduction of M-series chips has equipped its Mac lineup with remarkable capabilities for local model inference. Furthermore, with the recent Mac Studio capable of supporting up to 512GB of memory, Apple has firmly secured another foothold in this AI transformation.

While NVIDIA remains the preferred choice for model training and inference, Macs have attracted numerous users due to their high integration and energy efficiency. As more AI models become optimized for MLX, Mac performance in large-scale inference tasks is expected to improve further.

Of course, these successes with Mac devices do not fully mitigate Apple’s slow response to large language models, but they highlight the inherent strength of diversified tech giants: when one strategy falters, another can thrive. Such strategic diversity provides resilience against rapidly shifting technological waves.

Do large models truly represent the future? Will companies that fail to keep up inevitably be left behind? Though I doubt it, the current media environment clearly pressures enterprises to deliver tangible results in AI development and applications. Thus, even companies with established AI roadmaps may find themselves forced to pivot due to shifting market dynamics and public sentiment.

Consequently, we can expect to see more “PowerPoint-style” visionary announcements, both recently and in coming years. Without setting expectations, the market becomes disappointed; setting expectations but failing to meet them creates further disappointment. This cycle of expectation and disappointment seems to have become the new normal in tech, particularly in the highly uncertain realm of AI.

In the AI domain, striking a balance between maintaining corporate resolve and satisfying market demands grows increasingly difficult. The expectation-disappointment cycle may have already become an industry norm. For developers and enterprises alike, true wisdom lies in embracing innovation without blindly chasing market hype, carefully balancing diligent execution with meeting public expectations. After all, the true value of technology lies not in flashy promises but in the tangible improvements it delivers to users.

Original

Lazy Initialization @State in SwiftUI: Overcoming Premature Object Creation

The Observation framework has brought native property-level observation to Swift, effectively preventing unnecessary view updates in SwiftUI triggered by unrelated property changes, thereby enhancing application performance. However, since @State does not offer a lazy initialization constructor like @StateObject, it may lead to performance degradation or even logical issues due to the premature construction of instances in certain scenarios. This article explores how to implement a lazy initialization solution for Observable instances using @State.

Recent Recommendations

Dynamically Constructing Generic Types in Swift

Generic types typically require concrete types at compile time, but in certain scenarios, sufficient type information may not be available during compilation. While working on OpenSwiftUI, Kyle Ye discovered that SwiftUI’s _ConditionalContent<TrueContent, FalseContent> is exactly such a case. This article presents an implementation approach that dynamically constructs generic types by defining custom Metadata and ProtocolDescriptor types to access and parse type information at runtime.

Designing a Custom Lazy List in SwiftUI with Better Performance

SwiftUI provides lazy containers such as List and LazyVStack, but their performance remains limited when handling large datasets. Additionally, SwiftUI’s Layout protocol currently lacks support for lazy loading, making it difficult for developers to build more efficient custom scrolling containers natively. In this article, Matthaus Woolard implements a row-recycling mechanism that dynamically adjusts view positions instead of creating new views, resulting in a high-performance scrolling container optimized for fixed-height, repeating subviews. While this approach has certain limitations in applicable scenarios, its core idea offers valuable insights for improving SwiftUI view performance.

The original code snippets in the article are scattered. To improve readability, I have compiled and organized them into a Gist for easier reference.

Exploring the Long-Standing Issues of Xcode Virtual Directories and My Open Source Tool Solution

For years, Xcode has managed projects using virtual directories, leading to frequent merge conflicts in collaborative development and compatibility issues with CI/CD processes and modern tools. As Apple gradually improves Xcode’s directory management, modern projects have increasingly relied on actual file structures, yet legacy projects still struggle with virtual directories. In this article, ZhgChgLi provides an in-depth analysis of the impact of virtual directories and introduces his open-source tool, XCFolder. This tool automatically converts Xcode’s virtual directories into actual file structures, improving project clarity while ensuring compatibility with XcodeGen and Tuist, offering an efficient solution for modern Xcode project management.

SwiftUI Performance - How to Use UIKit

As SwiftUI continues to evolve, more developers are choosing it as the core framework for building applications while incorporating UIKit in performance-critical scenarios for optimization. In this article, Majid Jabrayilov explores how to effectively integrate UIKit within a SwiftUI-based architecture to balance development convenience and runtime efficiency. The article highlights UIHostingConfiguration—a powerful mechanism for efficiently embedding SwiftUI views within UITableViewCell or UICollectionViewCell. This approach allows developers to leverage UIKit’s efficient view recycling while maintaining SwiftUI’s flexibility, enhancing performance when handling large datasets.

How to Clean Xcode Junk and Reclaim Valuable Disk Space on Your Mac

For Apple developers, Xcode often consumes a significant amount of disk space, impacting system performance and development efficiency. In this article, Karin Prater provides a detailed breakdown of the various file types generated by Xcode and offers a range of safe and effective cleaning methods to help developers free up disk space and optimize their development environment.

Building Complex Things

Traditional macOS CI environments, based on physical Mac machines, are susceptible to external interference, leading to environment drift and unstable builds. Paul Samuels explores virtualization as a means to create a more controllable and reusable CI environment. In this article, Paul shares his journey from problem definition and tool research to prototype validation, ultimately achieving a stable and repeatable solution. This article is not just a technical exploration but also an insightful look into the process of building complex systems.

Weekly Swift & SwiftUI highlights!