@@ -12,11 +12,15 @@ import kotlinx.cinterop.useContents
1212import kotlinx.coroutines.CoroutineScope
1313import platform.Foundation.HTTPBody
1414import platform.Foundation.HTTPMethod
15+ import platform.Foundation.NSArray
1516import platform.Foundation.NSBundle
1617import platform.Foundation.NSData
18+ import platform.Foundation.NSDocumentDirectory
1719import platform.Foundation.NSMutableURLRequest
20+ import platform.Foundation.NSSearchPathForDirectoriesInDomains
1821import platform.Foundation.NSString
1922import platform.Foundation.NSURL
23+ import platform.Foundation.NSUserDomainMask
2024import platform.Foundation.create
2125import platform.Foundation.setValue
2226import platform.Foundation.stringByDeletingLastPathComponent
@@ -50,6 +54,33 @@ class IOSWebView(
5054 url : String ,
5155 additionalHttpHeaders : Map <String , String >,
5256 ) {
57+ // Check if it's a file URL
58+ if (url.startsWith(" file://" )) {
59+ val fileURL = NSURL (string = url)
60+ if (fileURL != null && fileURL.isFileURL()) {
61+ // Use document directory for read access to fix real device issues
62+ val documentPaths =
63+ NSSearchPathForDirectoriesInDomains (
64+ NSDocumentDirectory ,
65+ NSUserDomainMask ,
66+ true ,
67+ ) as NSArray
68+ val readAccessURL =
69+ if (documentPaths.count > 0u ) {
70+ val documentPath = documentPaths.objectAtIndex(0u ) as ? String
71+ documentPath?.let { NSURL .fileURLWithPath(it) }
72+ } else {
73+ null
74+ }
75+
76+ if (readAccessURL != null ) {
77+ webView.loadFileURL(fileURL, readAccessURL)
78+ return
79+ }
80+ }
81+ }
82+
83+ // Handle regular HTTP/HTTPS URLs
5384 val request =
5485 NSMutableURLRequest .requestWithURL(
5586 URL = NSURL (string = url),
0 commit comments