[macos/ios/混合编程]无特殊权限时 macos 程序默认能访问的目录 [zt] [未实测]
clq
浏览(367) -
2023-12-02 16:13:48 发表
编辑
关键字:
[2023-12-02 18:22:59 最后更新]
[macos/ios/混合编程]无特殊权限时 macos 程序默认能访问的目录 [zt][未实测]
--------------------------------------------------------
更新:
似乎最详细的中文 macos/ios 开发文档是微软的 xamarin 官方文档!!!
https://learn.microsoft.com/zh-cn/xamarin/mac/app-fundamentals/sandboxing
这里说了,NSHomeDirectory 对应下的目录是可以任意读写的。
return ((NSString)ObjCRuntime.Runtime.GetNSObject(NSHomeDirectory())).ToString ();
----
https://learn.microsoft.com/zh-cn/xamarin/ios/platform/in-app-purchasing/
看此文档,它还支持内购。
--------------------------------------------------------
https://blog.csdn.net/lovechris00/article/details/104255249
--------------------------------------------------------
macOS 开发 -文件和文件夹 & 完全磁盘访问权限
伊织code
已于 2023-07-12 16:57:07 修改
阅读量1.2w
收藏 13
点赞数 3
分类专栏: Apple开发 文章标签: 完全磁盘访问权限 macOS mac FullDiskAccess
版权
Apple开发 专栏收录该内容
124 篇文章 12 订阅
订阅专栏
文章目录
一、权限说明
二、`文件和文件夹` 权限
1、需要授权的目录
2、授权动作
3、不需要授权的目录
三、完全磁盘访问权限
1、手动增删
2、和 文件和文件夹 权限相关
3、SIP 下 无法用命令 完全磁盘访问 权限
4、完全磁盘访问权限 的授权判断
一、权限说明
关于这两个权限,没有看到 Apple 给开发者的具体建议。
根据:https://support.apple.com/zh-cn/guide/mac-help/mh32356/mac,对于用户而言,这两个权限是
完全磁盘访问权限 : 显示可以访问电脑上所有文件的 App,包括其他 App(例如“邮件”、“信息”、Safari 浏览器和“家庭”)中的数据、时间机器备份中的数据以及此 Mac 上所有用户的部分管理设置。
文件和文件夹 :显示可以访问此 Mac 上不同位置的文件和文件夹的 App。如果您想要阻止其访问文件和文件夹,请取消选择该 App。
相关 url 跳转:
/*
Privacy_AllFiles 完全磁盘访问权限
Privacy_Assistive 文件和文件夹
*/
NSString *urlString = @"x-apple.systempreferences:com.apple.preference.security?Privacy_Assistive";
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:urlString]];
1
2
3
4
5
6
二、文件和文件夹 权限
1、需要授权的目录
参考自:https://nektony.com/duplicate-finder-free/folders-permission
在这里插入图片描述
文件和文件夹 权限,主要针对下面几个文件夹(有其他文件夹希望告知):
Desttop Folder 桌面文件夹, ~/Desktop
Documents Folder "文稿"文件夹, ~/Documents
Downloads Foder 下载文件夹, ~/Downloads
Removable Volumes 可移除的宗卷(如 U 盘), 如 /Volumes/SSWD
Network Volumes 服务器卷宗
2、授权动作
在SIP 开启状态下,应用访问上述文件夹时,将会弹出窗口提示用户授权:
在这里插入图片描述
授权结果将会显示在 系统偏好设置 --> 安全性与隐私 --> 隐私 --> 文件和文件夹 中。
3、不需要授权的目录
由于不明确具体哪些目录需要授权,所以测试了以下目录,他们均不需要 文件和文件夹 或 完全磁盘访问权限
/Applications
~
~/Library
~/Library/Containers
~/Library/WebKit
~/Library/QuickTime 可以读到数据
~/Pictures
~/Music
~/Library/Mobile Documents
~/Library/Mobile\ Documents/com\~apple\~ScriptEditor2/Documents
--------------------------------------------------------
实测结果:
直接用 ~ 代替用户目录是不行的。直接访问 ~ 对应的根目录确实可以,但访问它的下一级仍然需要提问权限。
sl.LoadFromFile('/Users/ccc/Documents/1.txt'); //first
sl.SaveToFile('/Users/ccc/1.txt'); //ok
sl.LoadFromFile('~/Documents/1.txt'); //no
sl.LoadFromFile('~/1.txt'); //no
sl.SaveToFile('~/1.txt'); //no
--------------------------------------------------------
三、完全磁盘访问权限
1、手动增删
可以在偏好设置面板中,手动添加和删除应用。
点击添加,会打开文件夹,来选择。
在这里插入图片描述
2、和 文件和文件夹 权限相关
拥有完全磁盘访问权限,在文件和文件夹 中,也会显示出来。
已经授权,完全磁盘访问权限,则访问 桌面等,不会再继续要求授权。
在这里插入图片描述
3、SIP 下 无法用命令 完全磁盘访问 权限
1) tccutil reset all com.ms.VideoEditDemo
2)
$ tccutil reset AllFiles
tccutil: Failed to reset database
$ tccutil reset Assistive
tccutil: Failed to reset database
1
2
3
4
5
以上命令均无法像 移除麦克风权限一样移除 完全磁盘访问权限 和 文件夹权限。手动移除是最好的方式。
非 SIP 待测试。
4、完全磁盘访问权限 的授权判断
provided by @HsiangHo
typedef NS_ENUM(NSUInteger, FDAAuthorizationStatus) {
FDAAuthorizationStatusNotDetermined = 0,
FDAAuthorizationStatusDenied,
FDAAuthorizationStatusAuthorized
} NS_SWIFT_NAME(AuthorizationStatus);
NS_ASSUME_NONNULL_BEGIN
@interface FullDiskAccessAuthorizer : NSObject
+ (instancetype)sharedInstance;
- (FDAAuthorizationStatus)authorizationStatus;
- (void)requestAuthorization;
@end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#import "FullDiskAccessAuthorizer.h"
#import
#import
static FullDiskAccessAuthorizer *instance;
@implementation FullDiskAccessAuthorizer
+ (instancetype)sharedInstance {
@synchronized (self) {
if(nil == instance) {
instance = [[FullDiskAccessAuthorizer alloc] init];
}
return instance;
}
}
- (FDAAuthorizationStatus)authorizationStatus {
NSString *userHomePath = NSHomeDirectory();
BOOL isSandboxed = (nil != NSProcessInfo.processInfo.environment[@"APP_SANDBOX_CONTAINER_ID"]);
NSLog(@"isSandboxed : %d",isSandboxed);
if (isSandboxed)
{
struct passwd *pw = getpwuid(getuid());
assert(pw);
userHomePath = [NSString stringWithUTF8String:pw->pw_dir];
}
NSString *path = [userHomePath stringByAppendingPathComponent:@"Library/Safari"];
NSLog(@"userHomePath : %@, path : %@",userHomePath,path);
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:path];
NSArray *paths = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil];
NSLog(@"paths : %@",paths);
if (paths == nil && fileExists){
return FDAAuthorizationStatusDenied;
} else if (fileExists) {
return FDAAuthorizationStatusAuthorized;
} else {
return FDAAuthorizationStatusNotDetermined;
}
}
- (void)requestAuthorization {
if (@available(macOS 10.14, *)){
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"x-apple.systempreferences:com.apple.preference.security?Privacy_AllFiles"]];
}
}
@end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
伊织 2020-02-10(一)愿患者早日康复
本帖子属于以下条目()
NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.