square / okio

A modern I/O library for Android, Java, and Kotlin Multiplatform.
https://square.github.io/okio/
Apache License 2.0
8.81k stars 1.18k forks source link

okio.IOException: Operation not permitted. #1459

Open maqsats opened 8 months ago

maqsats commented 8 months ago
Uncaught Kotlin exception: okio.IOException: Operation not permitted
    at 0   Multiplatform App                   0x1024c2983        kfun:kotlin.Exception#<init>(kotlin.String?;kotlin.Throwable?){} + 143 
    at 1   Multiplatform App                   0x102bc391f        kfun:okio.IOException#<init>(kotlin.String?;kotlin.Throwable?){} + 143 
    at 2   Multiplatform App                   0x102bc39ab        kfun:okio.IOException#<init>(kotlin.String?){} + 119 
    at 3   Multiplatform App                   0x102ba7993        kfun:okio#errnoToIOException(kotlin.Int){}okio.IOException + 523 
    at 4   Multiplatform App                   0x102bd3d5f        kfun:okio#variantOpenReadWrite__at__okio.PosixFileSystem(okio.Path;kotlin.Boolean;kotlin.Boolean){}okio.FileHandle + 879 
    at 5   Multiplatform App                   0x102bac01f        kfun:okio.PosixFileSystem#openReadWrite(okio.Path;kotlin.Boolean;kotlin.Boolean){}okio.FileHandle + 163 
    at 6   Multiplatform App                   0x102ca7f23        kfun:okio.FileSystem#openReadWrite(okio.Path;kotlin.Boolean;kotlin.Boolean){}okio.FileHandle-trampoline + 91 
    at 7   Multiplatform App                   0x102c1a673        kfun:today.okio.problem.file_downloader.FileDownloader.$downloadFileNormallyCOROUTINE$1.invokeSuspend#internal + 1583 
    at 8   Multiplatform App                   0x102c1adbb        kfun:today.okio.problem.file_downloader.FileDownloader.downloadFileNormally#internal + 419 
    at 9   Multiplatform App                   0x102c1bb67        kfun:today.okio.problem.file_downloader.FileDownloader.$downloadFile$lambda$2$lambda$0COROUTINE$2.invokeSuspend#internal + 3023 
    at 10  Multiplatform App                   0x102c2df37        kfun:kotlin.coroutines.native.internal.BaseContinuationImpl#invokeSuspend(kotlin.Result<kotlin.Any?>){}kotlin.Any?-trampoline + 67 
    at 11  Multiplatform App                   0x1024cd697

I am facing this issue only in iOS real device iOS 17.2. Simulator iOS 17.2 works fine. Here is the link to repository OkioReproduce.

This issue can be reproduced using 3.6.0 Okio version and also with latest 3.9.0 version. I hope you can solve this as soon as possible. I have tried my best to help you with reproducing. Here is line that causes this bug FILESYSTEM.openReadWrite(tempPath, mustCreate = false, mustExist = false).

maqsats commented 8 months ago

@swankjesse I have created new issue for that bug

saparbekuly commented 8 months ago

I am also facing this problem @swankjesse. Can you help us with this?

Stevespear426 commented 6 months ago

I'm seeing it as well. Simulator works fine, crashes with iPhone 12 on iOS 17.5.1. I'm getting it through Jetpack Datastore though.

`Uncaught Kotlin exception: at 0 News 0x104dec50b kfun:kotlin.Exception#(kotlin.String?;kotlin.Throwable?){} + 143

at 1   News                                0x1063c02e7        kfun:okio.IOException#<init>(kotlin.String?;kotlin.Throwable?){} + 123 

at 2   News                                0x1063c035f        kfun:okio.IOException#<init>(kotlin.String?){} + 99 

at 3   News                                0x1063a62c7        kfun:okio#errnoToIOException(kotlin.Int){}okio.IOException + 503 

at 4   News                                0x1063cf0e3        kfun:okio#variantOpenReadWrite__at__okio.PosixFileSystem(okio.Path;kotlin.Boolean;kotlin.Boolean){}okio.FileHandle + 859 

at 5   News                                0x1063a9e83        kfun:okio.PosixFileSystem#openReadWrite(okio.Path;kotlin.Boolean;kotlin.Boolean){}okio.FileHandle + 143 

at 6   News                                0x1063d190f        kfun:okio.FileSystem#openReadWrite(okio.Path;kotlin.Boolean;kotlin.Boolean){}okio.FileHandle-trampoline + 91 

at 7   News                                0x1063a83bf        kfun:okio.FileSystem#openReadWrite$default(okio.Path;kotlin.Boolean;kotlin.Boolean;kotlin.Int){}okio.FileHandle + 251 

at 8   News                                0x104db820f        kfun:androidx.datastore.core.okio.OkioWriteScope.$writeDataCOROUTINE$3.invokeSuspend#internal + 863 

at 9   News                                0x104db8ba7        kfun:androidx.datastore.core.okio.OkioWriteScope#writeData#suspend(1:0;kotlin.coroutines.Continuation<kotlin.Unit>){}kotlin.Any + 295 

at 10  News                                0x106ca4b87        kfun:androidx.datastore.core.WriteScope#writeData#suspend(1:0;kotlin.coroutines.Continuation<kotlin.Unit>){}kotlin.Any-trampoline + 115 

`

LinX64 commented 4 months ago

Same here with Compose Multiplatform and Datastore. Any updates?

Stevespear426 commented 4 months ago

I was able to fix by switching from NSDocumentDirectory -> NSCachesDirectory When creating the DataStore object on iOS.

actual fun getDataStore(name: String): DataStore<Preferences> {
    return PreferenceDataStoreFactory
        .createWithPath(
            scope = CoroutineScope(Job() + Dispatchers.IO),
            produceFile = {
                val documentDirectory: NSURL? = NSFileManager.defaultManager.URLForDirectory(
                    directory = NSCachesDirectory,
                    inDomain = NSUserDomainMask,
                    appropriateForURL = null,
                    create = false,
                    error = null,
                )
                (requireNotNull(documentDirectory).path + name + ".preferences_pb").toPath()
            }
        )
}
swankjesse commented 1 month ago

Unclear what action to take here. Can you reproduce this exception consistently? Or perhaps only when the device is locked?

Stevespear426 commented 1 month ago

It was 100% reproducible at the time with NSDocumentDirectory since switching to NSCachesDirectory I haven't had any issues. I suppose the action here would be to fix using NSDocumentDirectory? Or perhaps documenting that it is not supported?