Không thể khóa hoặc mở khóa thiết bị iOS bằng lập trình (programmatically) mà không sử dụng Private API.
Tại sao không thể?
- Apple không cung cấp public API để kiểm soát khóa/mở khóa thiết bị
- Đây là vấn đề bảo mật và quyền kiểm soát của người dùng
- Mọi app cố gắng làm điều này sẽ bị từ chối (reject) khi submit App Store
Private API (Chỉ để tham khảo, KHÔNG dùng cho production)
Có một số Private API như GSEventLockDevice() từ framework GraphicsServices có thể thực hiện được, nhưng:
- Không có tài liệu chính thức từ Apple
- Có thể thay đổi/bị xóa bất kỳ lúc nào giữa các phiên bản iOS
- Chắc chắn bị reject App Store
- Vi phạm App Store Review Guidelines Section 2.5.1
Giải pháp thay thế hợp pháp
1. Tự động tắt màn hình (Auto-lock) - Chỉ trong app
Ngăn thiết bị tự động khóa màn hình khi app đang chạy:
// Giữ màn hình sáng
UIApplication.shared.isIdleTimerDisabled = true
// Khôi phục mặc định
UIApplication.shared.isIdleTimerDisabled = false
2. Yêu cầu xác thực (Face ID / Touch ID / Passcode)
Dùng LocalAuthentication để bảo vệ nội dung nhạy cảm trong app:
import LocalAuthentication
func authenticateUser(completion: @escaping (Bool, Error?) -> Void) {
let context = LAContext()
var error: NSError?
if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) {
context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics,
localizedReason: "Cần xác thực để truy cập") { success, error in
completion(success, error)
}
} else {
completion(false, error)
}
}
3. Guided Access (Chế độ truy cập hướng dẫn)
Cho phép user khóa app vào một màn hình cụ thể (Settings → Accessibility → Guided Access). Phù hợp cho kiosk, education, testing.
4. MDM (Mobile Device Management)
Đối với doanh nghiệp: dùng MDM profile để khóa thiết bị, cài đặt app, cấu hình policies từ xa.
Kết luận
Không có cách nào hợp pháp để khóa/mở khóa thiết bị iOS từ bên trong app. Nếu bạn thấy thư viện/códigoclaim làm được, đó là dùng Private API và sẽ bị reject. Hãy thiết kế app hoạt động trong khuôn khổ cho phép của iOS sandbox.