Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

okio.IOException: Operation not permitted. #1459

Open
maqsats opened this issue Mar 19, 2024 · 7 comments
Open

okio.IOException: Operation not permitted. #1459

maqsats opened this issue Mar 19, 2024 · 7 comments

Comments

@maqsats
Copy link

maqsats commented Mar 19, 2024

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
Copy link
Author

maqsats commented Mar 19, 2024

@swankjesse I have created new issue for that bug

@maqsats maqsats closed this as completed Mar 19, 2024
@maqsats maqsats reopened this Mar 19, 2024
@saparbekuly
Copy link

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

@Stevespear426
Copy link

Stevespear426 commented May 23, 2024

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
Copy link

LinX64 commented Jul 19, 2024

Same here with Compose Multiplatform and Datastore. Any updates?

@Stevespear426
Copy link

Stevespear426 commented Jul 19, 2024

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
Copy link
Collaborator

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

@Stevespear426
Copy link

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?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants