识别 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摄像头即将推出
修复 git HTTPS 错误:macOS 12 上的“错误密钥长度”