macOS/iOS API解説

iOS , Mac アプリケーション開発のために使われる主要フレームワークの日本語情報です。2010年代に書かれた内容です。今後更新はありません。

目次

NSURLクラス

INDEX>Foundation>

apple(OS X)
apple(iOS)

解説

継承 NSObject
準拠 NSCopying
NSURLHandleClient
NSSecureCoding
NSObject (NSObject)
フレームワーク /System/Library/Frameworks/Foundation.framework
使用可能 OS X 10.0以降
iOS 2.0以降
定義 NSURL.h

OS X
developer.apple.com

iOS
developer.apple.com

watchOS
developer.apple.com

tvOS
developer.apple.com

概要

ファイル参照などを表すためのURLオブジェクトです。

C言語フレームワークである、Core FoundationのCFURLRefとトールフリーブリッジです。ARC環境以外ではそのまま使用できます。
どちらかのフレームワークにしかないメソッド・関数を使いたい場合、キャストして使うことが出来ます。
ARC環境では、管理対象のオブジェクトのキャストに__bridge、__bridge_retained、__bridge_transferが必要になります。

ファイルがある場所の表し方として以下の3つの方法があります。
パスベースURL: file://localhost/Users/steve/Documents/MyFile.txt
ファイル参照URL: file:///.file/id=6571367.2773272/
文字ベースパス: /Users/steve/Documents/MyFile.txt

NSURLの作成

指定のURL文字列からNSURLオブジェクトを作成するには(+ URLWithStringメソッドを使います。同様のインスタンスメソッドとして、指定のURL文字列からNSURLオブジェクトを初期化するメソッドとして(– initWithStringメソッドがあります。

URL文字列からNSURLオブジェクトを作成

#pragma mark NSURL URLWithString:

-(void)method001
{
    NSHTTPURLResponse *aResponse;
	NSError *anError;
	NSURL *url = [NSURL URLWithString:@"http://www.apple.com/"];
	NSURLRequest *req = [NSURLRequest requestWithURL:url];
	NSData *data = [NSURLConnection sendSynchronousRequest:req returningResponse:&aResponse error:&anError];
	if (!anError) {
		NSLog(@"data: %@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
        NSLog(@"%s %@",__FUNCTION__,[anError description]);
		NSLog(@"status code: %d", [aResponse statusCode]);
	} else {
		NSLog(@"error: %@", anError);
	}    
}


上記の派生形として、スキーム(httpやhttpsなど)とホスト(www.oomori.comなど)とパス(/index.htmlなど)からNSURLオブジェクトを作成するメソッドとして(– initWithScheme:host:path)があります。


ベースURLとパスでNSURLオブジェクトを作成するメソッドは(+ URLWithString:relativeToURL)で同様のインスタンスメソッドとしてベースURLとパスでNSURLオブジェクトを初期化する(– initWithString:relativeToURLメソッドがあります。

ファイルパスからNSURLオブジェクトを作成するメソッドは(+ fileURLWithPath)で同様のインスタンスメソッドとしてファイルパスからNSURLオブジェクトを初期化する(– initFileURLWithPathメソッドがあります。

上記の派生系でディレクトリ(フォルダ)かを指定する事ができるメソッド+ fileURLWithPath:isDirectory)があり、同様のインスタンスメソッドとして初期化する(– initFileURLWithPath:isDirectory)があります。

配列(NSArray)で指定されたパスからNSURLオブジェクトを作成するには(+ fileURLWithPathComponentsメソッドを使います。ディレクトリ(フォルダ)名やファイル名の文字列オブジェクトが入った配列を"/"で連結したパスからNSURLオブジェクトを作成します。

NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *filename = @"testWritecharset.bitmap";
    NSURL *aURL = [NSURL fileURLWithPathComponents:[NSArray arrayWithObjects:documentsDirectory, filename, nil]];

上記のコードを実行すると
file://localhost/var/mobile/Applications/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/Documents/testWritecharset.bitmap
のような内容を持つNSURLオブジェクトが作成できます。(XXXの部分はダミーです)

文字列からURLを作成する場合、パーセントエスケープして渡してやらないといけません。パーセントエスケープとはスペースや記号などを「% + 16進数で表現される文字コード」で変換して表現したものです。NSString-stringByAddingPercentEscapesUsingEncodingというメソッドがありますので事前に変換してNSURLのメソッドに渡します。
ただし、NSString-stringByAddingPercentEscapesUsingEncodingは一部の文字($&+,/:;=?@)がエスケープされないという問題があり、CFURLCreateStringByAddingPercentEscapes()がよく使われているようです。

ブックマークデータからNSURLオブジェクトを作成するクラスメソッドが(+ URLByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error)で同様のインスタンスメソッドが(– initByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error)です。

オブジェクトの比較

– isEqualメソッドはURLオブジェクトを比較します。絶対パスは同じでもURLWithString:relativeToURL:で作成したURLオブジェクトとURLWithStringで作成したNSURLオブジェクトは同じではありません。

NSURLオブジェクトのチェック

URLのリソースに到達できるかをチェックして返すメソッドは(– checkResourceIsReachableAndReturnError)を使います。ファイル参照URLかどうかを返すメソッドは(– isFileReferenceURL)です。ファイル参照URLかを返すメソッドは(– isFileURL)です。

URLの部分へのアクセス

絶対パスを取得するには(– absoluteStringメソッドを使用します。URL表現の絶対パスを取得する場合は(– absoluteURLメソッドを使用します。

オブジェクトがhttp://www.apple.com/index.html#123である場合、ベースURL(この場合ではhttp://www.apple.com)を取り出すには(– baseURLメソッドを使用します。アンカー(この場合では123)を取り出すには(– fragmentメソッドを使います。ホスト(www.apple.com)の取り出しには(– hostメソッドを使います。

オブジェクトが http://www.oomori.com/index.html?name=oomori&age=44 の内容を持つ場合、最後のパスコンポーネント(この場合ではindex.html)を取り出すには(– lastPathComponentメソッドを使用します。クエリ(この場合ではname=oomori&age=44)を取り出すには(– queryメソッドを使用します。

オブジェクトがhttp://www.oomori.com/index.html;param?name=oomori&age=44の内容を持つ場合、パラメータ(この場合ではparam)を取り出すには(– parameterStringメソッドを使用します。

オブジェクトが ftp://user:password@www.oomori.com/index.htmlの内容を持つ場合、パスワード(password)を取り出すには(– passwordメソッドを使用します。ユーザー(user)を取り出すには(– userメソッドを使用します。

オブジェクトがhttp://www.oomori.com/index.html;param?name=oomori&age=44の内容を持つ場合、パス文字列(/index.html)を取り出すには(– pathメソッドを使用します。パスを配列("/","index.html")で取り出すには(– pathComponents)メソッドを使います。
ファイルパスの拡張子(html)を取り出すには(– pathExtensionメソッドを使用します。

オブジェクトがhttp://www.oomori.com:8080/index.htmlの内容を持つ場合、スキーマ(http)を取り出すには(– schemeメソッドを使用します。ポートを取り出すには(– portメソッドを使用します。

相対パスを返すメソッドは、ベースURLを持つかどうかで挙動が変わってきます。オブジェクトをhttp://www.oomori.com/index.htmlの文字列で作成した場合は(– relativePathメソッドで(/index.html)が返され、+URLWithString:relativeToURLで作成した場合には(index.html)が返されます。
– relativeStringメソッドを使った場合には下記の通りになります。

#pragma mark NSURL relativeString
-(void)method025
{
    NSURL *aURL = [NSURL URLWithString:@"http://www.oomori.com/index.html"];
    NSLog(@"%s %@",__FUNCTION__,[aURL relativeString]);
    //=>http://www.oomori.com/index.html
    
	NSURL *baseUrl = [NSURL URLWithString:@"http://www.oomori.com/"];
    NSString *pathString = @"index.html";
    
    NSURL *bURL = [NSURL URLWithString:pathString relativeToURL:baseUrl];
    NSLog(@"%s %@",__FUNCTION__,[bURL relativeString]);
    //=>index.html
}

オブジェクトがhttp://www.oomori.com/index.html?name=oomori&age=44の内容を持つ場合、(– resourceSpecifierメソッドを使う事で(//www.oomori.com/index.html?name=oomori&age=44)といった文字列が取得できます。(– standardizedURLメソッドを使うと.や..を取り去った文字列を取得する事ができます。

ファイルURLの修正や変換

オブジェクトがファイルパスのURLである場合に文字列でパスを取り出すには(– filePathURLメソッドを使います。ファイルパスでない場合にはnullが返されます。

オブジェクトがファイルパスのURLである場合にファイル参照URL形式(file:///.file/id=234881025.13835283のような形式)の文字列を取り出すには(– fileReferenceURL)メソッドを使います。ファイルパスでない場合にはnullが返されます。

末尾にパスコンポーネントを追加した新しいNSURLを返すには(– URLByAppendingPathComponentメソッドを使います。追加の引数としてisDirectory:にYESを渡すとディレクトリになるメソッド– URLByAppendingPathComponent:isDirectory)もあります。
最後のパスコンポーネントを削除するには(– URLByDeletingLastPathComponentメソッドを使います。

最後のパスコンポーネントに拡張子を追加するためには(– URLByAppendingPathExtensionメソッドを使用し、拡張子を削除するには(– URLByDeletingPathExtensionメソッドを使います。

ブックマークデータ

ブックマークデータを作成するには(+ bookmarkDataWithContentsOfURL:errorメソッドを使います。オプションを指定する事ができるメソッド– bookmarkDataWithOptions:includingResourceValuesForKeys:relativeToURL:error)もあります。ブックマークデータを書き出すには(+ writeBookmarkData:toURL:options:errorメソッドを使用します。

ファイルシステムリソースの取得とセット

ファイルシステムの情報を得ます。
ファイル属性の取得には(– getResourceValue:forKey:errorメソッドを使います。プロパティによってはセットできないもの(Read only)もありますが、(– setResourceValue:forKey:errorメソッドでセットできます。複数の属性の取得、設定にはそれぞれ(– resourceValuesForKeys:error)、(– setResourceValues:error:)メソッドを使います。ブックマークデータから属性値を得るにはクラスメソッド+ resourceValuesForKeys:fromBookmarkData)を使用します。

属性のキーを以下に示します。

NSURLFileSizeKey
NSURLFileAllocatedSizeKey
NSURLTotalFileSizeKey
NSURLTotalFileAllocatedSizeKey
NSURLIsAliasFileKey


NSURLNameKey
ファイルやフォルダの名称
NSString
NSURLLocalizedNameKey
ファイルやフォルダのローカライズ名、または拡張子非表示の際の名称
NSString

NSURLIsRegularFileKey
通常のファイルやフォルダかどうか
bool値のNSNumber

NSURLIsDirectoryKey
フォルダかどうか
bool値のNSNumber

NSURLIsSymbolicLinkKey
シンボリックリンクかどうか
bool値のNSNumber

NSURLIsVolumeKey
ボリュームか
bool値のNSNumber

NSURLIsPackageKey
パッケージか
bool値のNSNumber

NSURLIsSystemImmutableKey
システム不変ビットが設定されているか
bool値のNSNumber

NSURLIsUserImmutableKey
ユーザー不変ビットが設定されているか
bool値のNSNumber

NSURLIsHiddenKey
非表示か隠れているか
bool値のNSNumber

NSURLHasHiddenExtensionKey
拡張子が隠されているか
bool値のNSNumber

NSURLCreationDateKey
作成日
NSDate

NSURLContentAccessDateKey
最終アクセス日
NSDate

NSURLContentModificationDateKey
内容の修正日
NSDate

NSURLAttributeModificationDateKey
属性修正日
NSDate

NSURLLinkCountKey
ハードリンク数
整数のNSNumber

NSURLParentDirectoryURLKey
このNSURLが属する親ディレクトリのURL
NSURL

NSURLVolumeURLKey
このNSURLが属するボリュームのURL
NSURL

NSURLTypeIdentifierKey
ファイルID
NSString

NSURLLocalizedTypeDescriptionKey
ローカライズされたタイプ
NSString

NSURLLabelNumberKey
ラベル番号
整数のNSNumber

NSURLLabelColorKey
ラベルカラー、iOSではUIColorでセットはできるようですが有効ではないようです。
UIColor

NSURLLocalizedLabelKey
ローカライズされたラベル
NSString

NSURLEffectiveIconKey;
通常のアイコン画像、iOSでは有効ではないようです。

NSURLCustomIconKey
カスタムアイコン画像、iOSでは有効ではないようです。

NSURLFileResourceIdentifierKey
ファイルリソースID
id

NSURLVolumeIdentifierKey
ボリュームID
id

NSURLPreferredIOBlockSizeKey
読み書きする場合の最適なブロック数
NSNumber

NSURLIsReadableKey
現在のプロセスかどうか。EUIDで判断されます。
bool値のNSNumber

NSURLIsWritableKey
書き込み可能かどうか。書き込み可能ならYESです。
bool値のNSNumber

NSURLIsExecutableKey
実行可能かどうか。実行可能ならYESです。
bool値のNSNumber

NSURLIsMountTriggerKey
トリガディレクトリかどうか。トリガディレクトリにアクセスするとファイルシステムはマウントしようと試みます。
bool値のNSNumber

NSURLFileSecurityKey
ファイルシステムセキュリティ
NSFileSecurity

NSURLIsExcludedFromBackupKey
バックアップするデータから除外されているかどうか。バックアップしないならYESです。
bool値のNSNumber

NSURLFileResourceTypeKey
リソースタイプ
NSString
リソースタイプには以下の種類があります。
NSURLFileResourceTypeNamedPipe
NSURLFileResourceTypeCharacterSpecial
NSURLFileResourceTypeDirectory
NSURLFileResourceTypeBlockSpecial
NSURLFileResourceTypeRegular
NSURLFileResourceTypeSymbolicLink
NSURLFileResourceTypeSocket
NSURLFileResourceTypeUnknown

NSURLVolumeIsEjectableKey
リソースが含まれるボリュームはソフトウエアのコントロールで取り出し可能かどうか。
bool値のNSNumber

NSURLVolumeIsInternalKey
リソースが含まれるボリュームは内蔵ディスク(内部バス接続か)どうか。
bool値のNSNumber

SURLVolumeUUIDStringKey
リソースが含まれるボリュームのUUID文字列。
NSString

適合するプロトコル

メソッド

オブジェクトの比較

– isEqual

サブクラス化の注意