V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
treblex
V2EX  ›  iDev

有没有大佬帮看一下,沙箱选择文件夹突然就没有权限了,现在可以列出一级文件,二级目录的文件就打不开了,昨天之前还是可以的

  •  
  •   treblex ·
    lazyfury · 131 天前 · 1165 次点击
    这是一个创建于 131 天前的主题,其中的信息可能已经有所发展或是发生改变。

    load files error: Error Domain=NSCocoaErrorDomain Code=257 "The file “common” couldn’t be opened because you don’t have permission to view it."

    选择文件的代码

    
    Button {
                        reset()
                        isFileImporterPresented = true
                    } label: {
                        Label("Choose Folder",systemImage: "square.and.arrow.up").fileImporter(isPresented: $isFileImporterPresented, allowedContentTypes: [.directory]) { result in
                            let _ = result.map { url in
                                tryGetWorkspaceInfo(url)
                            }
                            
                            
                        }
                    }.padding(4)
    

    保存 bookmark

    
    try url.bookmarkData(options: [.withSecurityScope], includingResourceValuesForKeys: nil, relativeTo: nil)
    

    从 bookmark 获取 url

    if item.bookmark == nil{
                return
            }
            var isStale = false
            do{
                let url = try URL(resolvingBookmarkData: item.bookmark!, options: [.withSecurityScope,.withoutImplicitStartAccessing,.withoutMounting],bookmarkDataIsStale: &isStale)
                root = url
                print("标签过期",isStale)
                if(isStale){
                    return
                }
                let statStr = SVN.Util.shared.stat(url: url.path)
                stat = SVN.Stat.parse(str: statStr)
                //            print(stat?.entries[0].status)
                let _ = url.startAccessingSecurityScopedResource()
                files =  FileItem.loadFiles(url: url) ?? []
                url.stopAccessingSecurityScopedResource()
            }catch{
                
            }
    

    加载文件夹的代码

    
    public static func loadFiles(url:URL) -> [FileItem]? {
            var result:[FileItem]? = nil
            do{
                var isDir:ObjCBool = false
                
                FileManager.default.fileExists(atPath: url.path, isDirectory: &isDir)
                if(!isDir.boolValue){
                    return nil
                }
                let _ = url.startAccessingSecurityScopedResource()
                let files = try FileManager.default.contentsOfDirectory(at: url, includingPropertiesForKeys: nil,options: [])
                url.stopAccessingSecurityScopedResource()
                
                
                
                result = []
                for file in files {
                    var isCurrentDir:ObjCBool = false
                    FileManager.default.fileExists(atPath: file.path, isDirectory: &isCurrentDir)
                    let item = FileItem(url: file,isDir: isCurrentDir.boolValue)
                    //                item.children = FileItem.loadFiles(url: file)
                    result?.append(item)
                }
                
                
                //            sorted files
                
                let dirs = result!.filter({ $0.isDir }).sorted { cur, next in
                    return cur.url.lastPathComponent.localizedCaseInsensitiveCompare(next.url
                        .lastPathComponent) == .orderedAscending
                }
                let others = result!.filter({ !$0.isDir }).sorted { cur, next in
                    return cur.url.lastPathComponent.localizedCaseInsensitiveCompare(next.url
                        .lastPathComponent) == .orderedAscending
                }
                
                result = dirs + others
                
            }catch{
                print("load files error:",error)
            }
            return result
        }
    
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3251 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:03 · PVG 20:03 · LAX 04:03 · JFK 07:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.