The Case of the Rapidly Disappearing Disk Space -- Fatbobman's Swift Weekly #160
Explore AI agent disk bottlenecks, advanced Swift optionals, SwiftUI Instruments profiling, iOS 27 Now Playing, iPhone Duo foldable layout, and szt disk CLI.
Latest developer news about swiftui, summarized in Vietnamese by AI.
Explore AI agent disk bottlenecks, advanced Swift optionals, SwiftUI Instruments profiling, iOS 27 Now Playing, iPhone Duo foldable layout, and szt disk CLI.
SwiftPM multi-version support, SwiftData rollback fixes, fast Swift 6 PSB decoder, SwiftUI animation internals, and native dev in AI.
Learn why fixedSize() can make SwiftUI text overflow its frame, collapse a shape to 10 points or size a shape to the height of wrapped text, and how size proposals and ideal sizes explain each result.
Restore SwiftUI menu icons on macOS 27 with one line of labelStyle code, plus Tiny Clips before-and-after screenshots and compatibility notes.
Native or Hybrid? Why I Would Build GroceryTrack Native from Day One I built the GroceryTrack iOS app in Flutter to ship fast, and it took a week. Six months later I rewrote it in SwiftUI in about a …
Five principles for native apps that share a headless core: what goes in the core, how the edges call it, how to make every screen addressable, and why the whole app belongs in one build graph. Includes a sample app for iOS, Android, and the terminal.
Implementing the Coordinator Design Pattern in a Tab-Based SwiftUI App A simple, practical approach to managing navigation independently across multiple tabs Navigation management in a tab-based iOS …
Compare how SwiftUI containers apply a view's layout priority, from space allocation in stacks and ZStack sizing to reading the value in custom Layout implementations.
How I Migrated a SwiftUI iOS App to Server‑Driven, AI‑Shaped UI (Without Blowing Up the Roadmap) How I Migrated a SwiftUI iOS App to Server‑Driven, AI‑Shaped UI (Without Blowing Up the …
Creating custom viewModifiers to reduce clutter and make view styling more maintainable. Adding parameters to viewModifiers to make them more versatile.
Say hello to the new OnboardingKit, a Swift & SwiftUI SDK that helps you create flexible onboarding experiences on all major Apple platforms, and that re...
A Swift frontend framework that runs in the browser
Capacitor 9 Beta is now available for testing, bringing the headline changes previewed in the Road to Capacitor 9 post. Cordova compatibility becomes optional and only loads when a Cordova plugin is used, iOS moves to a source-first Swift package, and there's core support for foldables and multi-window scenarios. R8 shrinking is now on by default in release builds, ahead of Google Play's February 2027 rule requiring 25% optimization for apps over 10MB. npm 12's install-script opt-in behavior is now flagged by 'cap doctor', and iOS now boots through SwiftUI instead of AppDelegate. Some pieces, including the R8 keep rules and the npm 12 check, are backported to Capacitor 8.6.0. General availability is targeted for the end of November.
iOS 27.2 shipped and changed a UIKit default: on iOS 27.1+, a UIView's default layout margins are now zero instead of 8 points, so subviews pinned to layoutMarginsGuide now touch the edges. The fix is setting preservesSuperviewLayoutMargins = true or explicit directionalLayoutMargins. The ATT expanded prompt API was renamed from usingExpandedInterface to preferExpandedInterface before release, breaking beta code. Multiseat subscriptions for businesses and schools went live October 22, on by default. Xcode's suggested fix for the deprecated URL.path can break file paths with spaces; use url.absoluteURL.path(percentEncoded: false) instead. SwiftUI Table is reportedly broken on the new iPhone Duo, and LazyHStack's default spacing causes paging drift unless set to zero.
With building no longer being an obstacle, where’s your advantage? To me, it’s about fueling self-motivation.
iPhone Duo sử dụng onHingeChange() modifier trong SwiftUI để theo dõi thay đổi bản lật. Modifier này cung cấp dữ liệu về hinge angle - góc độ hiện tại của thiết bị khi gập/mở. Khi giá trị hinge angle thay đổi từ 0 đến 360 độ, SwiftUI có thể tạo animation mượt mà cho các layer UI. Lập trình viên có thể tận dụng thông số này để điều chỉnh layout hoặc hiệu ứng hình ảnh theo thời gian thực, mang lại trải nghiệm người dùng đặc biệt cho thiết bị màn hình gập.
Bài hướng dẫn này giúp bạn tận dụng biến góc bản lề trên iPhone Duo để tạo animation và hiệu ứng thị giác hấp dẫn trong SwiftUI.
When apps outgrow OS boundaries: running Mac apps on Linux, NSHostingView lifecycle bugs, AVFoundation smooth audio ducking, and Tuist's compute-driven harness.
ArrangementView trên iOS 27.1 đọc size classes của window thay vì của pane, trong khi iOS 27.2 đã sửa lỗi này. Trên iOS 27.1, một pane rộng 371 points vẫn báo cáo Regular width trong khi view con bên trong lại nhận đúng Compact. Việc wrap view top trong VStack có thể khắc phục vấn đề trên iOS 27.1. iOS 27.2 đồng nhất size classes giữa view top và view con, với split axis chuyển sang compact: cạnh nhau có compact width, xếp chồng có compact height. iPhone Duo khi unfold cũng nhận được size classes tương tự như iPad.
Bài viết này giúp lập trình viên hiểu và khắc phục lỗi định loại kích thước trong ArrangementView trên iOS 27.1.
iPhone Duo là một công cụ tuyệt vời cho lập trình viên khi phát triển giao diện ứng dụng. Với chỉ một lần build-and-run, thiết bị này có thể kiểm tra UI trên cả màn hình iPhone nhỏ nhất và màn hình iPad nhỏ nhất của Apple. Tôi đã sử dụng được một giờ và đã giải quyết được rất nhiều vấn đề SwiftUI. Công cụ này giúp tăng tốc độ phát triển đáng kể bằng cách loại bỏ nhu cầu phải dùng nhiều thiết bị thực tế.
iPhone Duo giúp lập trình viên kiểm tra UI trên nhiều kích thước màn hình chỉ với một lần build và chạy.
Trước khi nộp ứng dụng native cho App Review, cần chuẩn bị kỹ các native interaction và áp dụng Liquid Glass để trải nghiệm người dùng mượt mà hơn. Nguyên nhân kỹ thuật là do Apple có quy trình review nghiêm ngặt, đặc biệt với các tính năng truy cập trực tiếp Mac distribution như ARKit hay Metal. Hệ quả là ứng dụng có thể bị từ chối nếu không tuân thủ các guideline, dẫn đến trì hoãn ngày ra mắt. Bài viết cung cấp checklist chi tiết với con số cụ thể về tỉ lệ từ chối và các case study thực tế từ developer experience. Đáng học nhất là cách tận dụng native features để tăng điểm approval rate và phân biệt với các ứng dụng web-based trên App Store.
Bài viết giúp lập trình viên chuẩn bị kỹ lưỡng ứng dụng bản gốc trước khi nộp cho App Review.
iOS 27.1 giới thiệu contentMargins(for: .container) trong SwiftUI, tương đương với layoutMarginsGuide trong UIKit. Lề hệ thống dao động từ 16 đến 20 điểm tùy thiết bị, và trên iPhone Duo thì không đối xứng: 20 điểm ở một bên, 0 điểm ở bên cạnh thanh dọc. Hard-code .padding(.horizontal, 16) làm nội dung bị căn chỉnh sai trên điện thoại lớn và Duo. Modifier mới cho phép hệ thống cung cấp lề chính xác, với proxy.contentMargins(for:) trả về giá trị dưới dạng EdgeInsets, không bao gồm safe area. Cả hai tính năng đều yêu cầu iOS 27.1, còn với iOS 27.0 cần fallback dựa trên padding.
Bài hướng dẫn này giúp lập trình viên sử dụng layoutMarginsGuide trong SwiftUI để căn chỉnh chính xác nội dung trên các thiết bị iOS khác nhau mà không cần hard-coding giá trị padding.
Bối cảnh là việc bố trí giao diện SwiftUI trên iPhone Duo sao cho hợp lý khi màn hình gập và mở. Nguyên nhân kỹ thuật là do hệ điều hành iOS dành ra các vùng đặc biệt (reserved regions) để theo dõi vị trí gấp màn hình. Hệ quả là nếu không xử lý tốt, giao diện sẽ bị xáo trộn khi chuyển trạng thái gấp/mở. Điều đáng học là cách đọc thông tin từ reserved regions trong SwiftUI để duy trì số lượng cột (columns) ổn định, giúp trải nghiệm người dùng mượt mà khi thiết bị thay đổi trạng thái.
Bài viết này giúp bạn biết cách bố trí SwiftUI view quanh vị trí gập trên iPhone Duo để giữ ổn định số cột khi thiết bị gập mở.
Find SwiftUI redraws and slow view body updates in Xcode Instruments, and explore how AI agents can do this for you.
Bài viết giới thiệu HotelQuery - một thư viện Swift giúp xử lý sorting, filtering và pagination trong SwiftUI dễ dàng hơn. Nguyên nhân kỹ thuật là việc thực hiện các tính năng này thủ công thường dẫn đến code lặp lại và khó bảo trì. Với HotelQuery, lập trình viên có thể giảm 40% lượng code cần viết cho các thao tác CRUD phức tạp. Điều đáng học là cách triển khai các query pattern và observable objects trong SwiftUI để tạo ra các component có thể tái sử dụng. Bài viết bao gồm ví dụ thực tế với hotels API và các kỹ thuật advanced như Combine và Result builders.
Bài viết này giúp bạn tối ưu hóa xử lý dữ liệu trong SwiftUI với giải pháp HotelQuery hiệu quả.
This issue of a weekly iOS development newsletter opens with reflections on Anthropic replacing Git with its own Scion source-control system in its monorepo due to AI-driven code volume, alongside a trend of companies (Shopify, Coinbase, ResortPass) returning to native mobile development. The editor muses on whether AI agent instruction files (AGENTS.md) risk becoming outdated like stale code comments. News coverage includes Apple's HomeView announcement and updated design guidance. Code section links cover Swift actor reentrancy bugs causing duplicate network requests, an exploration of a private UIKit liquid lens view, structuring SwiftUI apps for Swift concurrency compiler compliance, and a subtle bug around enumerated() offsets versus indices on array slices. Tools section highlights Blueprint, a CLI tool for generating distinctive app icon variants for CI builds. Closing articles discuss verification of AI-generated SwiftUI code and pragmatic test-suite trimming when agents write tests.
Bối cảnh triển khai infinite scrolling giữa SwiftUI và ExpressJS để xử lý danh sách dữ liệu lớn. Nguyên nhân kỹ thuật là việc kết hợp AsyncImage với pagination API sử dụng kỹ thuật offset và limit để tối ưu tải dữ liệu. Hệ quả là ứng dụng có thể hiển thị hàng nghìn mục mà không gây tải nặng cho hệ thống hay trải nghiệm người dùng. Điều đáng học là cách triển khai phân trang tay với threshold detection khi người dùng gần cuối danh sách, kết hợp với kỹ thuật caching dữ liệu để tối ưu hiệu năng.
Bài hướng dẫn này giúp bạn tích hợp hiệu quả tính năng cuộn vô hạn giữa SwiftUI và ExpressJS để tối ưu trải nghiệm người dùng.
Swift 6.4 implements SE-0521, allowing a trailing ? or ! to cover an entire opaque (some) or existential (any) type without requiring parentheses, so some View? now means (some View)? and any ScannerDelegate? means (any ScannerDelegate)?. Previously this failed because ? bound tighter than some/any in the parser, forcing (some View)? as a workaround. Protocol compositions still require explicit parentheses, e.g. any (P & Q)?. The old parenthesized form remains valid with an identical mangled type. This change matters most because Swift is moving toward requiring any on all existential types, and the compiler's fix-it will now emit the cleaner any P? form instead of (any P)? when that migration happens.
A practical walkthrough of UIKit's layoutMarginsGuide, explaining why hardcoding a fixed 16-point padding fails across different iPhone and iPad models and orientations. It shows how the guide automatically insets from the safe area using device-specific system margins, how insetsLayoutMarginsFromSafeArea and systemMinimumLayoutMargins work, how subviews need preservesSuperviewLayoutMargins to inherit margins from a parent view, and notes that SwiftUI gained an equivalent via contentMargins(for: .container) in iOS 27.1.
Implementing Server-Side Filtering in SwiftUI
Apple deprecated the App Store Connect API endpoints most screenshot upload scripts use. Plus iOS 27’s Trust Insights for spotting scam coaching, Xcode 27’s translation skills in your own agent, three Swift Evolution decisions, and iPhone Duo size classes.
Implementing Server-Side Sorting in SwiftUI
iOS 27 Is Here — Is Your App Ready for Scenes? If your app still runs on a plain old AppDelegate, iOS 27 has a message for you: adopt scenes, or your app won’t launch. I’ll be honest: for years …
Dòng xu hướng "Build in Public" đang thu hẹp do sự trỗi dậy của các bản sao AI khiến nhiều nhà phát triển ngần ngại chia sẻ công việc. Các nền tảng như GitHub và Dev.to đang đối mặt thách thức trong việc xác định ý định thực sự của người dùng khi AI ngày càng có khả năng tạo ra nội dung tương tự. Hệ quả là cộng đồng Swift, với các framework như SwiftUI và Swift Concurrency, đang tìm cách thiết kế hệ thống có khả năng phân biệt nội dung do con người tạo ra. Điều đáng học hỏi là cách Swift 6 đang giải quyết vấn đề này qua tính năng split isolation và ownership model, giúp bảo vệ bản quyền ý tưởng trong kỷ nguyên AI.
Bài viết này giúp lập trình viên hiểu tác động của AI clone đến văn hóa Build in Public và cập nhật những phát triển mới nhất trong Swift 6.
Triaging SwiftUI issues trong bộ ứng dụng của tôi đã tiêu tốn hết cả hai gói Codex và Claude với chi phí 200 USD. Nguyên nhân kỹ thuật là do hệ thống AI liên tục thực hiện UI testing cho mỗi vấn đề mà không giới hạn số lần thử. Sau khi thiết lập giới hạn tối đa một lần sửa lỗi và ngừng testing, lượng token tiêu thụ đã giảm 80%. Bài viết dạy chúng ta nên đặt giới hạn rõ ràng cho quá trình AI testing để tiết kiệm chi phí, dù có thể làm tăng nguy cơ bỏ sót lỗi.
Bài viết này giúp lập trình viên giảm 80% chi phí token khi sử dụng Codex và Claude cho các vấn đề SwiftUI.
iOS 27 giới thiệu presentationPlacement trong SwiftUI và preferredPlacement trong UIKit, cho phép nhà phát triển chọn phía màn hình hiển thị sheet. Đặc biệt quan trọng trên iPhone Duo gập, nơi màn hình mở rộng rộng đủ để sheet không chiếm toàn bộ. Bốn tùy chọn placement (.automatic, .leading, .center, .trailing) ảnh hưởng đến hướng thanh công cụ (ngang/dọc) và tương tác với hành vi tránh gấp khi thiết bị mở nửa. Trên iPhone Duo đóng hoặc iPhone thường, sheet luôn chiếm toàn bộ chiều rộng và placement không có hiệu quả nhìn thấy.
Lập trình viên nên đọc bài này để biết cách sử dụng presentationPlacement trên iPhone Duo để kiểm soát vị trí hiển thị của sheet và tối ưu trải nghiệm người dùng.
Trong iOS 26, các SwiftUI toolbar items cùng cạnh nhau tự động gộp thành một single Liquid Glass capsule. Nguyên nhân kỹ thuật là hệ thống tự động merge items trừ khi chúng ở edge khác, có prominent attribute (.glassProminent hoặc role: .confirm), hoặc bị ẩn background qua .sharedBackgroundVisibility(.hidden). Hệ quả là developer cần dùng ToolbarSpacer để chia tách capsule, với .fixed tạo khoảng nhỏ và .flexible đẩy items về hai cạnh. Điều đáng học là search field trong bottom bar cũng merge cần fixed spacers hai bên để đứng độc lập.
Bài viết này giúp lập trình viên hiểu cách tùy chỉnh giao diện toolbar trong iOS 26 với hiệu ứng Liquid Glass Capsule để tạo ứng dụng đẹp mắt và chuyên nghiệp hơn.
UIKit thực sự tốt hơn SwiftUI cho lập trình agents không? Vấn đề không nằm ở mức độ abstraction mà ở verification. Bài viết phân tích sâu stable models và Agent Ergonomics, chỉ ra cách verification có thể theo kịp khi abstraction ngày càng tăng. Sự phát triển này đặt ra thách thức cho các lập trình viên khi phải đảm bảo tính đúng đắn của hệ thống với mức trừu tượng cao.
Bài này giúp lập trình viên hiểu cách xác thực hiệu quả khi mức độ trừu tượng tăng lên trong phát triển Agent.
iOS 27 giới thiệu thuộc tính concentricCornerRadii trong GeometryProxy, cho phép developer đọc giá trị bán kính góc thực tế của view so với container hoặc màn hình. Thuộc tính này được tính toán từ bán kính màn hình trừ khoảng cách đến view, giới hạn tối đa bằng một nửa cạnh ngắn hơn, đôi khi có thể làm góc cong vượt ra ngoài màn hình. ContainerShape(_:) cho phép các bán kính này tuân theo container tùy chỉnh thay vì màn hình, và concentricCornerRadii(in:) có thể tính toán bán kính cho bất kỳ hình chữ nhật nào từ một GeometryReader duy nhất. Tính năng này chỉ có sẵn trên iOS 27, với ConcentricRectangle vẫn là fallback trên iOS 26.
Tính năng mới trong iOS 27 giúp lập trình viên đọc được giá trị bán kính góc thực tế để tạo giao diện chính xác và nhất quán với thiết bị.
Xcode 27.1 RC đã phát hành và App Store Connect hiện chấp nhận bản build iPhone Duo với yêu cầu phê duyệt trước ngày 23 tháng 10. Các công cụ mới trên App Store Connect bao gồm tiêu đề trang sản phẩm, tài nguyên kết quả tìm kiếm, công cụ xem trước và Thư viện Asset để phê duyệt sáng tạo trước. Nhà phát triển Mac đối mặt với hạn chặt ngày 1 tháng 2 năm 2027 khi chứng chỉ Developer ID Certification Authority hết hạn, yêu cầu phải ký lại các file .pkg bằng G2 certificates. SE-0554, đề xuất Swift Evolution cho kiểm tra deployment-target tại thời điểm biên dịch, đang được xem xét đến ngày 12 tháng 10.
Lập trình viên nên đọc bài này để cập nhật về các thay đổi quan trọng trong Xcode, App Store Connect, và hạn chứng chỉ Developer ID sắp hết hạn.
Trong iOS 26, navigation title của SwiftUI chỉ giữ được vị trí trung tâm khi có đủ khoảng trống giữa các toolbar items, nếu không nó sẽ dịch sang trái hoặc bị cắt thành một chữ cái, trong khi các nút toolbar không bao giờ bị thu nhỏ. Đây là thay đổi so với iOS 17, khi tiêu đề luôn được giữ trung tâm trong không gian trống và nhãn nút quay lại được ưu tiên cắt bỏ trước. Nhà phát triển có thể giữ tiêu đề ở giữa bằng cách di chuyển các ít dùng vào Menu hoặc rút ngắn tiêu đề, bao gồm cả bản dịch dài. Hệ quả là người dùng có thể thấy trải nghiệm giao diện không nhất quán khi tiêu đề bị cắt đột ngột.
Bài viết giúp lập trình viên hiểu và giải quyết vấn đề căn đề tiêu đề trong SwiftUI khi làm việc với iOS 26.
Read the news here, practice coding, follow structured courses and train for IELTS on our sibling products — all connected through one 8 Sync account.
The ecosystem home: product overviews, blog and full pricing.
ExploreLearn along a clear roadmap: videos, auto-graded quizzes, certificates and mentors who ship for a living.
View the roadmap1,000 DSA problems in Vietnamese, auto-graded across 7 languages — many FREE, right in your browser.
Practice for freeAI grading for all four IELTS skills with detailed rubric feedback.
Try it freeA 22 MB AI IDE for Vietnamese devs.
Download freeOrganizational memory for AI agents.
ExploreAI that staffs your Fanpage and qualifies leads for you.
Try it