IOS
WKWebView에서 Document안에 있는 html 로드하기
하악생
2019. 5. 7. 15:17
- 상황 : html파일들이 압축되어있는 파일(zip)을 document 디렉토리에 풀고, WKWebView로 로드하였으나,
리소스를 불러오지 못하는 상황.
<파일 정보> (다음 파일이 있다고 가정한다.)
- web.zip ( main.html, main.files )
A. Xcode에 압축 파일 추가. ( Build Phases -> Copy Bundle Resources )
B. 코드에서 Document 디렉토리에 압축풀기 ( Zip 라이브러리 사용 : https://github.com/marmelroy/Zip )
* Document 디렉토리는 IOS에서 제공하는 사용자가 사용할 수 있는 디렉토리. 빌드되는 앱마다 하나씩 가지고 있음.
import Zip // https://github.com/marmelroy/Zip 라이브러리 사용
...
do {
let filePath = Bundle.main.url(forResource: "web", withExtension: "zip")
// 이 부분 수행이 끝나면 {AppDirectory}/Document 아래에 web 디렉토리로 압축이 풀린다.
let _ = try Zip.quickUnzipFile(filePath!)
}
catch {
// 압축풀기 실패!
}
C. WKWebView에 호출 ( FileManager 사용 )
import WebKit
...
@IBOutlet weak var webView : WKWebView!
override func viewDidLoad() {
let documentURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
do {
// web디렉토리 URL을 가져오고
let webURL = documentURL?.appendingPathComponent("web")
// 디렉토리 내의 파일 목록을 출력해본다.
print("web directory Files : \(try FileManager.default.contentsOfDirectory(atPath : webURL!.path))")
// main.html파일 URL을 가져온 뒤
let htmlFileURL = webURL?.appendingPathComponent("main.html")
// webView에서 로드해준다.
// 이 부분에서 allowingReadAccessTo 파라미터에는 main.html의 부모 디렉토리 이상 레벨의 URL을 지정해준다.
// 여기서는 최상위 레벨인 Document의 URL을 추가했다. webURL을 추가해도 무방하다.
webView.loadFileURL(htmlFileURL!, allowingReadAccessTo: documentURL!)
}
catch {
// 알 수 없는 오류
}
}
반응형