サンドボックス

2010. 04. 13
●サンドボックスとは

サンドボックスはセキュリティ用語のひとつで、外部から受け取ったプログラムを隔離した領域内でのみ動作を許可する方式のことです。

iPhoneの場合、OS標準以外のアプリケーションは各ディレクトリ(サンドボックス)毎に隔離され、そのディレクトリ内であればファイルをダウンロードしたり、ファイルを作ったりできます。

しかし他のディレクトリへのアクセスは基本的に禁止されていて、極一部のデータのみフレームワークを介してアクセスを許可されています。
(アプリケーションの環境設定とデータも、サンドボックス内に入れられます)


●サンドボックスの構成

iPhone Simulatorの場合、デフォルトのインストール設定でver.3.1.3の場合は、

/Users/(ユーザ名)/Library/Application Support/iPhone Simulator/3.1.3/Applications/

のディレクトリ下に各アプリケーションのディレクトリ(サンドボックス)が作成されます。
(iPhone Simulatorに複数のバージョンがある場合は、各バージョンのディレクトリ毎にアプリケーションディレクトリが作成されます)

219

<Application_home>/AppName.app

アプリケーションのホームディレクトリ(バンドルのディレクトリ)が<Application_home>で、AppName.appがアプリケーションファイル(バンドル)です。
iPhone OS 2.1以降、AppStoreから購入したアプリケーションの最初の同期を除いて、iTunesによるバックアップは行われません。

<Application_home>/Documents/

アプリケーション固有のデータファイルを書き込む場所で、ユーザデータなどの保存に使います。
このディレクトリはiTunesによってバックアップされます。

<Application_home>/Library/Caches

アプリケーション終了後、次回起動時まで保持したいアプリケーション固有データの保存場所です。
このディレクトリのファイル管理は、基本的にアプリケーション側で対処する必要があります。
ただし、デバイスの完全復元時にこの場所のデータは破棄されます。
またiPhone OS 2.2以降、このディレクトリはiTunesによるバックアップは行われません。

<Application_home>/Library/Preferences

アプリケーション固有の環境設定ファイルを保存する場所です。
このディレクトリはiTunesによってバックアップされます。

<Application_home>/Tmp/

アプリケーション終了後、次回起動時まで保持したいアプリケーション固有データの保存場所です。
このディレクトリのファイル管理は、基本的にアプリケーション側で対処する必要がありますが、システムが古いファイルとして削除する場合もあります。
またiPhone OS 2.1以降、このディレクトリはiTunesによるバックアップは行われません。


●ディレクトリへのアクセス方法

iPhone Simulatorで、アプリケーションを入れたり消したりしていると気付くと思いますが、各アプリケーションフォルダ名はインストール時にその都度決められ、同じアプリケーションでも入れ直すと違う名前に成ります。

従ってアプリケーション内でファイルを作成したりアクセスするには、(これまでのサンプルコードのように)絶対パスで指定するのではなく、関数を使ってパスを取得する必要が有ります。

// Documentsディレクトリのパスを取得
NSArray *docPath;
NSString *outPath;

docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

if ([docPath count] > 0) {
    outPath = [docPath objectAtIndex:0];
}
NSLog(outPath);

/*
iPhone Simulatorの場合
/Users/yayoi/Library/Application Support/iPhone Simulator/3.1.3/Applications/(略)/Documents
実機の場合
/var/mobile/Applications/(略)/Documents
*/

// Homeディレクトリのパスを取得
NSString *homePath = NSHomeDirectory();
NSLog(homePath);

// tmpディレクトリのパスを取得
NSString *tmpPath = NSTemporaryDirectory(); 
NSLog(tmpPath) 


・NSHomeDirectory

NSString * NSHomeDirectory (void);

現在のユーザのホームディレクトリのパスを返します


・NSSearchPathForDirectoriesInDomains

NSArray * NSSearchPathForDirectoriesInDomains (
    NSSearchPathDirectory directory,
    NSSearchPathDomainMask domainMask,
    BOOL expandTilde
);

ディレクトリ検索パスのリストを作成します

指定したドメイン内の指定したディレクトリから、パスの文字列によるリストを作成します

リストは検索された順序になります

expandTildeがYESの場合は、stringByExpandingTildeInPathを呼び出して、チルダを展開します

注:このメソッドは存在しないディレクトリを返すことがあります
このメソッドは単に指定されたディレクトリに合った場所を返します
開発者が必要に応じてアプリケーションが必要とするパスに修正しなければならない場合があります


・NSSearchPathDirectory

NSSearchPathDirectoryは、検索するパスのディレクトリを指定するもので、NSPathUtilities.hで定義されています

enum {
    NSApplicationDirectory = 1,
    NSDemoApplicationDirectory,
    NSDeveloperApplicationDirectory,
    NSAdminApplicationDirectory,
    NSLibraryDirectory,
    NSDeveloperDirectory,
    NSUserDirectory,
    NSDocumentationDirectory,
    NSDocumentDirectory,
    NSCoreServiceDirectory,
    NSAutosavedInformationDirectory = 11,
    NSDesktopDirectory = 12,
    NSCachesDirectory = 13,
    NSApplicationSupportDirectory = 14,
    NSDownloadsDirectory = 15,
    NSInputMethodsDirectory = 16,
    NSMoviesDirectory = 17,
    NSMusicDirectory = 18,
    NSPicturesDirectory = 19,
    NSPrinterDescriptionDirectory = 20,
    NSSharedPublicDirectory = 21,
    NSPreferencePanesDirectory = 22,
    NSItemReplacementDirectory = 99,
    NSAllApplicationsDirectory = 100,
    NSAllLibrariesDirectory = 101
};
typedef NSUInteger NSSearchPathDirectory;

NSApplicationDirectory1サポートされるアプリケーション(/Applications)
NSDemoApplicationDirectory サポートされないアプリケーションとデモバージョン
NSDeveloperApplicationDirectory デベロッパアプリケーション(/Developer/Applications)
NSAdminApplicationDirectory システムとネットワーク管理アプリケーション
NSLibraryDirectory 色々なドキュメンテーション、サポート、コンフィグファイル
(/Library)
NSDeveloperDirectory デベロッパリソース(/Developer)
NSUserDirectory ユーザのホームディレクトリ(/Users)
NSDocumentationDirectory ドキュメンテーション
NSDocumentDirectory ドキュメントディレクトリ
NSCoreServiceDirectory Core Servicesの位置(System/Library/CoreServices)
NSAutosavedInformationDirectory11ユーザがドキュメントをオートセーブする位置
(Library/Autosave Information)
NSDesktopDirectory12ユーザのデスクトップディレクトリの位置
NSCachesDirectory13破棄キャッシュファイルの位置(Library/Caches)
NSApplicationSupportDirectory14アプリケーションのサポートファイルの位置
(Library/Application Support)
NSDownloadsDirectory15ユーザのダウンロードディレクトリの位置
NSUserDomainMaskが提供されている場合のみフラグが立て
られます
NSInputMethodsDirectory16入力メソッドの位置(Library/Input Methods)
NSMoviesDirectory17ユーザのムービーディレクトリの位置(~/Movies)
NSMusicDirectory18ユーザのミュージックディレクトリの位置(~/Music) 
NSPicturesDirectory19ユーザの画像ディレクトリの位置(~/Pictures)
NSPrinterDescriptionDirectory20システムのPPDディレクトリの位置(Library/Printers/PPDs)
NSSharedPublicDirectory21ユーザの共有ディレクトリの位置(~/Public)
NSPreferencePanesDirectory22システム環境設定の環境設定パネルの位置
(Library/PreferencePanes)
NSItemReplacementDirectory99NSFileManagerメソッドで使用
NSAllApplicationsDirectory100アプリケーション以下の全ディレクトリ
NSAllLibrariesDirectory101リソース以下の全ディレクトリ

大きな声では言えませんが、イタリックで示した8つの検索パスディレクトリ

NSAutosavedInformationDirectory
NSInputMethodsDirectory
NSMoviesDirectory
NSMusicDirectory
NSPicturesDirectory
NSPrinterDescriptionDirectory
NSSharedPublicDirectory
NSPreferencePanesDirectory

は、iPhone OS 3.2以下では使用できません(後はお察しください)

※ PPD(PostScript Printer Description)はPostScriptプリンタ用に機能を指示するファイルのことです


・NSSearchPathDomainMask

NSSearchPathDomainMaskは、検索するパスの範囲を指定するもので、NSPathUtilities.hで定義されています

enum {
    NSUserDomainMask = 1,
    NSLocalDomainMask = 2,
    NSNetworkDomainMask = 4,
    NSSystemDomainMask = 8,
    NSAllDomainsMask = 0x0ffff,
};
typedef NSUInteger NSSearchPathDomainMask;

NSUserDomainMask1ユーザのホームディレクトリ(個人アイテムをインストールしてい
る場所)(~) 
NSLocalDomainMask2現在のマシンの利用者全員分のアイテムがインストールされている
場所
NSNetworkDomainMask4LAN内で共有している(ネットワーク上でアイテムがインストール
されている)場所(/Network) 
NSSystemDomainMask8Appleが提供。変更不可(/System) 
NSAllDomainsMask0x0ffff全て(将来加わるもの全てを含む)


・NSTemporaryDirectory

NSString * NSTemporaryDirectory (void);

現在のユーザのテンポラリ(一時)ディレクトリのパスを返します

ディレクトリが無い場合はnilを返します



参考文献

Foundation Functions Reference

Foundation Data Types Reference

iOSアプリケーションプログラミングガイド

IT用語辞典/サンドボックス

Wikipedia/サンドボックス

Wikipedia/PostScript Printer Description

iPhone SDK 3 プログラミング大全 実践プログラミング (MacPeople Books)iPhone SDK 3 プログラミング大全 実践プログラミング (MacPeople Books)
(2009/09/08)
木下 誠

商品詳細を見る






bose_soundlink_revolve
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
03 | 2017/04 | 05
Sun Mon Tue Wed Thu Fri Sat
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

bose_soundlink_revolve
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR