识别 macOS 上的托管文件夹

Posted

技术标签:

【中文标题】识别 macOS 上的托管文件夹【英文标题】:Identify managed folders on macOS 【发布时间】:2020-07-21 15:35:26 【问题描述】:

如果我的客户将 SQLite 数据库放在托管文件夹中,我经常会遇到麻烦。我的意思是托管文件夹:

安装卷 Dropbox 文件夹 iCloud Drive 文件夹 保险丝等

是否有一种安全的方式来识别此类位置以警告用户?

【问题讨论】:

【参考方案1】:

Dropbox 确实提供了一种以编程方式获取本地 Dropbox 文件夹(如果有)路径的方法:

https://help.dropbox.com/installs-integrations/desktop/locate-dropbox-folder#programmatically

【讨论】:

谢谢,这个提示真的很有用!对于 iCloud 和 NAS,我发现了一些可以完成这项工作的 NSURL 属性。【参考方案2】:

根据@Greg 的提示,我使用一些私有助手在 ObjC 中提出了一个解决方案,但我想这个想法应该变得清晰:

- (BOOL)isDropbox:(NSURL *)url 
    // https://help.dropbox.com/de-de/installs-integrations/desktop/locate-dropbox-folder#programmatically
    id json = [[NSData dataWithContentsOfURL:hxFileURL(@"~/.dropbox/info.json".stringByExpandingTildeInPath)] fromJSON];
    NSString *ppath = json[@"personal"][@"path"];
    NSString *bpath = json[@"business"][@"path"];
    NSString *path = hxFilePath(url);
    return (ppath && [path hasPrefix:ppath]) || (bpath && [path hasPrefix:bpath]);


- (BOOL)hoIsLocal:(NSURL *)url 
    @try 
        if (![FS hoIsDir:url]) 
            url = [url URLByDeletingLastPathComponent];
        

        // Is it local in general?
        ERROR_DEF;
        NSNumber *state;
        [url getResourceValue:&state forKey:NSURLVolumeIsLocalKey error:&error];
        XLogInfo(@"state=%@ url=%@", state, url);

        // If so it could be stored in iCloud Drive
        if (state.boolValue) 
            BOOL ubiq = [FS isUbiquitousItemAtURL:url];
            XLogInfo(@"ubiq=%@ url=%@", @(ubiq), url);

            // Or on Dropbox
            if (!ubiq) 
                BOOL dbx = [FS isDropbox:url];
                XLogInfo(@"dbx=%@ url=%@", @(dbx), url);
                return !dbx;
            
        
    
    @catch (id ex) 
        XLogException(ex);
    
    return NO;

【讨论】:

以上是关于识别 macOS 上的托管文件夹的主要内容,如果未能解决你的问题,请参考以下文章

想要Mac电脑上的面部识别码?MacOS Big Sur暗示TrueDepth摄像头即将推出

如何摆脱 macOS 上的讨厌文件

macOS 上的 VSCode - 隐藏图标?文件

修复 git HTTPS 错误:macOS 12 上的“错误密钥长度”

如何在 macOS 上的 Sublime Text 中在同一窗口中打开文件和文件夹?

M1 macOS Mojave 全局 bin 文件夹权限错误上的 npm