【小工具】一键隐藏/显示MacOS的应用图标

简介: 【小工具】一键隐藏/显示MacOS的应用图标

不知诸位有没有这样一个需求,当MacOS打开应用多的时候,Dock栏可能会很拥挤:

11.jpg

那么需求就产生了,能不能将某些软件的图标在Dock隐藏掉,同时也不影响日常使用呢?有的,接下来即将给出成熟的解决方案。


此篇文章的灵感来源于昨天的推文:微信钉钉消息监控处理机器人,因为其中有部分代码操作了应用的Info.plist文件,所以便想到做这个小工具,本工具只支持MacOS。


开始


这个工具很简单,我会直接说明解决方案以及全部代码,同时也会说明一下如何编写一个第三方包并上传到pypi。


话说昨天需要提取应用包名的时候,研究了下每个应用下面的Info.plist文件,不说其他的,发现其中的LSUIElement可以控制软件的图标是否可以在Dock里面显示。


那么这就是上述问题的解决方案,只要修改LSUIElement的值即可:


如果需要隐藏图标:设置LSUIElement为1


如果需要显示图标:去掉LSUIElement即可


因此核心逻辑还是很简单的,接下来开始编码。


编码


再写一个项目之前,我们需要想清楚手上做的项目最终目的是什么?然后再想想怎么优雅得实现:


目的:一个终端工具,可以实现对软件进行图标显示与隐藏


实现:用Python实现一个终端工具


好,第一步,建立项目:https://github.com/howie6879/leaf ,顺便附上说明:


A CLI tool for hiding the application’s icon in the Dock. (MacOS Dock栏软件图标隐藏终端工具)


构建项目目录结构:

├── LICENSE
├── Pipfile
├── README.md
├── leaf 
│   ├── __init__.py
│   └── cli.py # 执行脚本
└── setup.py # 项目打包文件
1 directory, 6 files

一目了然,其中cli.py核心代码如下:

def change_app_plist(app_name: str, status: bool = True):
    """
    Used for hiding/displaying the application's icon
    eg: leaf WeChat --status=1
    :param app_name:
    :param status:
    :return:
    """
    info_plist = PLIST_PATH_TEM.format(app_name)
    if os.path.exists(info_plist):
        with open(info_plist, "rb") as fp:
            pl = plistlib.load(fp)
            if status:
                pl["LSUIElement"] = "1"
            else:
                pl.pop("LSUIElement", '')
        with open(info_plist, "wb") as fp:
            plistlib.dump(pl, fp)
            print(f"{app_name} icon is {'hidden' if status else 'shows'} successfully, Please restart it.")
    else:
        output = f"Please make sure the app_name is correct, {app_name} is not in /Applications."
        print("\033[1;31;40m" + output)
def execute():
    fire.Fire(change_app_plist)

还是一目了然,写完可以Debug下,测试功能是否完善,这里介绍一下用法:


隐藏微信图标:

leaf WeChat

重启微信,看看效果:

12.jpg

图标果然隐藏了,哈哈~


如果想恢复,执行显示微信图标:

leaf WeChat --status=0

开源


测试结束后,目前还是只能自己使用。


这不行,不符合我们程序员的开源精神,上传到 https://pypi.org/ 吧(没注册的要先注册才能上传),第一步就是建立setup.py

from setuptools import find_packages, setup
setup(
    name='leaf-cli',
    version='0.0.1',
    description="A CLI tool for hiding the application's icon in the Dock. (MacOS Dock栏软件图标隐藏终端工具)",
    install_requires=['fire'],
    author='Howie Hu',
    author_email='xiaozizayang@gmail.com',
    url="https://github.com/howie6879/leaf",
    packages=find_packages(),
    entry_points={
        'console_scripts': [
            'leaf = leaf.cli:execute'
        ]
    },
)

上述起到一个项目注册的作用,比如申明项目名称等一系列基本信息、依赖包等。


setup.py建立好之后,接下来就是上传了,我推荐使用 https://pypi.org/project/twine/ 包,简单易用:

# 打包
python setup.py sdist bdist_wheel
# 上传
twine upload --repository-url https://test.pypi.org/legacy/ dist/*

传成功后,就可以看到你的项目了,接下来就是等着被别人使用,如果你能收获到成就感,那么你就明白程序员的乐趣了。


比如本项目就会出现在 https://pypi.org/project/leaf-cli/


最后


最后自然是总结,本篇推文比较基础,主要讲的是通过实现一键隐藏/显示MacOS的应用图标,演示一个Python第三方包从零到一的过程。


如果你有什么需求,欢迎提出来,一起写好玩的工具,最后附上本项目的傻瓜使用教程:


安装

pip install leaf-cli
# New features
pip install git+https://github.com/howie6879/leaf
leaf-cli --help

隐藏

leaf WeChat

显示

leaf WeChat --status=0


相关文章
|
11天前
|
关系型数据库 MySQL iOS开发
macOS Catalina(10.15)如何访问iPhone(Ipad)的应用文档文件
macOS Catalina(10.15)如何访问iPhone(Ipad)的应用文档文件
16 0
|
19天前
|
Web App开发 iOS开发 MacOS
解决macOS 应用安装在下载目录时遇到的 vscode 掉登录和应用无法随机启动的问题
解决macOS 应用安装在下载目录时遇到的 vscode 掉登录和应用无法随机启动的问题
40 0
|
iOS开发 MacOS
全网首发:(解决办法)MAC OS Xcode给应用设置沙箱(Enable App Sandbox)之后,运行报错Illegal instruction: 4
全网首发:(解决办法)MAC OS Xcode给应用设置沙箱(Enable App Sandbox)之后,运行报错Illegal instruction: 4
669 0
全网首发:(解决办法)MAC OS Xcode给应用设置沙箱(Enable App Sandbox)之后,运行报错Illegal instruction: 4
|
iOS开发 MacOS
MACOS,应用签名后就崩溃?
MACOS,应用签名后就崩溃?
124 0
|
Dart 安全 IDE
Flutter Web实战项目打造真正跨平台应用(windows,android,ios,linux,macos,web)
Flutter Web项目 Flutter 最近发布了 Flutter V2.5.1,其性能得到了很大提升,支持 Web、macOS、Android 和 iOS。 这就是为什么今天我们使用在 Web、macOS 应用、Android 和 iOS 应用上运行的 flutter 创建响应式博客主题。 此外,我们创建了一个具有自定义悬停动画的动画网络菜单。 最后,您将学习如何使用 Flutter 制作响应式应用程序。
496 0
Flutter Web实战项目打造真正跨平台应用(windows,android,ios,linux,macos,web)
|
Web App开发 Dart 安全
flutter制作博客展示平台,现已支持 Web、macOS 应用、Android 和 iOS
Flutter Blog Theme using Flutter | Web, macOS, Android, iOS Flutter 最近发布了 Flutter V2.5.1,其性能得到了很大提升,支持 Web、macOS、Android 和 iOS。 这就是为什么今天我们使用在 Web、macOS 应用、Android 和 iOS 应用上运行的 flutter 创建响应式博客主题。 此外,我们创建了一个具有自定义悬停动画的动画网络菜单。 最后,您将学习如何使用 Flutter 制作响应式应用程序。
335 0
flutter制作博客展示平台,现已支持 Web、macOS 应用、Android 和 iOS
|
Shell 开发工具 Android开发
如何在MacOS上创建第一个iOS Flutter应用
1.安装Flutter 2.设置iOS模拟器 3.在Flutter中创建一个Hello World应用
151 0
如何在MacOS上创建第一个iOS Flutter应用
|
iOS开发 MacOS
macOS开发之NSTableView的应用详解(三)
macOS开发之NSTableView的应用详解
465 0
|
iOS开发 MacOS 容器
macOS开发之NSTableView的应用详解(二)
macOS开发之NSTableView的应用详解
496 0
|
开发者 iOS开发 MacOS
macOS开发之NSTableView的应用详解(一)
macOS开发之NSTableView的应用详解
645 0