Class

NSURL

An object that represents the location of a resource, such as an item on a remote server or the path to a local file.

Overview

You can use URL objects to construct URLs and access their parts. For URLs that represent local files, you can also manipulate properties of those files directly, such as changing the file’s last modification date. Finally, you can pass URL objects to other APIs to retrieve the contents of those URLs. For example, you can use the NSURLSession, NSURLConnection, and NSURLDownload classes to access the contents of remote resources, as described in URL Session Programming Guide.

URL objects are the preferred way to refer to local files. Most objects that read data from or write data to a file have methods that accept an NSURL object instead of a pathname as the file reference. For example, you can get the contents of a local file URL as an NSString object using the initWithContentsOfURL:encoding:error: initializer, or as an NSData object using the initWithContentsOfURL:options:error: initializer.

You can also use URLs for interapplication communication. In macOS, the NSWorkspace class provides the openURL: method to open a location specified by a URL. Similarly, in iOS, the UIApplication class provides the openURL: method.

Additionally, you can use URLs when working with pasteboards, as described in NSURL Additions Reference (part of the AppKit framework).

The NSURL class is “toll-free bridged” with its Core Foundation counterpart, CFURLRef. See Toll-Free Bridging for more information on toll-free bridging.

Structure of a URL

An NSURL object is composed of two parts—a potentially nil base URL and a string that is resolved relative to the base URL. An NSURL object is considered absolute if its string part is fully resolved without a base; all other URLs are considered relative.

For example, when constructing an NSURL object, you might specify file:///path/to/user/ as the base URL and folder/file.html as the string part, as follows:

NSURL *baseURL = [NSURL fileURLWithPath:@"file:///path/to/user/"];
NSURL *URL = [NSURL URLWithString:@"folder/file.html" relativeToURL:baseURL];
NSLog(@"absoluteURL = %@", [URL absoluteURL]);

When fully resolved, the absolute URL is file:///path/to/user/folder/file.html.

A URL can be also be divided into pieces based on its structure. For example, the URL https://johnny:p4ssw0rd@www.example.com:443/script.ext;param=value?query=value#ref contains the following URL components:

Component

Value

scheme

https

user

johnny

password

p4ssw0rd

host

www.example.com

port

443

path

/script.ext

pathExtension

ext

pathComponents

["/", "script.ext"]

parameterString

param=value

query

query=value

fragment

ref

The NSURL class provides properties that let you examine each of these components.

Bookmarks and Security Scope

Starting with OS X v10.6 and iOS 4.0, the NSURL class provides a facility for creating and using bookmark objects. A bookmark provides a persistent reference to a file-system resource. When you resolve a bookmark, you obtain a URL to the resource’s current location. A bookmark’s association with a file-system resource (typically a file or folder) usually continues to work if the user moves or renames the resource, or if the user relaunches your app or restarts the system.

For a general introduction to using bookmarks, read Locating Files Using Bookmarks in File System Programming Guide.

In a macOS app that adopts App Sandbox, you can use security-scoped bookmarks to gain access to file-system resources outside your app’s sandbox. These bookmarks preserve the user’s intent to give your app access to a resource across app launches. For details on how this works, including information on the entitlements you need in your Xcode project, read Security-Scoped Bookmarks and Persistent Resource Access in App Sandbox Design Guide. The methods for using security-scoped bookmarks are described in this document in Working with Bookmark Data.

When you resolve a security-scoped bookmark, you get a security-scoped URL.

Security-Scoped URLs

Security-scoped URLs provide access to resources outside an app’s sandbox. In macOS, you get access to security-scoped URLs when you resolve a security-scoped bookmark. In iOS, apps that open or move documents using a UIDocumentPickerViewController also receive security-scoped URLs.

To gain access to a security-scoped URL, you must call the startAccessingSecurityScopedResource method (or its Core Foundation equivalent, the CFURLStartAccessingSecurityScopedResource function). For iOS apps, if you use a UIDocument to access the URL, it automatically manages the security-scoped URL for you.

If startAccessingSecurityScopedResource (or CFUrLStartAccessingSecurityScopedResource) returns YES, you must relinquish your access by calling the stopAccessingSecurityScopedResource method (or its Core Foundation equivalent, the CFURLStopAccessingSecurityScopedResource function). You should relinquish your access as soon as you have finished using the file. After you call these methods, you immediately lose access to the resource in question.

Security-Scoped URLs and String Paths

In a macOS app, when you copy a security-scoped URL, the copy has the security scope of the original. You gain access to the file-system resource (that the URL points to) just as you would with the original URL: by calling the startAccessingSecurityScopedResource method (or its Core Foundation equivalent).

If you need a security-scoped URL’s path as a string value (as provided by the path method), such as to provide to an API that requires a string value, obtain the path from the URL as needed. Note, however, that a string-based path obtained from a security-scoped URL does not have security scope and you cannot use that string to obtain access to a security-scoped resource.

iCloud Document Thumbnails

With OS X v10.10 and iOS 8.0, the NSURL class includes the ability to get and set document thumbnails as a resource property for iCloud documents. You can get a dictionary of NSImage objects in macOS or UIImage objects in iOS using the getResourceValue:forKey:error: or getPromisedItemResourceValue:forKey:error: methods.

NSURL *URL = [self URLForDocument];
NSDictionary *thumbnails = nil;
NSError *error = nil;
 
BOOL success = [URL getPromisedItemResourceValue:&thumbnails
                                          forKey:NSURLThumbnailDictionaryKey
                                           error:&error];
if (success) {
  NSImage *image = thumbnails[NSThumbnail1024x1024SizeKey];
} else {
  // handle the error
}

In macOS, you can set a dictionary of thumbnails using the setResourceValue:forKey:error: method. You can also get or set all the thumbnails as an NSImage object with multiple representations by using the NSURLThumbnailKey.

NSURL *URL = [self URLForDocument];
NSImage *thumbnail = [self createDocumentThumbnail];
NSError *error = nil;
 
BOOL success = [URL setResourceValue:@{NSThumbnail1024x1024SizeKey : thumbnail}
                              forKey:NSURLThumbnailDictionaryKey
                               error:&error];
 
if (!success) {
  // handle the error
}

Topics

Creating an NSURL Object

URLWithString:

Creates and returns an NSURL object initialized with a provided URL string.

initWithString:

Initializes an NSURL object with a provided URL string.

URLWithString:relativeToURL:

Creates and returns an NSURL object initialized with a base URL and a relative string.

initWithString:relativeToURL:

Initializes an NSURL object with a base URL and a relative string.

fileURLWithPath:isDirectory:

Initializes and returns a newly created NSURL object as a file URL with a specified path.

initFileURLWithPath:isDirectory:

Initializes a newly created NSURL referencing the local file or directory at path.

fileURLWithPath:

Initializes and returns a newly created NSURL object as a file URL with a specified path.

initFileURLWithPath:

Initializes a newly created NSURL referencing the local file or directory at path.

fileURLWithPathComponents:

Initializes and returns a newly created NSURL object as a file URL with specified path components.

URLByResolvingAliasFileAtURL:options:error:

Returns a new URL made by resolving the alias file at url.

initByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error:

Initializes a newly created NSURL that points to a location specified by resolving bookmark data.

fileURLWithFileSystemRepresentation:isDirectory:relativeToURL:

Returns a new URL object initialized with a C string representing a local file system path.

getFileSystemRepresentation:maxLength:

Fills the provided buffer with a C string representing a local file system path.

initFileURLWithFileSystemRepresentation:isDirectory:relativeToURL:

Initializes a URL object with a C string representing a local file system path.

Identifying and Comparing Objects

isEqual:

Returns a Boolean value that indicates whether the receiver and a given object have identical URL strings and base URLs.

Querying an NSURL

checkResourceIsReachableAndReturnError:

Returns whether the resource pointed to by a file URL can be reached.

isFileReferenceURL

Returns whether the URL is a file reference URL.

fileURL

A boolean value that determines whether the receiver is a file URL.

Accessing the Parts of the URL

absoluteString

The URL string for the receiver as an absolute URL. (read-only)

absoluteURL

An absolute URL that refers to the same resource as the receiver. (read-only)

baseURL

The base URL. (read-only)

fileSystemRepresentation

A C string containing the URL’s file system path. (read-only)

fragment

The fragment identifier, conforming to RFC 1808. (read-only)

host

The host, conforming to RFC 1808. (read-only)

lastPathComponent

The last path component. (read-only)

parameterString

The parameter string conforming to RFC 1808. (read-only)

password

The password conforming to RFC 1808. (read-only)

path

The path, conforming to RFC 1808. (read-only)

pathComponents

An array containing the path components. (read-only)

pathExtension

The path extension. (read-only)

port

The port, conforming to RFC 1808.

query

The query string, conforming to RFC 1808.

relativePath

The relative path, conforming to RFC 1808. (read-only)

relativeString

A string representation of the relative portion of the URL. (read-only)

resourceSpecifier

The resource specifier. (read-only)

scheme

The scheme. (read-only)

standardizedURL

A copy of the URL with any instances of ".." or "." removed from its path. (read-only)

user

The user name, conforming to RFC 1808.

Accessing Resource Values

resourceValuesForKeys:error:

Returns the resource values for the properties identified by specified array of keys.

getResourceValue:forKey:error:

Returns the value of the resource property for the specified key.

setResourceValue:forKey:error:

Sets the URL’s resource property for a given key to a given value.

setResourceValues:error:

Sets the URL’s resource properties for a given set of keys to a given set of values.

removeAllCachedResourceValues

Removes all cached resource values and temporary resource values from the URL object.

removeCachedResourceValueForKey:

Removes the cached resource value identified by a given key from the URL object.

setTemporaryResourceValue:forKey:

Sets a temporary resource value on the URL object.

NSURLResourceKey

Keys that apply to file system URLs.

Modifying and Converting a File URL

filePathURL

A file path URL that points to the same resource as the URL object. (read-only)

fileReferenceURL

Returns a new file reference URL that points to the same resource as the receiver.

URLByAppendingPathComponent:

Returns a new URL made by appending a path component to the original URL.

URLByAppendingPathComponent:isDirectory:

Returns a new URL made by appending a path component to the original URL, along with a trailing slash if the component is designated a directory.

URLByAppendingPathExtension:

Returns a new URL made by appending a path extension to the original URL.

URLByDeletingLastPathComponent

A URL created by taking the receiver and removing the last path component. (read-only)

URLByDeletingPathExtension

A URL created by taking the receiver and removing the path extension, if any. (read-only)

URLByResolvingSymlinksInPath

A URL that points to the same resource as the receiver and includes no symbolic links. (read-only)

URLByStandardizingPath

A URL that points to the same resource as the original URL using an absolute path. (read-only)

Working with Bookmark Data

bookmarkDataWithContentsOfURL:error:

Initializes and returns bookmark data derived from an alias file pointed to by a specified URL.

bookmarkDataWithOptions:includingResourceValuesForKeys:relativeToURL:error:

Returns a bookmark for the URL, created with specified options and resource values.

resourceValuesForKeys:fromBookmarkData:

Returns the resource values for properties identified by a specified array of keys contained in specified bookmark data.

writeBookmarkData:toURL:options:error:

Creates an alias file on disk at a specified location with specified bookmark data.

startAccessingSecurityScopedResource

In an app that has adopted App Sandbox, makes the resource pointed to by a security-scoped URL available to the app.

stopAccessingSecurityScopedResource

In an app that adopts App Sandbox, revokes access to the resource pointed to by a security-scoped URL.

NSURLBookmarkFileCreationOptions

Options used when creating file bookmark data

NSURLBookmarkCreationOptions

Options used when creating bookmark data.

NSURLBookmarkResolutionOptions

Options used when resolving bookmark data.

Working with Promised Items

checkPromisedItemIsReachableAndReturnError:

Returns whether the promised item can be reached.

getPromisedItemResourceValue:forKey:error:

Returns the value of the resource property for the specified key.

promisedItemResourceValuesForKeys:error:

Returns the resource values for the properties identified by specified array of keys.

Working with Pasteboards

URLFromPasteboard:

Reads an NSURL object off of the specified pasteboard.

writeToPasteboard:

Writes the URL to the specified pasteboard.

Constants

NSURL Schemes

The schemes that the NSURL class is able to parse.

NSError userInfo Dictionary Keys

Keys in the userInfo dictionary of an NSError object when certain NSURL methods return an error.

Deprecated

initWithScheme:host:path:

Initializes a newly created NSURL with a specified scheme, host, and path.

Deprecated
URLHandleUsingCache:

Returns a URL handle to service the receiver.

Deprecated
loadResourceDataNotifyingClient:usingCache:

Loads the receiver’s resource data in the background.

Deprecated
resourceDataUsingCache:

Returns the receiver’s resource data, loading it if necessary.

Deprecated
setResourceData:

Attempts to set the resource data for the receiver.

Deprecated
propertyForKey:

Returns the specified property of the receiver’s resource.

Deprecated
setProperty:forKey:

Changes the specified property of the receiver’s resource.

Deprecated

Relationships

Inherits From

See Also

URLs

NSURLComponents

An object that parses URLs into and constructs URLs from their constituent parts.

NSURLQueryItem

An object representing a single name/value pair for an item in the query portion of a URL.