[英]Identify managed folders on macOS
如果我的客戶將 SQLite 數據庫放在托管文件夾中,我經常會遇到麻煩。 對於托管文件夾,我的意思是:
是否有一種安全的方法來識別此類位置以警告用戶?
Dropbox 確實提供了一種以編程方式獲取本地 Dropbox 文件夾(如果有)的路徑的方法:
https://help.dropbox.com/installs-integrations/desktop/locate-dropbox-folder#programmatically
根據@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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.