Xcode插件开发入门 —— JTTMagicLine

下列文章来自于我的印象笔记:https://app.yinxiang.com/shard/s32/sh/86ab7ac1-7507-4c24-bf71-47e3c3f3c217/324316d417864a09dcce657b3b919b8a,如果想看原生格式的话可以直接前往观看,谢谢。

Xcode插件开发入门 —— JTTMagicLine


一、准备工作



首先前往 kattrali/Xcode5-Plugin-Template 下载Xcode 5 Plugins开发的模板文件。最好git clone吧,方便日后更新。

将下载好的Git仓库复制到 ~/Library/Developer/Xcode/Templates/Project Templates/Application Plug-in/Xcode5 Plugin.xctemplate
,如果没有对应的子目录就手动创建,另外最后要把Git仓库命名为Xcode5 Plugin.xctemplate。

重启Xcode 5,然后新建一个工程,就可以看到Xcode Plugins类型的工程了:

?

原来的GitHub介绍页面中还包括了Usage, Notes, Plugin Debugging三部分。简单说下:

  • Usage: 就是模板工程中的作用——点击Xcode菜单中的File -> Do Action,弹出一个Hello World的对话框。
  • Notes:
    • 在插件的Xcode工程中也有一个Info.plist文件,设置该文件中的XCPluginHasUI为YES,可以关闭插件的功能。
    • 为了支持不同的Xcode,例如Xcode 5.0.2, Xcode 5.1.1等,需要设置Info.plist文件的DVTPlugInCompatibilityUUIDs选项,在其中加入不同的Xcode的UUID。查看Xcode UUID的方法:

      defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID

  • Plugin Debugging: 由于Plugin是无法即时运行看结果的,所以可以通过NSLog(...)查看输出是否正常,而log出来的结果记录在/var/log/system.log文件中,可以使用控制台程序或tail命令查看。

也可以参考这篇文章:Xcode5
Plugins 开发简介

?

二、Xcode插件:VVDocumenter



VVDocumenter
是由 @onevcat 喵神开发的一个Xcode插件,其作用是在Xcode中输入"///"后自动生成规范的文档注释,的确非常好用而且实用。

由于本人有着非常严重的代码洁癖,并且希望代码之间有着清晰的模块关系,所以常常习惯用一整行的"////////////..."来分隔各个代码模块,从而保持美观。例如:

单纯的#pragma mark - 已经让我欲求不满了。

受到VVDocumenter的启发,决心参考喵神的代码自己写一个输入"mgl"后生成一整行"////////////..."的Xcode插件 —— JTTMagicLine。(这是一个有情怀的插件名)

由于JTTMagicLine的代码和整体架构都是参考了喵神的VVDocumenter的代码,所以本小节的标题直接给了VVDocumenter。

?

三、JTTMagicLine工作原理



在看了半遍VVDocumenter的源码后,大概弄懂了其原理,然后仿照着弄了个JTTMagicLine。

接下来说下JTTMagicLine的工作原理(和VVDocumenter的工作原理大致相同):

  • 在插件程序启动后,开始监听NSTextView中文字改变的消息,也就是监听Xcode中编辑区中文字改变的消息。
  • 当Xcode编辑区文字改变时,获取鼠标当前光标所在行的文字,并和触发替换事件的字符串(例如mgl)做正则匹配
  • 如果匹配成功,那么新建一个键盘事件类来模拟各种键盘事件:
    • Command + delete: 删除该行
    • Command + V: 粘贴要替换的字符串,这里是"///////////////..."
    • return: 回车 + 换行,方便懒人开发者,例如我
    • 还原paste board中的内容和各种参数等

?

四、代码



已经开源到GitHub中,由于参考了喵神的代码,所以代码逻辑还是非常清晰的,有兴趣就Download来看看吧:guesn10000/JTTMagicLine

代码中已经写了注释,还是比较易懂的。

工程中有一个TODO.h,明显还是有很多问题或功能没有完善的,例如设置面板、Command + Z的问题等,我会继续完善的。

?

五、Build and Use xcplugin



在编写好代码后,Build一下,可以在 ~/Library/Application Support/Developer/Shared/Xcode/Plug-ins
目录下看到生成的xcplugin文件:

如果你嫌每次都要跳到那个目录太麻烦或者记不住插件目录的路径的话,可以像我一样弄个alias到.zshrc或.bash_profile中(具体看不同的shell吧):

alias cdxcplugins=‘cd ~/Library/Application\ Support/Developer/Shared/Xcode/Plu$
alias cdoxcplugins=‘cdxcplugins;open .‘

?

好吧,重启Xcode。

在Xcode的文字编辑区中输入mgl,啦啦:

大功告成。

?

六、不足



其实最后一小节可以叫Issue,该插件在我写这篇博文的时候用了半天来搞,还有很多功能没有完善,我记住TODO.h中了:

#ifndef JTTMagicLine_TODO_h
#define JTTMagicLine_TODO_h

/*
 1.增加设置面板,可以设置替换的字符串和触发替换事件的字符串,关闭该插件的功能等
 2.修复Command + Z无法恢复某行字符串的问题,参考VVDocumenter
 3.增加对Xcode 6的支持
 */

#endif

我会继续完善的,例如:先回头深入看下正则表达式再去看喵神的源码,然后再回来改进JTTMagicLine等。这个还是看心情吧,因为这个插件暂时性地满足了我的需求。

?



为兴趣而Code,多尝试新的东西。


时间: 2024-10-01 02:47:16

Xcode插件开发入门 —— JTTMagicLine的相关文章

17-xcode6插件开发入门

Xcode提供了所有你创建一个App需要的功能.但是由于其不开源以及没有制作Xcode-Plugin相关的文档,在我们需要添加一些自己的想法和功能的时候变得缺乏灵活性. 但是我们可以通过一些非官方的手段来扩展我们自己的Xcode,并且分享给别人使用. Xcode Plug-in能做什么 太多了,我们可以自动生成代码注释(VVDocumenter),我们可以在代码编辑器中直接显示我们初始化的UIColor的颜色(ColorSense-for-Xcode),我们也可以在代码编辑器中直接显示我们要添加

Chrome插件开发入门(二)——消息传递机制

Chrome插件开发入门(二)——消息传递机制 由于插件的js运行环境有区别,所以消息传递机制是一个重要内容.阅读了很多博文,大家已经说得很清楚了,直接转一篇@姬小光 的博文,总结的挺好.后面附一个自己写过的demo,基本就对消息传递能够熟悉了. 在开发 Chrome 扩展时经常需要在页面之间进行通讯,比如 background 与 content script 之间,background 与 popup 之间等等,本文结合官方文档中的例子介绍了 chrome 扩展开发中消息传递的基本实现. 一

Xcode插件开发案例教程

引言 在平时开发过程中我们使用了很多的Xcode插件,虽然官方对于插件制作没有提供任何支持,但是加载三方的插件,默认还是被允许的.第三方的插件,存放在 ~/Library/Application Support/Developer/Shared/Xcode/Plug-ins文件夹中,后缀名必须是.xcplugin ,其实际上是一种bundle.所以我们创建一个插件工程,直接创建bundle工程即可.然后通过修改后缀名为.xcplugin,将其放到~/Library/Application Sup

Vue插件开发入门

相对组件来说,Vue 的插件开发受到的关注要少一点.但是插件的功能是十分强大的,能够完成许多 Vue 框架本身不具备的功能. 大家一般习惯直接调用现成的插件,比如官方推荐的 vue-router.vue-touch 等. 下面就看一下 Vue 的插件开发如何入门. 首先我们简单回顾一下 Vue.js 官方文档中对于插件开发的描述. Vue 的插件必须提供一个公开方法 install,该方法会在你使用该插件,也就是 Vue.use(yourPlugin) 时被调用,相当于是一个插件的注册或者声明.

K3BOS插件开发入门教程

  本文主要针对初学者,介绍BOS插件开发与制作的基本流程与步骤,为入门所用. 以一个简单的插件开发需求为例:比如想在新开发的BOS单据上,增加一个自定义菜单按钮,按钮标题为"My BOS MenuBarButton",位置放在编辑菜单下的驳回审核按钮之后,在工具栏上的退出按钮之前:当点击该自定义按钮时弹出提示框"Hello,This Is My First BOS Bill InterFace!".针对此需求,让我们一起看看如何一步一步通过BOS插件来实现: [第

Xcode 插件开发

我最近一年来都在开发ios应用,不过感觉公司的app维护起来非常麻烦. 因为公司要为很多个企业订做app,每个app的功能基本相同,只是界面上的一些图片和文字要换掉,功能也有一些小改动.考虑到代码维护的问题,比较好的做法就是只维护一份代码,然后用不同的配置文件来管理各个target的内容. 当工程里达到上百个target的时候,为工程新增文件就成了一件非常痛苦的事情. 我必须一个一个地去勾选所有的targets,往往要花上几分钟的时间来重复无聊的操作,既浪费时间又影响心情,而Xcode居然没有自

jQuery插件开发入门

Require.js中使用jQuery 插件请查看http://www.css88.com/archives/4826 扩展jQuery插件和方法的作用是非常强大的,它可以节省大量开发时间.这篇文章将概述jQuery插件开发的基本知识,最佳做法和常见的陷阱. 入门 编写一个jQuery插件开始于给jQuery.fn加入??新的功能属性,此处添加的对象属性的名称就是你插件的名称: jQuery.fn.myPlugin =function(){ //你自己的插件代码 }; 用户非常喜欢的$符号哪里去

chrome插件开发入门

1.参考文档链接 chrome浏览器插件开发官网教程 https://developer.chrome.com/extensions/getstarted foege工具,能够使用一份代码同时生成firfox,chrome,ie的插件,但是目前该项目已经不再维护 http://legacy-docs.trigger.io/en/v1.4

Xcode插件开发

一.安装模板 1.git clone https://github.com/kattrali/Xcode-Plugin-Template.git 2.cd Xcode-Plugin-Template 3.mkdir ~/Library/Developer/Xcode/Template 4.mv ./Project\ Templates/ ~/Library/Developer/Xcode/Template\ 5.重启XCODE后,会看到模板中多出了OS X-Application Plug-in