Mac 开发工具信息的备份

相信大部分程序员都对开发环境的工具都有一些特殊的执念(???),如果在自己不习惯的环境中工作完全无法开展,怎么这个工具没有那个字体难受,我本人就是,换了新的 Mac 电脑后如何快速恢复到之前的开发工具呢?

开发工具包括 App 和命令行工具。用移动硬盘+时间机器自动备份当然能够完美地解决备份和恢复问题,不过接下来讨论的是一种用 Python 实现的“便宜的”方案。

App 信息备份

对于 App Store 安装的 App,通过 Apple ID 可以方便地重新下载,而对于非 App Store 安装的小众 App(如通过 Git Release)怎么快速恢复?通过 homebrew、gem 安装的依赖包和小工具呢?如果不是高频使用的 App,我们大多也记不住名字,只有到使用时才能想起它。下面介绍我使用 Python 编写程序备份 App 信息,并定期自动发送到邮件。

  • 实现思路

    Mac OS 的 /Applications 文件夹中,保存了从 App Store 下载的 App,我们其他途径得到的 .dmg 等安装包也会引导我们将 App 安装到 /Applications中,每一个 App 对应一个 .app 后缀名的文件夹,右键选择任一个 App -> 显示包内容打开文件夹,打开 Contents/Info.plist,该 Info.plist 记录了 App 的名字、开发者、Bundle ID、版本信息,我们备份了这些信息,在需要时 就能准确地在 Git 重新搜索到该 App。如下是 Python 实现

class AppInfo():
    def __init__(self,name,version,bundleid,folder):
        self.name = name
        self.version = version
        self.bundleid = bundleid
        self.folder = folder
    def __str__(self):
        return "<td>{3}</td>\n\t<td>{0}</td>\n\t<td>{1}</td>\n\t<td>{2}</td>".format(self.name,self.version,self.bundleid,self.folder)

def application_list():
    app_folder = "/Applications"
    def pharse_plist(path_dir,path_name):
        plist = {}
        with open(path_dir,‘rb‘) as rbf:
            plist = plistlib.load(rbf)
        version = plist.get(‘CFBundleShortVersionString‘,‘-‘)
        bundleid = plist.get(‘CFBundleIdentifier‘,‘-‘)
        name = plist.get(‘CFBundleName‘,‘-‘)
        return AppInfo(name=name,version=version,bundleid=bundleid,folder=path_name)
    def list_in_dir(dir,level=0):
        dirs = os.listdir(dir) if os.path.isdir(dir) else []
        apps = []
        level -= 1
        for app in dirs:
            pre_path = os.path.join(dir,app)
            info_plist_path = os.path.join(pre_path,‘Contents/Info.plist‘)
            if os.path.isfile(info_plist_path):
                apps.append(pharse_plist(info_plist_path,app))
            elif level >= 0:
                apps = apps + list_in_dir(pre_path,level=level)
        return apps
    app_str = ‘‘
    for app in list_in_dir(app_folder,level=2):
        app_str += (‘<tr>‘ + str(app) + ‘</tr>\n‘)
    table_define = """<table frame=‘hsides‘>\n{}{}‘</table>‘""".format(‘<tr>\n<th align="left">App</th>\n<th align="left">名字</th>\n<th align="left">版本</th>\n<th align="left">BundleID</th>\n</tr>‘,app_str)
    return table_define
  • 主要是遍历了 /Applications 文件夹,解析每个 App 的 Info.plist 文件,得到 App 列表信息,并加上了 html 标签进行格式化。注意 /Applications 里面可能包含文件夹,所以 list_in_dir 包含两层遍历

命令行程序备份

Mac 上的命令行工具大部分是从 homebrewrubygems 两个地方安装,接下来的 Python 代码演示备份此三处的命令行信息:

def exe_command(list):
    result = subprocess.run(list,stdout=subprocess.PIPE)
    return result.stdout.decode("utf-8").strip(‘\n‘)

def gem_list():
    return exe_command([‘/Users/$(whoami)/.rvm/rubies/ruby-2.4.1/bin/gem‘,‘list‘]).replace("\\n",‘<br>\n‘)

def brew_list():
    return exe_command([‘/usr/local/bin/brew‘,‘list‘]).replace("\\n",‘<br>\n‘)

使用 subprocess.run 执行 shell 命令并得到标准输出,然后对输出做格式化处理,方便后续做阅读

发送邮件

上面得到了 App 和工具信息,现在将其发到邮箱保存。下面的代码使用了内置的邮件服务器,可能会被当做垃圾邮件或有风险的邮件而被拒收

def temp_attachment_path():
    file_p = exe_command([‘mktemp‘])
    html_ext = file_p + ‘.html‘
    os.rename(file_p,‘file_p‘ + ‘.html‘)
    # MARK: 打印临时 html 的目录,可以预览发送的格式
    print(html_ext)
    return html_ext

def sendEmail(html_content):
    msg = MIMEText(html_content,‘html‘,‘utf-8‘)
    msg[‘From‘] = ‘[email protected]‘
    # TODO: 改成自己的邮箱地址
    msg[‘To‘] = ‘ [email protected]‘
    msg[‘Subject‘] = "XXXXX‘s MBP App 列表"
    p = Popen(["/usr/sbin/sendmail", "-t","-oi"], stdin=PIPE)
    p.communicate(msg.as_bytes())

if __name__ == ‘__main__‘:
    app_str = application_list()
    pip3_str = ‘<br><h2>Pip3 Apps</h2><p>%s</p>‘%pip3_list()
    gem_str = ‘<br><h2>Gem Apps</h2><p>%s</p>‘%gem_list()
    brew_str = ‘<br><h2>Homebrew Apps</h2><p>%s</p>‘%brew_list()
    content_str = app_str + pip3_str + gem_str + brew_str
    attachment_path = temp_attachment_path()
    with open(attachment_path,‘w‘) as wf:
        wf.write(content_str)
    sendEmail(content_str)

上述邮件发送的内容示例:

原文地址:https://www.cnblogs.com/boch2436/p/12629519.html

时间: 2024-08-28 09:54:23

Mac 开发工具信息的备份的相关文章

mac 常用的开发工具

http://www.oschina.net/news/53946/mac-dev-tools 要清楚的认识到,我们寻找的不是开始按钮,而是程序入口,任何一个操作系统,用户要做的事情并不是找到开始菜单,而是找到程序,然后打开它们完成自己的工作.在 Mac 里,完成这个职责的最佳角色不是 Dock,而是 Alfred.所以我的建议是,任何用户进入 OS X 之后,第一步就是去 App Store 下载 Alfred.普通用户使用免费版就够了,开发人员可以购买 Powerpack,物超所值. (一)

mac版微信web开发者工具(小程序开发工具)无法显示二维码 解决方案

微信小程序概念的提出,绝对可以算得上中国IT界惊天动地的一件大事,这可能意味着一场新的开发热潮即将到来, 我也怀着激动的心情准备全身心投入其中,不过截止目前,在官方网站上下载的最新版本都无法使用,打开小程序 开发工具后,只见一块白板赫然映入眼帘,不向你问好,不向你抱怨,它就是在那里静静地待着,就是迟迟看不到 传说中的二维码.系统是最新的macOS Sierra,也装了node.js之类的东西,想了一切可能的原因,网络.环境, Google了若干小时,最终甚至有些想放弃了.之前安装过低版本的破解版

Android 常用开发工具以及Mac常用软件

Android 常用的开发工具记录.其中包括AndroidStudio(IDEA)插件.Mac 上好用的软件以及国内知名Android开发者博客等. Android Studio 插件 codota 插件,提供高质量的Android代码片段搜索,官方网站codota官网 Android 网站 Android Developer Androuid 官网,不解释. AndroidDevTool 国人维护的Android开发工具的整理. Android Arsenal 各种各样的Android开源库的

【转】mac版微信web开发者工具(小程序开发工具)无法显示二维码 解决方案

转自:https://www.cnblogs.com/stevenluo/p/6030445.html 微信小程序概念的提出,绝对可以算得上中国IT界惊天动地的一件大事,这可能意味着一场新的开发热潮即将到来, 我也怀着激动的心情准备全身心投入其中,不过截止目前,在官方网站上下载的最新版本都无法使用,打开小程序 开发工具后,只见一块白板赫然映入眼帘,不向你问好,不向你抱怨,它就是在那里静静地待着,就是迟迟看不到 传说中的二维码.系统是最新的macOS Sierra,也装了node.js之类的东西,

Mac上微信小程序官方开发工具卡死的问题

Mac上微信小程序官方开发工具打开后卡死,无法操作,也关不掉,解决方案: 三步: 1.在应用中删除"微信web开发者工具" 2.删除一下几个配置和缓存文件: 1.-/Library/Application Support/微信web开发者工具 2.~/Library/Preferences/com.tencent.wechat.devtools.plist 3.~/Library/Caches/微信web开发者工具 3.重新安装"微信web开发者工具"

使用GraceNote Web API开发Mac查询音乐信息应用

好久没写博客了,最近各种忙,大忙特忙,今晚难得有空,写个博客总结下最近完成的一个任务:使用GraceNote的Web API来开发一个查询音乐信息的应用,其实功能和前面的那些GraceNote SDK的博文是一样的,只是这一次不使用任何SDK,单纯的使用Web API,然后开发的平台从iOS转移到了Mac上,于是,我人生中第一个Mac App Demo就出来了. GraceNote Web API的官方资料:点击打开链接 首先看下基本的查询和响应的数据格式: 可以看到交互的形式是XML. 事实上

Mac iOS Mac Watch 应用和游戏编程开发工具推荐

今日分享「iOS / Mac / Watch 应用和游戏开发工具」推荐,这期专题主要为iOS开发者推荐一些优秀的设计和开发工具,这些工具包含移动原型的设计.程序的开发等,可以大大提高开发的效率!专题会及时更新,如果一些优秀软件未包含,可留言提醒. 本文图片和内容均来自[风云社区 SCOEE],如想了解更多mac软件可上[风云社区 SCOEE]. 有需要其他类型的软件,可在评论区留言或私信于我[磨人的小妖精],以后也会不断更新更多专题资源. 有想要的软件资源,需要下载的也可以找我[磨人的小妖精]私

程序员开发工具汇总(Mac篇)

俗话说的好,工欲善其事必先利其器,拥有简捷的开发辅助工具能大大提高程序员的开发效率.小编给大家总结了一些常用的辅助开发的工具,希望大家能喜欢,闲话不多说,马上开始~! 1. JetBrains系列 说起Mac上的开发工具,当属JetBrains出品的一系列开发工具IDE了,包含几乎所有常用开发语言的IDE:GoLand.CLion.DataGrip.PyCharm.Rider.WebStorm.PhpStorm.IntelliJ IDEA.AppCode等! 2. Dash 开发者必备的API文

Golang (Go语言) Mac OS X下环境搭建 环境变量配置 开发工具配置 Sublime Text 2 【转】

一.安装Golang的SDK 在官网 http://golang.org/ 直接下载安装包安装即可.下载pkg格式的最新安装包,直接双击运行,一路按照提示操作即可完成安装. 安装完成后,打开终端,输入go,检测Golang SDK是否安装成功,如下显示,则表示安装成功: 你也可以输入go version 查看你所安装的Golang的版本 二.环境变量配置(GOPATH) GOPATH是用来告诉Golang命令和其他相关工具,在哪里可以找到你系统上的Go包目录. GOPATH是一个路径列表,类似于