Are you pulling your hair out over that cryptic errordomain=nscocoaerrordomain&errormessage=finner ikke den angitte snarveien.&errorcode=4 error? You’re not alone. This frustrating error strikes macOS users when they least expect it, bringing productivity to a screeching halt. The Norwegian error message translates to “could not find the specified shortcut” and typically appears when your system can’t locate a needed resource.
Let’s cut through the confusion and fix this error for good. By the end of this article, you’ll understand exactly what’s happening behind the scenes and have several battle-tested solutions in your troubleshooting arsenal.

What Exactly Is the errordomain=nscocoaerrordomain&errormessage=finner ikke den angitte snarveien.&errorcode=4 Error?
This error breaks down into three critical components that give us valuable clues about what’s gone wrong:
- errordomain=nscocoaerrordomain – Points to Apple’s Cocoa framework as the source of the problem
- errormessage=finner ikke den angitte snarveien – Norwegian for “could not find the specified shortcut”
- errorcode=4 – A specific identifier within the NSCocoaErrorDomain indicating a resource wasn’t found
When this error appears in your logs or console, it looks something like this:
Error Domain=NSCocoaErrorDomain Code=4 “finner ikke den angitte snarveien.”
UserInfo={NSFilePath=”/Users/username/Documents/missingfile.txt”,
NSUnderlyingError=0x600003e70520 {Error Domain=NSPOSIXErrorDomain Code=2 “No such file or directory”}}The error code 4 specifically corresponds to NSFileNoSuchFileError in Apple’s documentation, which confirms our missing resource diagnosis. This isn’t just any error – your system explicitly telling you it couldn’t find something it needs.

Common Causes of errordomain=nscocoaerrordomain&errormessage=finner ikke den angitte snarveien.&errorcode=4
1. Broken File System Links
This error frequently appears when applications rely on symbolic links or aliases that point to invalid locations. This commonly happens after:
// Example of problematic code creating an invalid file link
let fileManager = FileManager.default
do {
try fileManager.createSymbolicLink(at: URL(fileURLWithPath: “/path/to/link”),
withDestinationURL: URL(fileURLWithPath: “/path/to/nonexistent/file”))
} catch {
print(“Link creation failed: \(error)”)
}
Solution: Verify all symbolic links point to valid files. Replace the broken link with:
// Creating a valid symbolic link
let fileManager = FileManager.default
do {
// Make sure destination exists first
if fileManager.fileExists(atPath: “/path/to/valid/file”) {
try fileManager.createSymbolicLink(at: URL(fileURLWithPath: “/path/to/link”),
withDestinationURL: URL(fileURLWithPath: “/path/to/valid/file”))
}
} catch {
print(“Link creation failed: \(error)”)
}
2. Language and Localization Conflicts
The Norwegian error message suggests a localization issue. When your system’s region settings clash with application expectations, resource lookups can fail:
// Problematic code not accounting for localization
let path = Bundle.main.path(forResource: “MainMenu”, ofType: “nib”)
// This might fail if system is using a different locale
Solution: Use locale-aware resource loading:
// Improved code with localization awareness
let locales = [Locale.current.identifier, “en_US”, “nb_NO”] // Add fallback locales
var resourcePath: String? = nil
for locale in locales {
if let path = Bundle.main.path(forResource: “MainMenu”, ofType: “nib”, localization: locale) {
resourcePath = path
break
}
}
if resourcePath == nil {
print(“Failed to find resource in any locale”)
}
3. Permission Issues
Insufficient access rights often trigger this error when working with protected system locations:
// Problematic code attempting to access restricted location
let fileManager = FileManager.default
do {
let content = try String(contentsOfFile: “/Library/System/restricted.plist”)
} catch {
// Will likely throw error code 4
print(“Failed to read file: \(error)”)
}
Solution: Implement proper permission checking and requests:
// Improved code with permission handling
let fileManager = FileManager.default
let filePath = “/Library/Application Support/AppName/config.plist”
if fileManager.isReadableFile(atPath: filePath) {
do {
let content = try String(contentsOfFile: filePath)
// Process content
} catch {
print(“Failed to read file despite permissions: \(error)”)
}
} else {
// Request necessary permissions or use alternative approach
print(“Missing permissions to access file”)
}
4. Network Resource Unavailability
When apps try to access network resources using file paths rather than proper URL handling:
// Problematic network resource access
let fileManager = FileManager.default
do {
// Treating network path as local file
let data = try Data(contentsOf: URL(fileURLWithPath: “//server/share/file.txt”))
} catch {
print(“Network access failed: \(error)”)
}
Solution: Use proper networking APIs with error handling:
// Correct network resource access with URLSession
let url = URL(string: “https://server.example.com/resources/file.txt”)!
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
if let error = error {
print(“Network error: \(error)”)
return
}
if let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode != 200 {
print(“HTTP error: \(httpResponse.statusCode)”)
return
}
if let data = data {
// Process the retrieved data
print(“Successfully retrieved \(data.count) bytes”)
}
}
task.resume()
Solutions Comparison Table
Prevention Techniques | Recovery Strategies |
Use absolute paths rather than relative paths | Reset application preferences by deleting .plist files |
Implement fallback resource locations | Rebuild symbolic links with correct destinations |
Add robust error handling with specific recovery actions | Clear application caches to force resources to reload |
Always check file existence before access attempts | Use fsck and disk utility to repair damaged file systems |
Bundle critical resources within your application | Reinstall applications with proper file permissions |

Diagnosing errordomain=nscocoaerrordomain&errormessage=finner ikke den angitte snarveien.&errorcode=4
When this error strikes, follow this systematic diagnostic approach:
- Enable verbose logging to capture the exact file path that’s missing:
// Add this to your application’s debugging code
UserDefaults.standard.setValue(true, forKey: “NSTraceEnabled”)
UserDefaults.standard.setValue(true, forKey: “NSDebugEnabled”)
- Check Console.app for detailed error messages by filtering for “NSCocoaErrorDomain”:
Look for log entries like:
[Application Name] Error loading resource at path /Users/username/Library/Application Support/AppName/config.json: Error Domain=NSCocoaErrorDomain Code=4 “finner ikke den angitte snarveien.”
- Use fs_usage to track file system calls:
# Run in Terminal to monitor file system calls
sudo fs_usage -f filesystem YourAppName
- Create a diagnostic function to verify resource paths and permissions:
func diagnoseResourceAccess(path: String) -> String {
let fileManager = FileManager.default
var diagnostics = “Diagnosing access to: \(path)\n”
// Check existence
if fileManager.fileExists(atPath: path) {
diagnostics += “✓ File exists\n”
// Check readability
if fileManager.isReadableFile(atPath: path) {
diagnostics += “✓ File is readable\n”
} else {
diagnostics += “✗ File is not readable\n”
}
// Get attributes
do {
let attributes = try fileManager.attributesOfItem(atPath: path)
diagnostics += “✓ File attributes: \(attributes)\n”
} catch {
diagnostics += “✗ Cannot read attributes: \(error)\n”
}
} else {
diagnostics += “✗ File does not exist\n”
// Check parent directory
let parentPath = (path as NSString).deletingLastPathComponent
if fileManager.fileExists(atPath: parentPath) {
diagnostics += “✓ Parent directory exists\n”
// List contents of parent directory
do {
let contents = try fileManager.contentsOfDirectory(atPath: parentPath)
diagnostics += “✓ Parent directory contains \(contents.count) items\n”
} catch {
diagnostics += “✗ Cannot list parent directory: \(error)\n”
}
} else {
diagnostics += “✗ Parent directory does not exist\n”
}
}
return diagnostics
}
// Usage
let diagnosis = diagnoseResourceAccess(path: “/path/to/problematic/resource”)
print(diagnosis)
- Examine localization settings that might be causing the Norwegian error message:
// Print current localization settings
print(“Current locale: \(Locale.current.identifier)”)
print(“Preferred languages: \(Locale.preferredLanguages)”)
Comprehensive Implementation to Fix errordomain=nscocoaerrordomain&errormessage=finner ikke den angitte snarveien.&errorcode=4
Let’s create a robust NSFileManager extension to prevent and handle this error effectively:
extension FileManager {
enum ResourceAccessError: Error {
case fileNotFound(path: String)
case permissionDenied(path: String)
case unknownError(path: String, underlyingError: Error)
}
/// Safely access a file with comprehensive error handling
/// – Parameters:
/// – path: The path to the file
/// – fallbackPaths: Optional array of fallback paths to try if the primary path fails
/// – createIfMissing: Whether to create directories if they don’t exist
/// – Returns: File data if successful
/// – Throws: ResourceAccessError with diagnostic information
func safelyAccessFile(at path: String,
fallbackPaths: [String] = [],
createIfMissing: Bool = false) throws -> Data {
// Check if file exists at primary path
if self.fileExists(atPath: path) {
if self.isReadableFile(atPath: path) {
do {
return try Data(contentsOf: URL(fileURLWithPath: path))
} catch {
throw ResourceAccessError.unknownError(path: path, underlyingError: error)
}
} else {
throw ResourceAccessError.permissionDenied(path: path)
}
}
// Try fallback paths if provided
for fallbackPath in fallbackPaths {
if self.fileExists(atPath: fallbackPath) && self.isReadableFile(atPath: fallbackPath) {
do {
return try Data(contentsOf: URL(fileURLWithPath: fallbackPath))
} catch {
// Continue to next fallback
continue
}
}
}
// Attempt to create path if requested
if createIfMissing {
let directoryPath = (path as NSString).deletingLastPathComponent
do {
try self.createDirectory(atPath: directoryPath,
withIntermediateDirectories: true,
attributes: nil)
// Create empty file
if self.createFile(atPath: path, contents: Data(), attributes: nil) {
return Data() // Return empty data since we just created the file
}
} catch {
// Failed to create directory structure
throw ResourceAccessError.unknownError(path: directoryPath, underlyingError: error)
}
}
// If we got here, all attempts failed
throw ResourceAccessError.fileNotFound(path: path)
}
}
// Usage example
let fileManager = FileManager.default
do {
// Try to access the file with fallbacks and autocreation
let data = try fileManager.safelyAccessFile(
at: “/Users/username/Documents/config.json”,
fallbackPaths: [
“/Library/Application Support/AppName/config.json”,
Bundle.main.bundlePath + “/Contents/Resources/config.json”
],
createIfMissing: true
)
// Process the data
print(“Successfully accessed file with \(data.count) bytes”)
} catch let error as FileManager.ResourceAccessError {
switch error {
case .fileNotFound(let path):
print(“File not found at \(path) or any fallback locations”)
case .permissionDenied(let path):
print(“Permission denied for \(path)”)
case .unknownError(let path, let underlyingError):
print(“Unknown error accessing \(path): \(underlyingError)”)
}
} catch {
print(“Unexpected error: \(error)”)
}
This implementation includes:
- Comprehensive error checking and handling
- Multiple fallback paths
- Automatic directory and file creation
- Permission verification
- Specific error types for targeted recovery
Conclusion
The errordomain=nscocoaerrordomain&errormessage=finner ikke den angitte snarveien.&errorcode=4 error signals a missing resource or shortcut in macOS applications. Always verify file paths, permissions, and localization settings to prevent this error. Implement robust fallback mechanisms and error handling in your code to create resilient applications that gracefully recover from resource access issues.