Platforms to show: All Mac Windows Linux Cross-Platform

/MacCF/Sandbox File Access/Sandbox Files


Required plugins for this example: MBS MacCF Plugin

You find this example project in your Plugins Download as a Xojo project file within the examples folder: /MacCF/Sandbox File Access/Sandbox Files

This example is the version from Tue, 11th Jul 2016.

Project "Sandbox Files.xojo_binary_project"
Class App Inherits Application
Const kEditClear = "&Delete"
Const kFileQuit = "&Quit"
Const kFileQuitShortcut = ""
End Class
Class MainWindow Inherits Window
Control List Inherits Listbox
ControlInstance List Inherits Listbox
End Control
EventHandler Sub Open() app.AutoQuit = true // let's see where documents folder is dim docFolder as FolderItem = SpecialFolder.Documents #if RBVersion < 2013 dim docPath as string = docFolder.UnixpathMBS #else dim docPath as string = docFolder.NativePath #endif List.AddRow "Document folder: "+docPath if docPath.instr("/Containers/") = 0 then MsgBox "Please sandbox this app." // run command in command.txt file. // you need to put your developer name in the command.txt file end if // now our pref file dim datafile as FolderItem = docFolder.Child("bookmark.pref") if datafile.Exists and datafile.Length>0 then List.AddRow "Second run." // read bookmark dim b as BinaryStream = BinaryStream.Open(datafile) dim BookmarkData as string = b.Read(b.Length) // resolve bookmark dim relativeURL as CFURLMBS = nil dim isStale as Boolean = false dim options as integer = CFBookmarkMBS.kResolutionWithoutUIMask + CFBookmarkMBS.kResolutionWithSecurityScope dim url as CFURLMBS = CFBookmarkMBS.ResolveBookmarkDataToCFURLMBS(BookmarkData, options, relativeURL, isStale) dim error as CFErrorMBS = CFBookmarkMBS.LastError if error<>nil then List.AddRow "Error: "+error.Description end if // got something? if url<>Nil then dim UrlString as string = url.str.str list.AddRow "URL: "+UrlString // start access if CFBookmarkMBS.StartAccessingSecurityScopedResource(url) then List.AddRow "StartAccessingSecurityScopedResource success." dim file as FolderItem = url.file #if RBVersion < 2013 dim filePath as string = file.UnixpathMBS #else dim filePath as string = file.NativePath #endif List.AddRow "File: "+filePath // now read file b = BinaryStream.Open(file) dim data as string = b.Read(b.Length) List.AddRow "Data read: "+str(lenb(data)) // stop access CFBookmarkMBS.StopAccessingSecurityScopedResource url List.AddRow "Success." else List.AddRow "StartAccessingSecurityScopedResource failed." end if else List.AddRow "failed to get URL from stored bookmark." end if else List.AddRow "Please select a file..." // pick a file dim f as FolderItem = GetOpenFolderItem("") if f = nil then Return list.AddRow "URL: "+f.URLPath // open file and see if we can read it dim b as BinaryStream = BinaryStream.Open(f) dim data as string = b.Read(b.Length) List.AddRow "Data read: "+str(lenb(data)) // create bookmark data dim options as integer = CFBookmarkMBS.kCreationWithSecurityScope dim bookmarkData as string bookmarkData = CFBookmarkMBS.CreateBookmarkData(f, options) dim error as CFErrorMBS = CFBookmarkMBS.LastError if error<>nil then List.AddRow "Error: "+error.Description end if if lenb(bookmarkData) = 0 then // failed? Maybe not sandboxed... List.AddRow "Failed to create bookmark." Return end if // now write to data file b = BinaryStream.Create(datafile, true) b.Write bookmarkData b.Close List.AddRow "Saved bookmark. Please relaunch app." end if Exception io as IOException List.AddRow "IOException: "+str(io.errorNumber)+" "+io.message End EventHandler
End Class
MenuBar MainMenuBar
MenuItem FileMenu = "&File"
MenuItem FileQuit = "#App.kFileQuit"
MenuItem EditMenu = "&Edit"
MenuItem EditUndo = "&Undo"
MenuItem EditSeparator1 = "-"
MenuItem EditCut = "Cu&t"
MenuItem EditCopy = "&Copy"
MenuItem EditPaste = "&Paste"
MenuItem EditClear = "#App.kEditClear"
MenuItem EditSeparator2 = "-"
MenuItem EditSelectAll = "Select &All"
End MenuBar
MyFileTypes
Filetype text/plain
End MyFileTypes
End Project

The items on this page are in the following plugins: MBS MacCF Plugin.


The biggest plugin in space...