Khám Phá Toàn Diện Xcode 27: Nâng Tầm Phát Triển Ứng Dụng Apple Với AI và Công Cụ Mới

Xcode 27, hiện đang trong giai đoạn beta, đánh dấu một bước tiến lớn của Apple trong việc phát triển ứng dụng. Phiên bản này không chỉ mang đến những cải tiến về hiệu suất mà còn tích hợp sâu rộng trí tuệ nhân tạo (AI) vào quy trình làm việc của nhà phát triển. Từ hỗ trợ Apple Silicon độc quyền đến các công cụ gỡ lỗi và phân tích chuyên sâu, Xcode 27 hứa hẹn sẽ định hình lại cách chúng ta xây dựng ứng dụng cho hệ sinh thái Apple.

Yêu Cầu Hệ Thống và Khả Năng Tương Thích: Điều Cần Biết Trước Khi Bắt Đầu

Trước khi khám phá các tính năng mới, điều quan trọng là phải đảm bảo môi trường phát triển của bạn đáp ứng các yêu cầu của Xcode 27:

  • Xcode 27 yêu cầu máy Mac chạy macOS Tahoe 26.4 trở lên.
  • Phiên bản này chỉ cài đặt và chạy trên các máy Mac sử dụng chip Apple Silicon. Nếu bạn vẫn đang sử dụng máy Mac dùng chip Intel, đây sẽ là phiên bản cuối cùng được hỗ trợ.
  • Gỡ lỗi trên thiết bị (on-device debugging) hỗ trợ iOS 17+, tvOS 17+, watchOS 10+, và visionOS. Các thiết bị cũ hơn sẽ không còn được hỗ trợ gỡ lỗi.

Xcode 27 được tích hợp với Swift 6.4 cùng với các SDK cho iOS 27, iPadOS 27, tvOS 27, watchOS 27, macOS 27 và visionOS 27.

Những Thay Đổi Quan Trọng Có Thể Phá Vỡ Code (Breaking Changes): Cảnh Giác Cho Nhà Phát Triển

Phần này đặc biệt quan trọng vì nó chứa đựng những thay đổi có thể gây lỗi build ngay lập tức trong dự án hiện có của bạn.

Loại Bỏ Hỗ Trợ Intel Trong Cài Đặt Build Mặc Định

Nếu mục tiêu triển khai tối thiểu của bạn là macOS 27.0 hoặc DriverKit 27.0, dự án của bạn sẽ không còn được build Universal theo mặc định nữa. Cài đặt ARCHS_STANDARD sẽ loại bỏ `x86_64` khi `MACOSX_DEPLOYMENT_TARGET` hoặc `DRIVERKIT_DEPLOYMENT_TARGET` là 27.0 trở lên.

Nếu bạn vẫn cần hỗ trợ máy Mac Intel, có hai lựa chọn:

  1. Giữ mục tiêu triển khai tối thiểu của bạn dưới macOS 27.0.
  2. Thêm `x86_64` vào cài đặt build `ARCHS` một cách rõ ràng.

SDK macOS 27 vẫn có thể triển khai các ứng dụng Universal xuống macOS 12, đây chỉ là một thay đổi mặc định chứ không phải loại bỏ hoàn toàn.

Trình Liên Kết Cũ ld64 Đã Biến Mất

`ld64` đã bị xóa và cờ `-ld_classic` không còn được hỗ trợ. Nếu bạn vẫn còn cờ này trong `OTHER_LDFLAGS` từ các bản sửa lỗi cũ, hãy xóa nó ngay lập tức. Đây là một lỗi nghiêm trọng, không phải là cảnh báo.

On Demand Resources (ODR) Bị Ngưng Sử Dụng: Chuyển Sang Background Assets

Hệ thống On Demand Resources (ODR), bao gồm `NSBundleResourceRequest`, đã bị phản đối. Hệ thống thay thế là Background Assets, đã nhận được nhiều cải tiến đáng kể trong phiên bản này.

PreviewProvider Đã Lỗi Thời: Chuyển Sang Macro #Preview

`PreviewProvider` cùng với các modifier liên quan đã bị ngưng sử dụng. Nếu bạn vẫn đang dùng các preview dựa trên struct cũ, đây là lúc để chuyển sang macro `#Preview`.

Trước đây:

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

Hiện tại:

#Preview {
    ContentView()
}

Thay Đổi Nguồn Swift Đáng Chú Ý: Lỗi Biên Dịch Thuộc Tính Tính Toán

Một thay đổi tinh tế nhưng quan trọng: thuộc tính tính toán (computed property) có cả trình truy cập `init` và một mảng hoặc từ điển literal làm giá trị khởi tạo sẽ không còn biên dịch được nếu getter được khai báo trước trình truy cập `init`. Đây là một lỗi nguồn đã biết từ SE-0508.

Code lỗi:

struct S {
    var _strings: [String]
    var strings: [String] = ["hello"] {
        get { _strings }
        @storageRestrictions(initializes: _strings)
        init { _strings = newValue }
    }
}

Cách khắc phục là sắp xếp lại thứ tự: khai báo trình truy cập `init` trước, sau đó mới đến getter.

Lỗi Tên Module Clang Trùng Lặp: Yêu Cầu Duy Nhất Hóa

Trình quét phụ thuộc Swift đã được tối ưu hóa để bỏ qua việc tìm kiếm header thừa, và điều này dẫn đến việc mỗi module Clang có thể truy cập từ một lần quét phụ thuộc phải có tên module duy nhất. Trước đây, trình quét chấp nhận các bản sao; giờ đây nó có thể gây lỗi.

Hai tình huống phổ biến gây ra lỗi này:

  • Một SDK hoặc dự án cung cấp cùng một tên module Clang từ nhiều vị trí trên đường dẫn tìm kiếm header.
  • Mã nguồn của bên thứ ba cung cấp tệp `module.modulemap` khai báo lại một module đã có trong SDK.

Những Cải Tiến Đáng Kể Trong C++ Standard Library

Nếu ứng dụng của bạn sử dụng C++, có một số thay đổi cần lưu ý:

  • Mục tiêu triển khai macOS tối thiểu cho thư viện chuẩn C++ hiện là 11.0.
  • `multimap::find` và `multiset::find` không còn đảm bảo trả về một iterator cho phần tử bằng nhau đầu tiên. Hãy sử dụng `lower_bound` hoặc `equal_range` nếu bạn đang dựa vào hành vi này.
  • `lower_bound` và `upper_bound` trên `std::map` và `std::set` hoạt động khác nhau đối với các comparator không phải là thứ tự yếu nghiêm ngặt.
  • `bitset::operator[]` hiện trả về `bool` theo chuẩn.
  • `std::allocator` hiện có thể khởi tạo mặc định một cách đơn giản (trivially default-constructible).

Điểm cộng là hiệu suất được cải thiện đáng kể: các container liên kết và không có thứ tự nhanh hơn tới 11 lần, một số thuật toán nhanh hơn tới 3 lần, và `distance` trên các iterator phân đoạn không truy cập ngẫu nhiên được cải thiện đáng kể.

Công Nghệ Mã Hóa Tự Động (Agentic Coding) Trở Thành Trọng Tâm: Trợ Lý AI Mạnh Mẽ

Đây là tính năng nổi bật của Xcode 27, vượt xa một hộp chat thông thường.

Trợ Lý AI Di Chuyển Đến Vị Trí Mới và Giao Diện Đàm Thoại Cải Tiến

Trợ lý mã hóa hiện nằm trong khu vực trình chỉnh sửa thay vì thanh điều hướng, với một bản ghi cuộc trò chuyện được thiết kế lại. Các tạo phẩm mà agent tạo ra (diff code, kế hoạch, ảnh chụp SwiftUI preview) hiển thị bên cạnh bản ghi, và bạn có thể chú thích các đoạn mã hoặc tài liệu kế hoạch để cung cấp phản hồi mục tiêu mà không cần rời khỏi cuộc trò chuyện.

Thanh bên giờ đây chỉ dành riêng cho việc tổ chức các cuộc trò chuyện: trạng thái thời gian thực, chỉ báo chưa đọc, nhóm bằng kéo và thả, lưu trữ, đổi tên, chọn nhiều cuộc trò chuyện để thực hiện các hành động hàng loạt, và menu ngữ cảnh để mở cuộc trò chuyện trong tab, cửa sổ hoặc ngăn trình chỉnh sửa mới.

Chế Độ Lập Kế Hoạch (Plan Mode): Viết Code Thông Minh Hơn

Lập kế hoạch hiện là một tính năng chính thức. Các kế hoạch xuất hiện dưới dạng tạo phẩm Markdown có thể chỉnh sửa bên cạnh cuộc trò chuyện. Bạn có thể xem xét, chú thích, thảo luận các thay đổi và phê duyệt trước khi agent viết bất kỳ mã nào. Đây là quy trình làm việc được khuyến nghị cho bất kỳ tác vụ phức tạp nào: đảm bảo kế hoạch đúng trước, sau đó mới cho phép agent thực thi.

Khả Năng Vận Hành Ứng Dụng Thực Tế của Trợ Lý AI

Đây là phần thay đổi hoàn toàn khả năng ứng dụng của các agent. Trong Xcode 27, các agent có thể:

  • Khởi động simulator, cài đặt và chạy ứng dụng, tổng hợp các sự kiện chạm, và chụp ảnh màn hình để xác minh hành vi UI.
  • Thao tác trạng thái chạy hiện tại, đọc và tương tác với console gỡ lỗi.
  • Liệt kê và chuyển đổi giữa các scheme và đích chạy (run destinations).
  • Kiểm tra và sửa đổi cài đặt build, cờ biên dịch, quyền lợi (entitlements), và khóa Info.plist.
  • Truy cập thông tin chi tiết dự án như lỗi crash, ghi đĩa, năng lượng, treo và các vấn đề khởi chạy ảnh hưởng đến ứng dụng đã phát hành của bạn.

Nói cách khác, một agent giờ đây có thể viết một bản sửa lỗi, build, chạy, xem màn hình và kiểm tra xem nó có hoạt động không.

Tích Hợp Google Gemini, ACP và Hệ Thống Plugin Mở Rộng

  • Google Gemini hiện có sẵn trong trợ lý mã hóa bên cạnh các tùy chọn hiện có.
  • Xcode hỗ trợ Agent Client Protocol (ACP).
  • Các agent có thể được mở rộng bằng plugin chứa các kỹ năng, máy chủ MCP và cấu hình agent ACP. Các kỹ năng có thể được gọi bằng lệnh slash với hỗ trợ tự động hoàn thành.
  • Apple cung cấp các chuyên gia (specialists) của riêng mình cho các tác vụ mục tiêu như bản địa hóa, điều chỉnh kích thước UIKit và khả năng tiếp cận.
  • Hai kỹ năng tập trung vào bảo mật đã có trong beta 3: `adopt-c-bounds-safety` cho quy trình áp dụng `-fbounds-safety` từng tệp, và `audit-xcode-security-settings` để đề xuất cài đặt build và quyền lợi liên quan đến bảo mật.

Các tác giả plugin có thể tùy chỉnh cách các máy chủ MCP của họ xuất hiện trong UI bằng cách sử dụng các trường `_meta`:

{
  "name": "MyGreatPlugin",
  "description": "An awesome MCP server configuration.",
  "version": "1.0.0",
  "mcpServers": {
    "MyGreatMCP": {
      "type": "http",
      "url": "...",
      "tools": ["*"],
      "_meta": {
        "ideToolIconPath": "./icon.svg",
        "ideToolIconRendersAsTemplate": true,
        "ideToolTitles": {
          "whoami": "Who Am I",
          "get-current-email": "Get Current Email Message"
        }
      }
    }
  }
}

Sandbox Bảo Mật Cho Các Agent: Kiểm Soát Truy Cập Hệ Thống Tệp

Coding Intelligence bao gồm một lớp bảo mật mới giám sát và kiểm soát quyền truy cập hệ thống tệp của các agent mã hóa và bất kỳ tiến trình nào chúng tạo ra. Tính năng này là tùy chọn thông qua cài đặt Coding Intelligence. Nếu bạn lo lắng về việc cho phép một agent hoạt động tự do trong kho lưu trữ của mình, hãy bật tính năng này trước khi làm bất cứ điều gì khác.

Lưu Ý Quan Trọng Về Tương Tác Với Agent

Nếu thanh xác nhận “Implement the plan?” xuất hiện khi agent vẫn đang streaming phản hồi, việc nhấp Có hoặc Không có thể bắt đầu một lượt agent mới chồng lên lượt đang diễn ra và khiến cuộc trò chuyện bị lỗi. Hãy đợi agent hoàn thành phản hồi trước khi xác nhận.

Device Hub: Giao Diện Quản Lý Thiết Bị Thống Nhất và Hiệu Quả Hơn

Device Hub là giao diện hợp nhất mới cho cả simulator và thiết bị vật lý, mang lại hai tính năng nổi bật.

Ghép Nối Không Dây: Đơn Giản Hóa Quy Trình Phát Triển

Giờ đây, bạn có thể ghép nối iPhone, iPad và Apple Watch chạy OS 27 trở lên qua mạng. Nhấp vào nút `+` trong thanh bên Device Hub và chọn “Pair Nearby Device”. Không cần cáp cho iPhone và iPad, và việc ghép nối Apple Watch cũng đáng tin cậy hơn rõ rệt.

Cử Chỉ Chuột và Bàn Di Chuột Trên iOS: Trải Nghiệm Mới cho UI/UX

Các cử chỉ tiêu chuẩn của Mac (cuộn, chụm, xoay) hiện hoạt động với các thành phần UIKit trên thiết bị iOS, cả vật lý hoặc mô phỏng. Khi bạn cuộn bằng thiết bị trỏ, `UIEvent.EventType.scroll` được phát ra. Chụm hoặc xoay tạo ra `UIEvent.EventType.transform`. Tuy nhiên, nhấp bằng chuột tạo ra một lần chạm ngón tay mô phỏng loại `UITouch.TouchType.direct`, không phải `UITouch.TouchType.indirectPointer`. Đây là một phương pháp kết hợp tiện lợi, không phải là mô phỏng chính xác.

Khởi Động Simulator Nhanh Hơn Với Bộ Nhớ Đệm Dyld Được Xây Dựng Sẵn

Các runtime của Simulator hiện đi kèm với bộ nhớ đệm dyld được xây dựng sẵn, giúp khởi chạy simulator lần đầu nhanh hơn đáng kể. Một thay đổi nhỏ nhưng hữu ích mỗi ngày.

Những Hạn Chế Ban Đầu Của Device Hub (Beta)

Là phần mềm beta, bạn có thể gặp một số vấn đề:

  • Tay cầm chơi game chỉ hoạt động với visionOS simulator.
  • Video và đầu vào cho Apple Vision Pro vật lý không được hỗ trợ (sử dụng AirPlay để xem từ xa).
  • Không thể gửi chạm hai ngón tay.
  • Cuộn qua mặt đồng hồ Apple Watch không mô phỏng núm Digital Crown.
  • Các thiết bị có thể không xuất hiện trong quá trình kiểm thử song song.
  • Các container dữ liệu ứng dụng tải xuống nằm trong một thư mục có tên theo định danh gói thay vì gói `.xcappdata` thích hợp.

Cải Tiến Đáng Kể Trong Previews và Playgrounds: Nâng Cao Hiệu Suất Thiết Kế UI

Previews đã nhận được những cải tiến đáng kể về chất lượng cuộc sống trong chu kỳ này.

Lưới Đối Số (Argument Grids): Kiểm Tra Đa Trạng Thái Dễ Dàng

`#Preview(arguments:)` hiển thị một lưới các preview, mỗi preview cho một đối số. Nhấp vào bất kỳ ô nào để mở nó ở chế độ Tương tác. Điều này rất hữu ích cho các ma trận trạng thái.

#Preview(arguments: [
    Order.empty,
    Order.singleItem,
    Order.manyItems
]) { order in
    OrderSummaryView(order: order)
}

Canvas Có Thể Thay Đổi Kích Thước (Resizable Canvas): Thiết Kế UI Linh Hoạt Hơn

Các preview trên iOS có chế độ Resizable Canvas để bạn có thể xem chế độ xem của mình trong các container có kích thước tùy ý thay vì khung thiết bị cố định.

Các Cải Tiến Khác Đáng Chú Ý

  • Mỗi tab `#Preview` và `#Playground` có thể được ghim độc lập trên canvas.
  • Bạn có thể xem trước UI của mình trong một bản địa hóa khác.
  • Mã bên trong `#Preview` hiện chạy rõ ràng trên main actor, giúp tránh cảnh báo đồng thời.
  • Giữ phím Command định tuyến các sự kiện thu phóng và cuộn đến canvas.
  • Thông báo lỗi trên các bản xem trước được cải thiện đáng kể: thời gian chờ rõ ràng hơn, chẩn đoán đầy đủ về lỗi công cụ MCP và chế độ xem giữ chỗ thay vì dự phòng macOS im lặng khi runtime không được cài đặt.

Vấn Đề Đã Biết Với Tệp Swift Độc Lập

Các tệp Swift độc lập được mở bằng cách nhấp đúp trong Finder có thể không chạy các khối `#Playground` hoặc `#Preview`. Hãy sử dụng File > Open hoặc kéo vào biểu tượng Dock.

Bản Địa Hóa: Quy Trình Làm Việc Mới Với Hỗ Trợ AI

Tính năng này có lẽ là tính năng thực tế nhất ngay lập tức cho các nhóm nhỏ. Các agent giờ đây có thể dịch các chuỗi trong String Catalogs, từ một tính năng duy nhất đến toàn bộ dự án, sang một hoặc nhiều ngôn ngữ. Xcode tự động xử lý các tác vụ phụ trợ: thêm ngôn ngữ vào cài đặt dự án, tạo String Catalogs còn thiếu và cung cấp ngữ cảnh cho agent khi dịch.

Trình chỉnh sửa String Catalog có nút Generate Translations, và bạn có thể nhấp chuột phải vào các chuỗi cụ thể để chỉ dịch chúng.

Các thay đổi hỗ trợ giúp tính năng này hoạt động hiệu quả trong quy trình thực tế:

  • Một comment bản địa hóa “do not translate” tự động đánh dấu chuỗi là Don’t Translate trong String Catalogs và `translate=”no”` trong các tệp XLIFF đã xuất.
  • Các tệp XLIFF đã xuất sử dụng `state-qualifier=”leveraged-mt”` để gắn cờ các chuỗi được dịch bằng máy, giúp dịch giả chuyên nghiệp biết cần xem xét những gì.
  • Bạn có thể chú thích các bản dịch trong tạo phẩm String Catalog khi agent đang dịch.
  • Xuất bản địa hóa giờ đây trích xuất `NSLocalizedString` và các macro tương tự từ tệp header, không chỉ các tệp triển khai.
  • Công cụ “Prepare Project for Localization” hiển thị các chuỗi mới được thêm vào dưới dạng tạo phẩm, và hiển thị các khóa bị xóa vì không còn xuất hiện trong mã nguồn.

Thành thật mà nói, tính năng này xử lý phần lớn công việc, nhưng bạn vẫn nên có một dịch giả chuyên nghiệp xem xét kết quả trước khi phát hành ra thị trường mới.

Instruments Nâng Cấp Mạnh Mẽ: Công Cụ Phân Tích Hiệu Suất Toàn Diện

Nếu bạn làm việc về hiệu suất, đây có thể là phần giá trị nhất của bản phát hành này.

Công Cụ Swift Concurrency Mới

  • Một instrument Swift Executors mới hiển thị các track cho Cooperative Thread Pool, Main Actor và bất kỳ loại nào tuân thủ `TaskExecutor` hoặc `SerialExecutor`.
  • Các track tác vụ (Task tracks) hiện được nhóm thành Swift Task Collections, được sắp xếp theo tên hoặc vị trí tạo.
  • Các tác vụ, collection, Actor và Executor có chi tiết Profile hiển thị cây gọi được xây dựng từ dữ liệu được chụp khi tác vụ đang chạy.
  • Chọn một khoảng biểu đồ thanh trong biểu đồ hàng đợi Actor hoặc Executor sẽ liệt kê các tác vụ đang chờ trong trình kiểm tra.
  • Lệnh `language swift task tree` trong LLDB in ra cây của mọi Swift Task mà trình gỡ lỗi biết.

Instruments cho Foundation Models: Theo Dõi Hiệu Suất AI Trên Thiết Bị

Instrument mới để theo dõi và gỡ lỗi việc sử dụng Foundation Models: hướng dẫn, lời nhắc (prompts), phản hồi, mức sử dụng token và hiệu suất suy luận. Nếu bạn đang phát triển các tính năng AI trên thiết bị, giờ đây bạn đã có khả năng hiển thị chúng.

System Trace và QoS: Hiểu Rõ Hoạt Động Hệ Thống

System Trace hợp nhất các cuộc gọi hệ thống, lỗi VM và trạng thái luồng vào một biểu đồ duy nhất, với thuật toán pha trộn giúp các vùng dày đặc dễ đọc khi thu nhỏ. Bạn có thể xem chuỗi các sự kiện lập lịch cho một luồng bằng các phím mũi tên trái/phải, và trình kiểm tra cung cấp các hành động nhanh như ghim luồng đã làm cho một luồng khác có thể chạy được.

Mẫu System Trace cũng biểu đồ ưu tiên luồng theo thời gian, giúp dễ dàng phát hiện đảo ngược ưu tiên và thiếu tài nguyên hơn nhiều. Hoạt động luồng hiện hiển thị QoS hiệu quả theo mặc định, với QoS được yêu cầu có sẵn từ trình đơn thả xuống của track.

Toàn Bộ Những Cải Tiến Khác Trong Instruments

  • Biểu đồ không còn tự động thay đổi tỷ lệ theo giá trị cực đại cục bộ khi bạn di chuyển dòng thời gian.
  • Các track đã ghim được khôi phục từ lần chạy trước, và có thể được lưu và khôi phục rõ ràng.
  • Một trình kiểm tra mới hiển thị chi tiết cho sự kiện đã chọn với các hành động nhanh.
  • Dữ liệu `os_log` có thể được phủ lên các track tiến trình và luồng.
  • `os_signpost` có một track cho mỗi tên signpost, nằm dưới danh mục.
  • Instrument SwiftUI ghi lại nhiều chi tiết hơn về các lần truyền bố cục và lý do tính toán bố cục không được lưu vào bộ nhớ cache.
  • Allocations đánh dấu các allocation được gắn thẻ bằng hậu tố `(tagged)` khi tiến trình chạy với Memory Integrity Enforcement.
  • Kéo và thả các tệp `.atrc`, `.logarchive` hoặc `.sample` vào thanh bên để tạo một lần chạy cho mỗi tệp.
  • Mức sử dụng bộ nhớ khi nhập tệp `.atrc` giảm khoảng 1.5 GB trung bình.
  • Animation Hitches hỗ trợ visionOS 27.0 trở lên.

Trên dòng lệnh, `xctrace record` chấp nhận các tùy chọn ghi dưới dạng JSON, `xctrace export` có thể giới hạn một khoảng thời gian, và xuất hiện chấp nhận trực tiếp `.atrc` và `.logarchive`.

Lưu Ý Về Hỗ Trợ Thiết Bị Cũ Cho Instruments

Instruments hiện yêu cầu iOS 17, watchOS 10 hoặc tvOS 17 làm tối thiểu trên các thiết bị mục tiêu.

Organizer và Thống Kê Sản Xuất: Công Cụ Lập Kế Hoạch và Ưu Tiên Mới

Organizer đã trở thành một công cụ lập kế hoạch chứ không chỉ là trình xem lỗi crash.

  • Insights Overview tóm tắt các sự suy giảm hiệu suất có tác động lớn trên các số liệu và báo cáo chẩn đoán.
  • Số liệu Hitches thay thế Scrolling và bao gồm tất cả các hoạt ảnh trong ứng dụng của bạn.
  • Số liệu lưu trữ theo dõi Documents & Data và kích thước ứng dụng qua các bản phát hành.
  • Phân tích dựa trên AI tạo ra các đề xuất cho chẩn đoán Crash, Energy, Disk Write, Hang và Launch, với các liên kết đến mã nguồn và trợ lý mã hóa.
  • Mục tiêu số liệu hiện bao gồm Battery Usage, Disk Writes, Hang Rate, Hitches, Memory và Storage.

Kết hợp với việc các agent có quyền truy cập vào những thông tin chi tiết này, quy trình lặp lại là: Organizer báo hiệu sự suy giảm hiệu suất, bạn hỏi agent về điều đó, agent đọc chẩn đoán và đề xuất một bản sửa lỗi.

Kiểm Thử (Testing): Nâng Cao Độ Tin Cậy và Hiệu Quả

Xcode 27 mang đến nhiều cải tiến cho quy trình kiểm thử.

  • `XCUIVoiceOverService` là API kiểm thử UI mới để xác minh hành vi của VoiceOver.
  • Một mẫu tệp kiểm thử khởi chạy mới hỗ trợ `runsForEachTargetApplicationUIConfiguration`, giúp kiểm thử chạy trên mọi sự kết hợp của hướng, bản địa hóa và giao diện mà ứng dụng của bạn hỗ trợ.
  • Kế hoạch kiểm thử cho phép bạn chọn cách hệ thống phản ứng khi ứng dụng mục tiêu gặp sự cố trong quá trình kiểm thử UI: tắt, cảnh báo, lỗi (mặc định) hoặc lỗi nghiêm trọng.
  • Trộn lẫn các framework giờ đây sẽ cảnh báo bạn: gọi một assertion XCTest bên trong một bài kiểm thử Swift Testing (hoặc ngược lại) sẽ tạo ra một vấn đề runtime mức độ cảnh báo.
  • Bộ lọc đã được thêm vào tab cấu hình kế hoạch kiểm thử, cùng với bộ lọc kiểm thử gần đây và kiểm thử đang mở trong Test Navigator.
  • Các bộ Swift Testing lớn với nhiều trường hợp tham số hóa hoạt động tốt hơn đáng kể.
  • Chế độ lặp lại kiểm thử hiện lặp lại các trường hợp Swift Testing riêng lẻ thay vì toàn bộ kế hoạch kiểm thử.

Về phía SwiftPM, `swift test` tóm tắt các lỗi ở cuối một lần chạy, và hỗ trợ `–maximum-repetitions` với `–repeat-until [pass|fail]` để tìm kiếm các kiểm thử không ổn định.

swift test --maximum-repetitions 20 --repeat-until fail

Các Cải Tiến Khác Đáng Chú Ý

Interface Builder Biên Dịch Không Cần Simulator

Một chế độ biên dịch IB mới, `toolchain`, được bật theo mặc định cho các tài liệu UIKit. Nó biên dịch các tài liệu IB mà không cần tải xuống simulator, một lợi ích thực sự cho CI và máy chủ build.

Background Assets Nâng Cấp

Vì On Demand Resources đã bị phản đối, điều này trở nên quan trọng:

  • Các manifest gói tài sản hỗ trợ wildcard đường dẫn, loại trừ tệp, thư mục gốc mã hóa cứng và đường dẫn phụ đích tùy chỉnh.
  • Gói tài sản được bản địa hóa: hệ thống chỉ phân phối các gói khớp với ngôn ngữ ưu tiên của người dùng, giảm mức sử dụng bộ nhớ.
  • Một Steam Asset Converter chuyển đổi kho Steam thành gói tài sản.
  • Xcode có thể phục vụ các gói tài sản cho ứng dụng của bạn trong khi gỡ lỗi trên thiết bị.

Kiểm Thử StoreKit Mở Rộng

  • Giao diện người dùng cấu hình mới cho mã ưu đãi mua hàng trong ứng dụng, cùng với các tùy chọn mua hàng ngoài thiết bị để kiểm thử chúng thông qua Transaction Manager.
  • Subscription Bundles và Subscription Suites có thể được cấu hình để kiểm thử cục bộ.
  • Các giao dịch mua số lượng lớn có thể được tạo cho các gói đăng ký tự động gia hạn 1 tháng và 1 năm.

Khả Năng Tương Tác Giữa Swift và C++

  • Các hàm khởi tạo C++ với biểu thức tham số mặc định không còn yêu cầu truyền mọi đối số một cách rõ ràng từ Swift.
  • Các closure Swift chuyển đổi thành các thể hiện `std::function`.
  • Các tham số `std::span` được chú thích `__counted_by` và `__noescape` ánh xạ tới Swift `Span` mà không cần cờ tính năng thử nghiệm.
  • Macro `SWIFT_REFCOUNTED_PTR` mới bắc cầu các smart pointer đến các kiểu tham chiếu đếm tự động (intrusively reference-counted) vào các lớp Swift.

Gỡ Lỗi (Debugging) Hiệu Quả Hơn

  • LLDB có thể kiểm tra các kiểu dữ liệu với trường `~Copyable` trong thư viện chuẩn và framework hệ thống.
  • LLDB đi kèm với máy chủ MCP (`lldb-mcp`).
  • Trong các dự án sử dụng bridging headers, LLDB nhập các module Swift và PCH được build rõ ràng từ DerivedData trực tiếp. Điều này có thể tăng tốc đáng kể lệnh `po` đầu tiên trong một phiên gỡ lỗi.

Tìm Kiếm Tài Liệu Bằng Ngôn Ngữ Tự Nhiên

Bạn có thể tìm kiếm tài liệu dành cho nhà phát triển bằng ngôn ngữ tự nhiên, với kết quả được khớp theo ngữ nghĩa thay vì theo từ khóa.

Icon Composer 2.0

Hỗ trợ chế độ hiển thị sắc nét hơn cho các hệ điều hành năm 2027, với khả năng khúc xạ, phản xạ bên ngoài và bóng đổ sâu hơn.

Danh Sách Kiểm Tra Di Chuyển Sang Xcode 27 (Migration Checklist)

Để tóm tắt những điểm chính, đây là danh sách kiểm tra nhanh để bạn bắt đầu:

  1. Xác nhận bạn đang sử dụng máy Mac Apple Silicon với macOS Tahoe 26.4+.
  2. Xóa `-ld_classic` khỏi các cờ trình liên kết của bạn.
  3. Quyết định cách xử lý hỗ trợ Intel: hạ thấp mục tiêu triển khai của bạn, hoặc thêm `x86_64` vào `ARCHS` một cách rõ ràng.
  4. Di chuyển `PreviewProvider` sang `#Preview`.
  5. Lập kế hoạch chuyển từ On Demand Resources sang Background Assets.
  6. Kiểm tra các tên module Clang trùng lặp nếu quá trình quét phụ thuộc bắt đầu thất bại.
  7. Khắc phục mọi vấn đề về thứ tự trình truy cập `init` do trình biên dịch Swift gắn cờ.
  8. Nếu bạn sử dụng C++, kiểm tra lại việc sử dụng `multimap`/`multiset` `find` và bất kỳ comparator tùy chỉnh nào.
  9. Bật lớp bảo mật hệ thống tệp của agent trước khi cho phép agent hoạt động.
  10. Hạ thấp mục tiêu thiết bị tối thiểu của bạn để kiểm thử xuống iOS 17 trở lên.

Xcode 27 là một bản cập nhật đầy tham vọng, mang đến những công cụ mạnh mẽ và cải tiến quy trình làm việc đáng kể, đặc biệt là với sự tích hợp AI sâu rộng. Mặc dù vẫn đang trong giai đoạn beta và có thể có một số vấn đề cần lưu ý, những tính năng mới này chắc chắn sẽ tăng cường năng suất và khả năng sáng tạo của các nhà phát triển ứng dụng Apple. Hãy tham khảo ghi chú phát hành chính thức của Apple để biết thêm chi tiết.