macOS开发之设置文件夹的图标

我搭建了个人博客主页, 欢迎访问: http://blog.joelzho.com/

一. 背景

前两天 iCloud 同步出现问题了, 我寻思换一款软件以解决两台 mac 之间的同步问题.
于是我下载了百度云同步盘.
当我初始化完成之后, 它在我的Home目录下创建了一个它专用的文件夹,
如图:
在这里插入图片描述

咦? 百度云同步盘 这个文件夹怎么有自己的图标?
我知道如何通过 Finder 设置文件夹的图标, 但是程序是怎么实现的呢?

二. 研究过程

之前在 Windows 操作系统上, 有相关的实现经验.
所以我首先准备看看这个文件夹下有没有什么隐藏文件, 用于标识这个文件夹的图标.
于是我通过 Terminal 查看了这个文件夹下的内容
如图:
在这里插入图片描述

嗯… 虽然有一个在猜想之内的文件(Icon? 这个文件), 不过怎么大小为 0 呢?

OK, 研究到头, 最后在苹果开发者官网上找打了设置方法, 文末会给出链接.

三. 官网函数声明

以下是我从苹果开发者官网找到的, 如图:
在这里插入图片描述

从官网的文档来看, 我整理出了以下内容:
NSWorkspace 类下的setIcon 可以对指定的文件或文件夹设定图标,
接收一个图片对象和一个绝对路径以及一个设定选项.
返回是否设置成功.

OK, 下面进入敲代码环节.

四. 函数调用

官网的声名是 Objective-C 语言的, 我这里用 Swift 语言来实现,
因为现在苹果系列的开发大多都用 Swift 语言.
虽然本人也喜欢 Objective-C 多一点, 不过尝试了Swift语言之后,
才发现这门语言真简单, 真好用, 真香~

言归正传.

我新建了一个以 mac cocoa 项目, 开发语言为 Swift.
并在资源目录下准备了一张用于设置为文件夹图标的图片.
如图:
在这里插入图片描述

然后在Main.storyboard 中添加了一个按钮, 并绑定了点击事件到ViewController.swift里面,
然后我创建了一个文件夹并设定它的图标, 代码如下:

@IBAction func click(_ sender: Any) {
        let path = "/Users/joel/Desktop/TestFolder"
        var isSuccess = true
        // Create folder
        let fileManager = FileManager.default
        do {
            try fileManager.createDirectory(atPath: path,
                                            withIntermediateDirectories: false,
                                            attributes: nil)
        }
        catch let err as Error? { // When error
            debugPrint(err.debugDescription)
            isSuccess = false
        }
        
        if isSuccess {
            // Set folder's icon
            let workSpace = NSWorkspace.shared
            let image = NSImage.init(named: "Ninja")
            let option = NSWorkspace.IconCreationOptions.excludeQuickDrawElementsIconCreationOption
            isSuccess = workSpace.setIcon(image, forFile: path, options: option)
        }
    }

OK, 以上代码就能够对文件夹的图标进行设置了.
以上代码运行完成之后, 通过 Terminal 查看文件夹里面的内容,
发现里面也有一个 Icon? 文件,大小也为 0B.
当我删除 Icon? 文件之后, 文件夹图标也变回系统默认的了.

五. 注意事项

我第一次运行这个代码时, 在创建文件夹那一步抛错了.
原来是我忘了关闭沙盒模式.

我使用的 Xcode 版本是: Version 10.1 (10B61),
新建的项目会在根目录下有一个 iconTest.entitlements.
这个文件名字的格式为: 你的项目名.entitlements.

这个文件里面有一个配置 为: App Sandbox, 将它设置为 NO就关闭了沙盒模式.
如图:
在这里插入图片描述

七.参考链接

苹果开发官网的函数声明
Cocoa开发之沙盒机制

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值