iOS Sandbox(沙盒)機制
沙盒是什麼?它是 Apple 為了安全性所設計的環境,當我們一安裝完 App,該環境就會在系統中生成了,每一個 App 都有其所屬的環境,並不能夠相互存取。而在此環境下,有各司其職的容器(Container)和其下的目錄(如圖一),以下分別說明沙盒下的各個容器。
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 下有兩種方式可以查看該路徑下的檔案
- 使用 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」讓我持續提供好文章給您