17280


SwiftでiOSのプログラミング時、データベースなど組み込むとき、保存場所に慣習などあるのでしょうか？

アップグレード時、上書きされる保存場所、されない保存場所を、実機でそれぞれどのように設定すればいいでしょうか？

教えていただければ幸いです。

よろしくお願いいたします。


CC BY-SA 3.0
2015-10-04T13:17:02.643
17247
2015-10-05T12:28:49.363
2015-10-05T08:06:09.477
10845
10845
question
ios
データベースなど、アップグレード時上書きされない格納場所と、上書きされる格納場所の設定方法


ディレクトリのパス取得は、つぎの関数を用いるのが定型となっています。

[Foundation Functions
Reference](https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/#//apple_ref/c/func/NSSearchPathForDirectoriesInDomains)

[code]

    func NSSearchPathForDirectoriesInDomains(_ directory: NSSearchPathDirectory, _ domainMask: NSSearchPathDomainMask, _ expandTilde: Bool) -> [String]
    
[/code]

`NSSearchPathDirectory`を`NSSearchPathDirectory.DocumentDirectory`、`NSSearchPathDomainMask`を`NSSearchPathDomainMask.UserDomainMask`とすると、アプリが保存する書類ファイルが格納されるDocumentsフォルダのパスを取得できます。  
（引数`expandTilde`は、`~`を使って、ユーザディレクトリの先頭から始める（`false`）か、ルートディレクトリから始める（`true`）かを選択します）  
返り値は、パスの配列になります。クラウドサービスを使って、Documentsフォルダの場所が複数になるということを想定しているんでしょうが、とくにむずかしいことをしていなければ、この配列の要素数は1です。

[code]

    let pathArray = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
    let documentPath = pathArray[0]
    
[/code]

> アップグレード時、上書きされる保存場所

アップグレードで上書きされるのは、アプリケーション本体のみと、私は認識しています。アプリケーション本体は、保存場所にはならない（保存場所にすべきでない）ので、「ない」という回答でいいかと思います。

じっさいに実機で各ディレクトリの場所を出力してみて、iOSのディレクトリ構造がどうなっているか、勉強なさるといいでしょう。コンピュータのセキュリティで使われる概念に「Sand
Box」というものがありますが、iOSでは、これを採用して、アプリケーションごとにそれぞれのDocumentsフォルダが作られることがわかると思います。万一iPhone/iPadがハッキングされても、ハック対象のアプリのみに被害がとどまり、ほかのアプリの安全が保たれるというしくみです。


CC BY-SA 3.0
2015-10-05T12:28:49.363
17280
2015-10-05T12:28:49.363
7362
17247
answer