How to Fix errordomain=nscocoaerrordomain&errormessage=không thể tìm thấy phím tắt được chỉ định.&errorcode=4
By Alex╺
- PS4
- PS5
- XBox One
- Series X
- PC

You’re working on your Mac when suddenly everything grinds to a halt. An error message pops up with a wall of intimidating text: “errordomain=nscocoaerrordomain&errormessage=không thể tìm thấy phím tắt được chỉ định.&errorcode=4.” Don’t panic! This cryptic message has a straightforward meaning—your system can’t find a specific shortcut file that it needs.
This error typically appears when an application tries to access a shortcut or file that’s been moved, renamed, or deleted. The Vietnamese phrase “không thể tìm thấy phím tắt được chỉ định” translates to “cannot find the specified shortcut,” which tells us what’s happening. The error code 4 in the NSCocoaErrorDomain indicates a “file not found” condition in macOS.
Let’s break down this error and fix it once and for all.
Understanding errordomain=nscocoaerrordomain&errormessage=không thể tìm thấy phím tắt được chỉ định.&errorcode=4
This error consists of three main components:
- errordomain=nscocoaerrordomain – This identifies the domain where the error occurred. NSCocoaErrorDomain is Apple’s error domain for Cocoa framework issues, which handles core functionality in macOS applications.
- errormessage=không thể tìm thấy phím tắt được chỉ định – The error message in Vietnamese stating “cannot find the specified shortcut.”
- errorcode=4 – In the NSCocoaErrorDomain, error code 4 corresponds to NSFileNoSuchFileError, indicating that the system couldn’t locate a requested file.
When you see this in logs, it typically appears as:
Error Domain=NSCocoaErrorDomain Code=4 “không thể tìm thấy phím tắt được chỉ định”
UserInfo={NSFilePath=/Users/username/Library/Mobile Documents/com~apple~CloudDocs/Shortcuts/MissingShortcut.shortcut}
The UserInfo section often contains the path where the system expected to find the file, which is crucial for troubleshooting.

Common Causes of errordomain=nscocoaerrordomain&errormessage=không thể tìm thấy phím tắt được chỉ định.&errorcode=4
1. Deleted or Moved Shortcut Files
The most straightforward cause is that a shortcut file has been deleted or moved. This happens commonly with:
Problematic scenario:
// Application tries to access a shortcut at a hardcoded path
let shortcutURL = URL(fileURLWithPath: “/Users/username/Documents/MyShortcut.shortcut”)
let shortcutData = try Data(contentsOf: shortcutURL) // Triggers error if file is missing
Solution:
// Better approach with error handling
let shortcutURL = URL(fileURLWithPath: “/Users/username/Documents/MyShortcut.shortcut”)
do {
let shortcutData = try Data(contentsOf: shortcutURL)
// Process shortcut data
} catch {
// Handle missing file gracefully
print(“Shortcut not found. Please restore or recreate the shortcut.”)
// Potentially offer to recreate the shortcut
}
2. iCloud Sync Issues
iCloud sync problems can cause shortcut files to appear missing:
Problematic scenario:
// Application assumes shortcuts are always synced
let iCloudContainer = FileManager.default.url(forUbiquityContainerIdentifier: nil)
let shortcutPath = iCloudContainer?.appendingPathComponent(“Shortcuts/MyShortcut.shortcut”)
let shortcutData = try Data(contentsOf: shortcutPath!) // May trigger error during sync
Solution:
// Check for iCloud availability and sync status
let fileManager = FileManager.default
guard let iCloudContainer = fileManager.url(forUbiquityContainerIdentifier: nil) else {
print(“iCloud not available. Please sign in to iCloud and try again.”)
return
}
let shortcutPath = iCloudContainer.appendingPathComponent(“Shortcuts/MyShortcut.shortcut”)
// Check if file exists in local cache
if !fileManager.fileExists(atPath: shortcutPath.path) {
// Start download if needed and monitor status
try fileManager.startDownloadingUbiquitousItem(at: shortcutPath)
print(“Downloading shortcut from iCloud…”)
}
3. File Permission Issues
Incorrect permissions can prevent access to shortcut files:
Problematic scenario:
// Attempting to access a file without proper permissions
let shortcutURL = URL(fileURLWithPath: “/Library/Shortcuts/SystemShortcut.shortcut”)
let shortcutData = try Data(contentsOf: shortcutURL) // Fails if user lacks permissions
Solution:
// Check permissions before attempting to access
let fileManager = FileManager.default
let shortcutURL = URL(fileURLWithPath: “/Library/Shortcuts/SystemShortcut.shortcut”)
// Check read permission
if fileManager.isReadableFile(atPath: shortcutURL.path) {
do {
let shortcutData = try Data(contentsOf: shortcutURL)
// Process data
} catch {
print(“Error reading shortcut: \(error)”)
}
} else {
print(“Permission denied. Cannot read the shortcut file.”)
// Suggest running with elevated permissions or fixing file permissions
}
4. System Language Mismatch
When system language settings and shortcut names don’t align:
Problematic scenario:
// Hardcoded shortcut name that doesn’t account for localization
let shortcutName = “MyEnglishShortcutName”
let shortcutPath = shortcutsDirectory.appendingPathComponent(shortcutName + “.shortcut”)
Solution:
// Use localized names or handle multiple languages
let possibleNames = [“MyEnglishShortcutName”, “TenShortcutTiengViet”]
var shortcutPath: URL?
for name in possibleNames {
let potentialPath = shortcutsDirectory.appendingPathComponent(name + “.shortcut”)
if FileManager.default.fileExists(atPath: potentialPath.path) {
shortcutPath = potentialPath
break
}
}
if let path = shortcutPath {
// Use the found path
} else {
print(“Could not find shortcut in any supported language”)
}
Solution Comparison: Fixing errordomain=nscocoaerrordomain&errormessage=không thể tìm thấy phím tắt được chỉ định.&errorcode=4
Prevention Techniques | Recovery Strategies |
Store shortcuts in standard locations (~/Library/Shortcuts) | Use Spotlight search to locate moved shortcuts |
Implement fallback paths for missing shortcuts | Restore shortcuts from Time Machine backup |
Check file existence before attempting access | Re-create missing shortcuts from templates |
Use dynamic path resolution instead of hardcoding | Clear caches to resolve sync issues (~/Library/Caches/) |
Implement proper error handling for file operations | Reset Shortcuts app preferences to default settings |
Set up regular backups of critical shortcuts | Use permission repair utilities for system files |

Diagnosing the errordomain=nscocoaerrordomain&errormessage=không thể tìm thấy phím tắt được chỉ định.&errorcode=4 Error
Follow this step-by-step process to pinpoint the exact cause:
- Extract the file path from the error message
First, identify exactly which file the system is looking for:
// Logging utility to extract file path from error
func extractFilePath(from error: NSError) -> String? {
if error.domain == NSCocoaErrorDomain && error.code == 4 {
return error.userInfo[NSFilePathErrorKey] as? String
}
return nil
}
// Usage
do {
// Attempt operation that might fail
} catch let error as NSError {
if let path = extractFilePath(from: error) {
print(“System looking for missing file at: \(path)”)
// Now you know exactly which file to restore
}
}
- Check if the file exists at the reported location
func checkFileExistence(at path: String) -> Bool {
let fileManager = FileManager.default
let exists = fileManager.fileExists(atPath: path)
print(“File at \(path) exists: \(exists)”)
return exists
}
- Verify iCloud sync status for the file
func checkiCloudStatus(for path: URL) {
let fileManager = FileManager.default
// Get the current ubiquity attributes
do {
let resourceValues = try path.resourceValues(forKeys: [.ubiquitousItemIsDownloadingKey,
.ubiquitousItemIsUploadedKey])
if let isDownloading = resourceValues.ubiquitousItemIsDownloading {
print(“File is currently downloading: \(isDownloading)”)
}
if let isUploaded = resourceValues.ubiquitousItemIsUploaded {
print(“File is fully uploaded to iCloud: \(isUploaded)”)
}
} catch {
print(“Error checking iCloud status: \(error)”)
}
}
- Examine log messages for additional context
Open Console.app and filter for related errors:
process:Shortcuts category:NSCocoaErrorDomain
Look for patterns of errors or additional information about the file access attempts.
- Test permissions with explicit access attempts
func testFilePermissions(at path: String) {
let fileManager = FileManager.default
print(“Readable: \(fileManager.isReadableFile(atPath: path))”)
print(“Writable: \(fileManager.isWritableFile(atPath: path))”)
print(“Deletable: \(fileManager.isDeletableFile(atPath: path))”)
// Get detailed attributes
do {
let attributes = try fileManager.attributesOfItem(atPath: path)
let permissions = attributes[.posixPermissions] as? NSNumber
print(“POSIX permissions: \(String(format:”%o”, permissions?.intValue ?? 0))”)
} catch {
print(“Error getting attributes: \(error)”)
}
}
Real log example:
Error Domain=NSCocoaErrorDomain Code=4 “không thể tìm thấy phím tắt được chỉ định” UserInfo={NSFilePath=/Users/username/Library/Mobile Documents/com~apple~CloudDocs/Shortcuts/DailyReport.shortcut, NSUnderlyingError=0x600003d9c740 {Error Domain=NSPOSIXErrorDomain Code=2 “No such file or directory”}}
This shows the missing shortcut file and indicates a basic file system error (POSIX error 2).

Confirming the Presence of a Shortcut File
If you encounter the “errordomain=nscocoaerrordomain&errormessage=không thể tìm thấy phím tắt được chỉ định.&errorcode=4, it may indicate that a shortcut file is missing. Here’s how to check if the file is still available:
- Move to the Expected Location: Open the folder where the shortcut should be, usually under iCloud Drive > Shortcuts.
- Verify File Existence: Look for the shortcut file with the name mentioned in the error.
- Test the File: If the file is present, attempt to open it to ensure it’s functional.
- Restore or Recreate: If the file is not found, restore it from a backup or create a new one.
Following these steps, you can identify if the file is the issue and address the error accordingly.

Implementing a Robust Solution for errordomain=nscocoaerrordomain&errormessage=không thể tìm thấy phím tắt được chỉ định.&errorcode=4
Here’s a complete implementation of a shortcut file manager class that prevents and handles this error:
import Foundation
class ShortcutFileManager {
// Singleton instance
static let shared = ShortcutFileManager()
// Primary shortcuts directory
private let shortcutsDirectory: URL
// Backup shortcuts directory
private let backupDirectory: URL
private init() {
// Set up standard locations
if let iCloudContainer = FileManager.default.url(forUbiquityContainerIdentifier: nil) {
shortcutsDirectory = iCloudContainer.appendingPathComponent(“Shortcuts”)
} else {
// Fallback to local if iCloud not available
let libraryDirectory = FileManager.default.urls(for: .libraryDirectory, in: .userDomainMask).first!
shortcutsDirectory = libraryDirectory.appendingPathComponent(“Shortcuts”)
}
// Create backup directory in Documents folder
let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
backupDirectory = documentsDirectory.appendingPathComponent(“ShortcutsBackup”)
// Ensure directories exist
try? FileManager.default.createDirectory(at: shortcutsDirectory, withIntermediateDirectories: true)
try? FileManager.default.createDirectory(at: backupDirectory, withIntermediateDirectories: true)
}
// Get shortcut with error handling and fallbacks
func getShortcut(named name: String) -> Data? {
let fileExtension = “shortcut”
let shortcutName = name.hasSuffix(“.\(fileExtension)”) ? name : “\(name).\(fileExtension)”
// Try primary location first
let primaryPath = shortcutsDirectory.appendingPathComponent(shortcutName)
do {
// Check if file exists and is downloaded from iCloud if needed
if FileManager.default.fileExists(atPath: primaryPath.path) {
// If file exists but is in iCloud, ensure it’s downloaded
let resourceValues = try primaryPath.resourceValues(forKeys: [.ubiquitousItemIsDownloadingKey])
if let isDownloading = resourceValues.ubiquitousItemIsDownloading, isDownloading {
// File is still downloading, start download and wait
try FileManager.default.startDownloadingUbiquitousItem(at: primaryPath)
// In a real app, you’d use a completion handler rather than just returning nil
print(“Shortcut is downloading from iCloud. Try again shortly.”)
return nil
}
// File exists and is available, read it
return try Data(contentsOf: primaryPath)
}
} catch let error as NSError {
if error.domain == NSCocoaErrorDomain && error.code == 4 {
print(“Primary shortcut not found: \(error.localizedDescription)”)
// Continue to fallbacks
} else {
print(“Error accessing shortcut: \(error)”)
// For non-file-not-found errors, more investigation may be needed
}
}
// Try backup location
let backupPath = backupDirectory.appendingPathComponent(shortcutName)
do {
if FileManager.default.fileExists(atPath: backupPath.path) {
print(“Using backup shortcut”)
return try Data(contentsOf: backupPath)
}
} catch {
print(“Error accessing backup: \(error)”)
}
// Try search for the file by name
if let foundPath = searchForShortcut(named: name) {
do {
print(“Found shortcut via search at: \(foundPath.path)”)
return try Data(contentsOf: foundPath)
} catch {
print(“Error accessing found shortcut: \(error)”)
}
}
// All attempts failed
print(“Could not find shortcut named \(name) in any location”)
return nil
}
// Search for shortcut in common locations
private func searchForShortcut(named name: String) -> URL? {
let fileManager = FileManager.default
let searchDirectories = [
fileManager.urls(for: .documentDirectory, in: .userDomainMask).first!,
fileManager.urls(for: .libraryDirectory, in: .userDomainMask).first!,
fileManager.urls(for: .downloadsDirectory, in: .userDomainMask).first!
]
let fileExtension = “shortcut”
let shortcutName = name.hasSuffix(“.\(fileExtension)”) ? name : “\(name).\(fileExtension)”
// Search each directory
for directory in searchDirectories {
do {
let contents = try fileManager.contentsOfDirectory(at: directory, includingPropertiesForKeys: nil)
for url in contents {
if url.lastPathComponent == shortcutName {
return url
}
}
} catch {
// Just skip directories we can’t read
continue
}
}
return nil
}
// Backup a shortcut
func backupShortcut(at path: URL) {
do {
let backupPath = backupDirectory.appendingPathComponent(path.lastPathComponent)
// Copy file to backup location
try FileManager.default.copyItem(at: path, to: backupPath)
print(“Shortcut backed up successfully”)
} catch {
print(“Failed to backup shortcut: \(error)”)
}
}
// Create a test to verify shortcut access
func testShortcutAccess(named name: String) {
let fileExtension = “shortcut”
let shortcutName = name.hasSuffix(“.\(fileExtension)”) ? name : “\(name).\(fileExtension)”
let primaryPath = shortcutsDirectory.appendingPathComponent(shortcutName)
print(“=== Shortcut Access Test ===”)
print(“Testing shortcut: \(shortcutName)”)
print(“Expected path: \(primaryPath.path)”)
// Check if file exists
let fileManager = FileManager.default
let exists = fileManager.fileExists(atPath: primaryPath.path)
print(“File exists: \(exists)”)
if exists {
// Check permissions
print(“Readable: \(fileManager.isReadableFile(atPath: primaryPath.path))”)
print(“Writable: \(fileManager.isWritableFile(atPath: primaryPath.path))”)
// Check iCloud status
do {
let resourceValues = try primaryPath.resourceValues(forKeys: [
.ubiquitousItemIsDownloadingKey,
.ubiquitousItemIsUploadedKey
])
if let isDownloading = resourceValues.ubiquitousItemIsDownloading {
print(“File is downloading: \(isDownloading)”)
}
if let isUploaded = resourceValues.ubiquitousItemIsUploaded {
print(“File is uploaded: \(isUploaded)”)
}
} catch {
print(“Error checking file status: \(error)”)
}
// Try to read content
do {
let data = try Data(contentsOf: primaryPath)
print(“Successfully read \(data.count) bytes”)
} catch {
print(“Error reading content: \(error)”)
}
} else {
// Try to find the file elsewhere
if let foundPath = searchForShortcut(named: name) {
print(“Found shortcut at alternate location: \(foundPath.path)”)
} else {
print(“Shortcut not found in any common location”)
}
}
print(“=== Test Complete ===”)
}
}
// Usage example:
func useShortcutManager() {
let manager = ShortcutFileManager.shared
// Test access to a shortcut
manager.testShortcutAccess(named: “DailyReport”)
// Get shortcut with fallbacks
if let shortcutData = manager.getShortcut(named: “DailyReport”) {
print(“Successfully retrieved shortcut (\(shortcutData.count) bytes)”)
// Use the shortcut data
} else {
print(“Failed to retrieve shortcut, creating a new one…”)
// Code to create a new shortcut
}
}
// Execute
useShortcutManager()
This implementation:
- Creates a robust file manager specifically for shortcuts
- Uses multiple fallback locations and search strategies
- Handles iCloud sync status appropriately
- Includes comprehensive error handling
- Provides backup functionality
- Includes a diagnostic test method
Conclusion
When you encounter “errordomain=nscocoaerrordomain&errormessage=không thể tìm thấy phím tắt được chỉ định.&errorcode=4,” remember it’s simply telling you a shortcut file couldn’t be found. The most effective fix is implementing robust path resolution with fallbacks and proper error handling rather than hardcoding file paths. By following the diagnostic steps and implementing the ShortcutFileManager pattern, you’ll not only fix this error but prevent similar issues.