曾静的博客

但行好事,莫问前程.

嗨,我是曾静 (@devzeng),目前暂居深圳。


这是我用来记录平日学习笔记的地方,欢迎您的访问.

macOS Sequoia剪切板获取文件路径的问题

macos_sequoia

收到一个问题,说升级到 macOS Sequoia,客户端复制文件粘贴到程序中通过代码获取的路径是 file:///.file/id=xxxx,而不是实际文件路径。之前的版本是正常的。

从剪切板获取文件路径的代码:

void get_file_names(void) {
    NSPasteboard* pasteboard = [NSPasteboard generalPasteboard];
    NSArray* tempArray = [pasteboard pasteboardItems];
    for(NSPasteboardItem *tmpItem in tempArray){
        NSString *pathString = [tmpItem stringForType:@"public.file-url"];
        NSLog(@"pathString: %@", pathString);
    }
}

通过 public.file-url 方式获取的地址不再是文件的真实路径,而是一个 fileid 形式的地址,其实兼容的代码很简单就是使用 [NSURL path] 重新获取一下地址就OK了。

修改后代码:

void get_file_names(void) {
    NSPasteboard* pasteboard = [NSPasteboard generalPasteboard];
    NSArray* tempArray = [pasteboard pasteboardItems];
    for(NSPasteboardItem *tmpItem in tempArray){
        NSString *pathString = [tmpItem stringForType:@"public.file-url"];
        if (pathString && [pathString isKindOfClass:[NSString class]]) {
            NSURL *url = [NSURL URLWithString:pathString];
            NSString *realPathString = [url path];
            NSLog(@"pathString: %@", realPathString);
        }
    }
}

其实还是代码写的不是很规范导致的,在 Drag and Drop 等场景下面早就是 fileid 形式的地址了。

参考资料

最近的文章

使用OpenSSL转换p12到pfx格式

年中有个服务使用到的签名证书过期了,需要重新生成一个签名证书。这个服务使用的是 .pfx 格式的证书文件,需要将 .p12 格式的证书文件转换为 .pfx 格式的证书文件。导出的方式比较繁琐:首先是在 macOS 上使用 Keychain 工具,将证书导出为 .p12 格式的证书文件。然后使用 Windows 管理主控台 工具,将 .p12 格式的证书文件转换为 .pfx 格式的证书文件。一般来说从Keychain导出的p12格式证书的证书链是不完整的,比如有的时候安装别人提供的 p12 ...…

Note继续阅读
更早的文章

iOS使用optool注入动态库

年初为排查性能问题写了一个动态获取函数调用耗时的工具(Kirin)。工具主要包括两个部分:macOS应用,负责发送采集指令,格式化数据生成 Chrome Trace Viewer 用到的 Trace Event Format 格式的数据;framework动态库,嵌入到App里,负责接收指令,采集耗时数据。使用的时候是直接将framework拖到项目里面运行项目就可以了,但是实际场景下Debug阶段可以通过Instrument更加的方便大多数时候需要定位生产版本的问题,就需要将现有的ipa...…

Note继续阅读