SwiftySandboxFileAccess UserDefaults值

如何解决SwiftySandboxFileAccess UserDefaults值

SwiftySandboxFileAccess用户第一次批准NSOpenPanel选择时起作用,但是在下次打开该应用程序时,即使SwiftySandBoxFileAccess认为仅由于将值保存在用户界面中,该安全书签也没有访问权限。 UserDefaults我认为吗?

这是SwiftySandBoxFileAccess保存在UserDefaults中的内容

"bd_file:///Volumes/": <626f6f6b fc010000 00000410 30000000 75703e99 3136c5a3 905214f4 1d55afdf
 f9680acc 65a5c354 86b39a29 ee2e1683 1c010000 04000000 03030000 00080028 07000000 01010000
 566f6c75 6d657300 04000000 01060000 10000000 08000000 04030000 93d14501 00000000 04000000 
01060000 2c000000 08000000 00040000 41c188f9 52800000 18000000 01020000 02000000 00000000 
0f000000 00000000 00000000 00000000 08000000 01090000 66696c65 3a2f2f2f 0c000000 01010000 
4d616369 6e746f73 68204844 08000000 04030000 0050065e 3a000000 08000000 00040000 41c1ab00 
f8865976 24000000 01010000 35384630 35383433 2d414237 332d3442 34342d42 3344372d 34374434 
39373543 46434536 18000000 01020000 81000000 01000000 ef130000 01000000 00000000 00000000 
01000000 01010000 2f000000 00000000 01050000 a8000000 feffffff 01000000 00000000 0d000000 
04100000 20000000 00000000 05100000 3c000000 00000000 10100000 58000000 00000000 40100000 
48000000 00000000 02200000 08010000 00000000 05200000 78000000 00000000 10200000 88000000 
00000000 11200000 bc000000 00000000 12200000 9c000000 00000000 13200000 ac000000 00000000 
20200000 e8000000 00000000 30200000 14010000 00000000 10d00000 04000000 00000000>
  1. bd_路径的开头添加file://是什么?
  2. 这8位都是什么?

更多上下文:

这是我尝试使用安全书签的方式:

  func accessRunFileVacuum(args: VacuumCli) {
    let access = SandBoxFileAccess()
    let success = access.access(

      fileURL: URL(fileURLWithPath: "/Volumes"),askIfNecessary: true,persistPermission: true,with: {
      
      print("access the URL here")
      self.runFileVacuumCLI(args)

    })

    print("? pickFile success: \(success)")
  }

"access the URL here" ..., URL ...哼...?

来自: https://github.com/ConfusedVorlon/SwiftySandboxFileAccess/blob/master/SwiftySandboxFileAccessDemo/SwiftySandboxDemo/Manager.swift#L42

我正在阅读一个相关的安全书签票证,其中提到安全书签需要另存为URL,然后传递到想要使用它的子流程中: https://stackoverflow.com/a/27321020/1762493

with: {}块已经通过SwiftySandBoxFileAccess封装在startAccessingSecurityScopedResource / stopAccessingSecurityScopedResource中,如下所示:https://github.com/ConfusedVorlon/SwiftySandboxFileAccess/blob/master/SwiftySandboxFileAccess/Classes/SandboxFileAccess.swift#L87

runFileVacuumCLI()作为队列操作运行:

  func runFileVacuumCLI(_ args: VacuumCli) {
    checkVolumesAccess()

    if queue.operationCount < 1 {

      fvOperation = FileVacuumOperation(vacuumCli: args)
      queue.addOperations([fvOperation],waitUntilFinished: false)
      
    }
  }

解决方法

SandboxFileAccess().requestPermissions()允许控制何时调用startAccessingSecurityScopedResource。结果以某种方式调用securityScopedFileURL?.startAccessingSecurityScopedResource() == true一次,然后才尝试访问该文件。

为清楚起见,SandboxFileAccess().access()也调用startAccessingSecurityScopedResource(),然后执行传递的block{},然后调用stopAccessingSecurityScopedResource()。由于我的函数是异步的,因此stop被调用,并且我对该文件的访问已关闭。

let success = access.requestPermissions(
    forFileURL: URL(fileURLWithPath: bodyString),askIfNecessary: true,persistPermission: true,with: { securityScopedFileURL,bookmarkData in

      if (securityScopedFileURL?.startAccessingSecurityScopedResource() == true) {
        self.testLog("? gainAccess inside startAccessingSecurityScopedResource() == true")
      }
})

self.testLog("? pickFile success: \(success)")

我认为这与另一个答案中提到的“ startAccessingSecurityScopedResource的平衡”有关: https://stackoverflow.com/a/24301326/1762493

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?