登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> SoftHub关联区 >> 主题: [macos/ios/混合编程]无特殊权限时 macos 程序默认能访问的目录 [zt] [未实测]     [回主站]     [分站链接]
[macos/ios/混合编程]无特殊权限时 macos 程序默认能访问的目录 [zt] [未实测]
clq
浏览(368) - 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(一)愿患者早日康复



总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录
macos和ios混合编程 更多
macos权限 更多



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1