制作一个Mac APP:XcodeExtension

栏目: IOS · 发布时间: 5年前

内容简介:作为一个iOS developer 突然想尝试Mac开发,这是我第一个Mac APP这个软件目前包含以下功能在创建工程的时候选择macOS->Cocoa App

作为一个iOS developer 突然想尝试Mac开发,这是我第一个Mac APP

这个软件目前包含以下功能

  • ConvertFromCase 把选择的下划线内容变为驼峰
  • DeleteEmptyLines 删除选中的空行
  • SortLines 排列选中的行
  • JsonToModel 把Json数据转成Swift模型,会把下划线命名变为驼峰

如何使用

  1. 下载 最新的版本
    制作一个Mac APP:XcodeExtension
  2. 解压之后可以把应用移到应用程序中,方便下次使用!
    制作一个Mac APP:XcodeExtension
  3. 打开应用!
    制作一个Mac APP:XcodeExtension
  4. 在安全与隐私设置中点仍要打开
    制作一个Mac APP:XcodeExtension
  5. 打开的界面可以把Json数据转成Swift模型,会把下划线命名变为驼峰。在左边放入Json,点击转换。
    制作一个Mac APP:XcodeExtension
  6. 在设置中选择扩展,勾上这些功能。
    制作一个Mac APP:XcodeExtension
    制作一个Mac APP:XcodeExtension
  7. 打开Xcode,在菜单栏中Editor中就可以看到这些插件
    制作一个Mac APP:XcodeExtension

创建Cocoa APP

在创建工程的时候选择macOS->Cocoa App

制作一个Mac APP:XcodeExtension

Xcode 插件

Apple在Xcode8的时候引入插件开发,虽然很弱鸡,但是还是能实现部分功能的。

创建target

新建target 选择macOS->Xcode Source Editor Extension

制作一个Mac APP:XcodeExtension

XcodeKit

创建名字 DeleteEmptyLines 的target会有以下文件

制作一个Mac APP:XcodeExtension
  • info.plist 文件中是target的配置
制作一个Mac APP:XcodeExtension

XCSourceEditorCommandName 这里可以改名字

  • SourceEditorExtension.swift 中实现了 XCSourceEditorExtension 都是可选方法
    • extensionDidFinishLaunching 插件在启动的时候执行
    • commandDefinitions 这个地方会覆盖 info.plist 的设置
  • SourceEditorCommand.swift 中实现了 XCSourceEditorCommand
    • perform 一旦触发插件的命名,就会触发此方法,参数 invocation:XCSourceEditorCommandInvocation 包含了文本缓存的内容 buff
    • buff.selections 就是选中文本的范围, buff.lines 是每一行的文本,我们可以改变它来改变文本的内容

实现第一个插件-删除所选代码中的空行

增加以下代码

extension XCSourceEditorCommandInvocation {
    var selections: [XCSourceTextRange] {
        return buffer.selections as! [XCSourceTextRange]
    }
    func deleteEmptyLines() {
        selections.forEach { (selection) in
            let start = selection.startLine
            let end = selection.endLine
            let emptyIndexs = (start...end)
                .filter({ (index) -> Bool in
                    (buffer.lines[index] as! String).match(regular: "^\\s*$")
                })
            buffer.lines.removeObjects(at: IndexSet(emptyIndexs))
        }
    }
}
extension String {
    func match(regular: String) -> Bool {
        return range(of: regular, options: .regularExpression) != nil
    }
}
extension XCSourceTextRange {
    var startLine: Int {
        return start.line
    }
    var endLine: Int {
        return end.line - (end.column == 0 ? 1 : 0)
    }
}
复制代码

SourceEditorCommand 中修改 perform 方法

func perform(with invocation: XCSourceEditorCommandInvocation, completionHandler: @escaping (Error?) -> Void ) {
    defer { completionHandler(nil) }
    invocation.deleteEmptyLines()
}
复制代码

测试

选择要测试的target

制作一个Mac APP:XcodeExtension

选择Xcode

制作一个Mac APP:XcodeExtension

会有一黑色的Xcode用于测试

制作一个Mac APP:XcodeExtension

任意打开一个项目

  1. 选中一段代码
  2. 在菜单栏选择 Editor-> DeleteEmptyLines -> Source Editor Command

如果不是这个命名就这样找: Editor —> Extension bundle display name -> command name

Json转model界面

在iOS开发的时候,由于后台返回的数据用的是下划线命名法,而APP使用的是驼峰命名法,于是我做了一个界面来处理。

界面

选择工程中的 Main.storyboard ,在View Controller中拖入两个TextView,和一个button

制作一个Mac APP:XcodeExtension

调整控件的样式,加上布局约束。写成喜欢的样式-,-

制作一个Mac APP:XcodeExtension

绑定这些控件到ViewController代码中

制作一个Mac APP:XcodeExtension

代码

convert 方法中写转换的代码就行了,代码较长放在文章末尾的GitHub链接。

有一个细节需要注意,macOS在输入引号的时候会自动转为Json不能解析的格式,所以需要设置 NSTextViewisAutomaticQuoteSubstitutionEnabledfalse


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

增长黑客实战

增长黑客实战

范冰、张溪梦 / 电子工业出版社 / 2017-6 / 59.00

《增长黑客实战》围绕硅谷前沿的增长黑客职业,讲解增长理念的树立、增长团队的组建、流程制度的创立、技术营销的运用等团队运营成功实战经验。作者以自身创业经验为蓝本,结合真实案例,并融入一些伟大创业者的智慧,创建了一套思考、验证和追求卓越增长的理论体系。那些想要验证自己的创意、解决实际增长问题和拥有成功事业的人,可以将《增长黑客实战》当成一套清晰的实践指南、一幅组建增长团队的指导蓝图,或者一套值得反复玩......一起来看看 《增长黑客实战》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具