1

I am picking a dropbox file and saving it as a bookmark using bookmarkData in my iOS app. It works perfectly

 func addBookmark(for url: URL) {
        do {
            // Start accessing a security-scoped resource.
            guard url.startAccessingSecurityScopedResource() else {
                // Handle the failure here.
                return
            }
            
            // Make sure you release the security-scoped resource when you finish.
            defer { url.stopAccessingSecurityScopedResource() }
            
            // Convert URL to bookmark
            let bookmarkData = try url.bookmarkData(options: .minimalBookmark, includingResourceValuesForKeys: [ .contentModificationDateKey], relativeTo: nil)
            
            try bookmarkData.write(to: getAppSandboxDirectory().appendingPathComponent("filePath"))
            
            // Add the URL and UUID to the urls array
            withAnimation {
                urls.removeAll()
                urls.append(url)
            }
        }
        catch {
            // Handle the error here.
            print(error.localizedDescription)
        }
        
    }

Then I modify that file, for example add a new line to the text file in dropbox. File syncs to my device. (If I open it from files app I can see the modified data).

But when I resolve the bookmarked url and view it in my app, it shows old version of the file. Not the modified one with the new data.

func loadAllBookmarks() {
        // Get all the bookmark files
        let files = try? FileManager.default.contentsOfDirectory(at: getAppSandboxDirectory(), includingPropertiesForKeys: nil)
        // Map over the bookmark files
        self.urls = files?.compactMap { file in
            do {
                let bookmarkData = try Data(contentsOf: file)
                var isStale = false
                // Get the URL from each bookmark
                let url = try URL(resolvingBookmarkData: bookmarkData, bookmarkDataIsStale: &isStale)
                
                
                guard !isStale else {
                    print("isStale")
                    // Handle stale data here.
                    return nil
                }
                // Return URL
                return url
            }
            catch let error {
                // Handle the error here.
                print("\(error)")
                return nil
            }
        } ?? []
    }

Edit: Also if I open the file picker from my app again it shows the cloud downloadable icon and it automatically downloads the file, without even choosing the file.

Then I closed the file picker and i could see the file was updated in my app too. But I want to do it without let the user choose the file again,

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.