【问题标题】:Running `xattr -rc` Swift runtime produces No such file when within Application Support folder. Running from terminal works fine在 Application Support 文件夹中运行 `xattr -rc` Swift 运行时不会产生这样的文件。从终端运行正常
【发布时间】:2021-08-23 15:21:24
【问题描述】:

xattr -rc "/Users/Me/Library/Containers/BundleId/Data/Library/Application Support/BundleId/Game.app": No such file or directory


Game.app 无法正常打开,因为它是从Launcher.app 下载并解压缩的,Apple 不太喜欢这样。

这两个应用程序都经过代码签名和认证。

我正在使用应用程序支持目录存储下载的Game.zip 和解压缩的Game.app

FileManager.default.url(for: .applicationSupportDirectory,
                        in: .userDomainMask,
                        appropriateFor: nil,
                        create: true)
    .appendingPathComponent(Bundle.main.bundleIdentifier!, isDirectory: true)

运行此代码以尝试剥离属性:

    @discardableResult
    private func shell() -> Int32 {
        let task = Process()
        task.launchPath = "/usr/bin/env"
        task.arguments = "xattr -rc \"\(self.gameExe.path)\""
        task.launch()
        task.waitUntilExit()
        return task.terminationStatus
    }

我尝试过使用chmod -R 755 \"\(self.gameExe.path)\",它可以工作(即找到文件并运行命令)但它仍然无法打开Game.app,这就是我尝试使用xattr 的原因。

无法弄清楚为什么 chmod “有效”但 xattr 无效。

我们将不胜感激。

【问题讨论】:

    标签: swift xcode macos shell


    【解决方案1】:

    根据apples documentationtask.launchPathtask.launch() 已“弃用”,不建议再使用。而是使用task.executableURLtry task.run()

    此外,这不是使用 Process 运行 chmod 或 xattr 的最佳方式。
    因此 swift 有自己的方法。您可以使用属性键修改任何文件属性。
    而是使用:

       do {
        
       var attributes = [FileAttributeKey : Any]()
       attributes[.posixPermissions] = 0o755 // number as octal
        
       try FileManager.default.setAttributes(attributes, ofItemAtPath: "yourPath")
        
       } catch { return false  }
    
    

    您可以使用以下命令轻松检查您的文件是否可执行:

    
    let path = URL(fileURLWithPath: "yourPath")
    
    do {
    
       let isExec = try path.resourceValues(forKeys:  [.isExecutableKey]).isExecutable //returns true or false
       
    } catch let error {
        print(error.localizedDescription)
       
    }
    
    

    希望这对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2018-12-21
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 2017-09-07
      • 2016-03-24
      • 2015-07-25
      相关资源
      最近更新 更多