Sự phiền toái khi simctl bị lỗi
Hôm nay, khi tôi đang thực hiện dở việc build React Native và cố gắng khởi động trình giả lập. Thay vì danh sách thiết bị thông thường, terminal lại đưa ra lỗi khó chịu này:
xcrun: error: unable to find utility "simctl", not a developer tool or in PATH
Bạn thường sẽ thấy lỗi này sau khi cập nhật Xcode hoặc khi chuyển đổi giữa các phiên bản Stable và Beta (như chuyển từ Xcode 15 sang Xcode 16). Đây là một lỗi cấu hình sai điển hình. Nếu bạn dựa vào dòng lệnh cho quy trình làm việc iOS của mình, lỗi này sẽ khiến mọi thứ dừng lại hoàn toàn. Nó chặn bạn khởi động trình giả lập, cài đặt các bản build hoặc thậm chí là liệt kê các thiết bị có sẵn.
Tại sao điều này lại xảy ra?
Vấn đề không phải là simctl bị thiếu trên máy Mac của bạn. Thủ phạm thực sự là xcrun—công cụ hỗ trợ tìm kiếm các công cụ dành cho nhà phát triển—đã bị mất dấu thư mục Xcode đang hoạt động của bạn.
Hầu hết các hệ thống mặc định sử dụng đường dẫn Command Line Tools độc lập tại /Library/Developer/CommandLineTools. Những công cụ này vẫn ổn cho các tác vụ git hoặc C++ cơ bản, nhưng chúng không bao gồm simctl. Công cụ cụ thể đó chỉ tồn tại bên trong gói Xcode.app đầy đủ. Nếu đường dẫn của bạn trỏ đến các công cụ độc lập, xcrun sẽ không tìm thấy gì và báo lỗi.
Cách khắc phục nhanh: Trỏ đến Xcode.app
Cách khắc phục trong 30 giây là trỏ xcode-select theo cách thủ công đến bản cài đặt Xcode chính của bạn. Vì hầu hết các nhà phát triển đều để Xcode trong thư mục Applications, hãy chạy lệnh này:
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
Nhập mật khẩu máy Mac của bạn khi được yêu cầu. Sau khi hoàn tất, hãy kiểm tra xem simctl đã hoạt động trở lại chưa:
xcrun simctl list devices
Nếu danh sách các trình giả lập xuất hiện, bạn đã giải quyết xong vấn đề.
Khắc phục vĩnh viễn qua Cài đặt Xcode
Bạn thích dùng chuột hơn? Bạn cũng có thể bật tắt cài đặt này bên trong giao diện người dùng của Xcode để đảm bảo nó vẫn được duy trì sau khi khởi động lại hoặc cập nhật hệ thống.
- Mở Xcode.
- Nhấn
Cmd + ,để mở Settings (Cài đặt). - Nhấp vào tab Locations.
- Tìm menu thả xuống Command Line Tools ở dưới cùng.
- Chọn phiên bản Xcode thực tế của bạn (ví dụ: "Xcode 15.4 (15F31d)").
Việc chọn phiên bản ở đây có tác dụng hoàn toàn giống với lệnh sudo, nhưng đó là một cách tuyệt vời để xác nhận rằng Xcode thực sự nhận diện bản cài đặt của bạn.
Làm việc với nhiều phiên bản Xcode
Các nhà phát triển ứng dụng di động thường phải làm việc với nhiều phiên bản, như Xcode-16-Beta.app và phiên bản ổn định Xcode.app. Mỗi khi bạn hoán đổi, đường dẫn dòng lệnh của bạn có thể bị sai lệch. Đây là một vấn đề gây đau đầu phổ biến.
Tôi tiết kiệm thời gian bằng cách thêm các alias (bí danh) này vào tệp .zshrc của mình. Không còn phải gõ các đường dẫn dài dòng mỗi khi có bản Beta mới:
alias use-xcode-stable='sudo xcode-select -s /Applications/Xcode.app/Contents/Developer'
alias use-xcode-beta='sudo xcode-select -s /Applications/Xcode-beta.app/Contents/Developer'
Giờ đây, bất cứ khi nào tôi chuyển đổi dự án, tôi chỉ cần gõ use-xcode-stable và các công cụ của tôi sẽ ngay lập tức được căn chỉnh đúng.
Xác minh việc khắc phục
Chạy ba bước kiểm tra sau để xác nhận thiết lập của bạn đã ổn định:
- Kiểm tra đường dẫn: Chạy
xcode-select -p. Kết quả trả về phải là/Applications/Xcode.app/Contents/Developer. - Kiểm tra simctl: Chạy
xcrun simctl help. Bạn sẽ thấy tài liệu hướng dẫn, chứ không phải một thông báo lỗi. - Kiểm tra phiên bản: Chạy
xcodebuild -versionđể đảm bảo bạn đang sử dụng đúng phiên bản mong muốn.
Vẫn chưa hoạt động?
Đôi khi xcrun rất "ngoan cố", đặc biệt nếu gần đây bạn đã di chuyển Xcode.app vào một thư mục con hoặc đổi tên nó. Hãy thử đặt lại hoàn toàn đường dẫn và sau đó thiết lập lại:
sudo xcode-select --reset
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
Cuối cùng, hãy kiểm tra xem biến môi trường DEVELOPER_DIR có đang ghi đè các cài đặt của bạn không. Chạy echo $DEVELOPER_DIR. Nếu một đường dẫn hiện ra, hãy xóa dòng đó khỏi .zshrc hoặc .bash_profile của bạn. Tốt nhất là hãy để xcode-select tự động xử lý các công việc nặng nhọc này.

