iOS Sandbox(沙盒)機制

--

沙盒是什麼?它是 Apple 為了安全性所設計的環境,當我們一安裝完 App,該環境就會在系統中生成了,每一個 App 都有其所屬的環境,並不能夠相互存取。而在此環境下,有各司其職的容器(Container)和其下的目錄(如圖一),以下分別說明沙盒下的各個容器。

沙盒(Sandbox)圖1

Bundle Container

舉凡圖片、影音檔、SQLite 等檔案最常放置的地方就是 Bundle Container 了(如圖2),此目錄下的檔案是唯讀的。

透過以下方式可取得檔案的絕對路徑

let url = Bundle.main.url(forResource: "girl", withExtension: "jpeg")

將 url 打印出來會長這樣

file:///Users/user/Library/Developer/CoreSimulator/Devices/BE5E871F-9D91–4840-BB99–1E09E7856F5E/data/Containers/Bundle/Application/5BA6E9B0–7972–404E-ACE9–5C613D02B0E5/Demo2.app/girl.jpeg

Data Container

可供開發者用來儲存、修改、刪除等各式的檔案。

  • Document

透過 NSSearchPathForDirectoriesInDomains 來取得,該目錄通常用來存放 SQLite 或圖片等檔案。

let documentPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]

將 documentPath 打印出來會長這樣

/Users/Frank.Chen/Library/Developer/CoreSimulator/Devices/88A4C184-C30A-4C9F-912C-E9D632748151/data/Containers/Data/Application/4CF7A319-BD3D-474C-B5BE-8CD295A25C06/Documents

接著在 Mac 下有兩種方式可以查看該路徑下的檔案

  1. 使用 Finder → 前往 → 前往資料夾,將該路徑貼上。

2. 將路徑貼到 Spotlight。

  • Libary

透過 NSSearchPathForDirectoriesInDomains 來取得,其取得的方式同 Document,只不過將第一個參數改成 .libraryDirectory 即可。常用的例子為使用 UserDefaults 作用域存放的資料會被產生成實體檔案(.plist)存放於該路徑下。

let libraryPath = NSSearchPathForDirectoriesInDomains(.libraryDirectory, .userDomainMask, true)[0]

將 libraryPath 打印出來會長這樣

/Users/Frank.Chen/Library/Developer/CoreSimulator/Devices/88A4C184-C30A-4C9F-912C-E9D632748151/data/Containers/Data/Application/812C7EA0–6EF1–49A1-B5F6–72F96E190BF0/Library

  • tem

透過 NSTemporaryDirectory 來取得。

let temPath = NSTemporaryDirectory()

將 temPath 打印出來會長這樣

/Users/Frank.Chen/Library/Developer/CoreSimulator/Devices/88A4C184-C30A-4C9F-912C-E9D632748151/data/Containers/Data/Application/812C7EA0–6EF1–49A1-B5F6–72F96E190BF0/tmp/

如果您喜歡我的文章,請多按幾下「拍手」給我鼓勵,或是按「follow」讓我持續提供好文章給您

--

--

No responses yet