工欲善其事必先利其器,Xcode是我们做iOS Dev必须掌握的一款开发工具。

Xcode本身也是一门Cocoa程序,与其来说它是一个Cocoa程序,是不是意味着,我们可以去动态去让它做某件事,或者监听它的某个事件呢?答案是:当然可以。

Xcode每次打开的时候都会去加载这个目录底下的文件,~/Library/Application Support/Developer/Shared/Xcode/Plug-ins . 这个文件夹底下就是装着所有的Xcode插件。

那么插件究竟是什么?

插件就是在Xcode基础之上,由第三方个人写的一些对Xcode功能的拓展,好用的插件比如,文档注释的

VVDocumenter-Xcode

https://github.com/onevcat/VVDocumenter-Xcode

图片有提醒的 KSImageNamed插件,还有鄙人写的快速跳转到 https://github.com/MakeZL/ZLGotoSandboxPlugin 等等很多好用的。

那么插件是如何做出来的呢?

其实做插件最好有一些Cocoa的知识。

我们做一个Hello plugin开始

你会看到一个空的项目,你打开info.plist文件。

需要配置参数

关于Info.plist参数

XC4Compatible = YES, // Xcode 4 编译器

XC5Compatible = YES, // Xcode 5 编译器

XCPluginHasUI = NO, // NO让插件有效

XCGCReady = YES,

DVTPlugInCompatibilityUUIDs = [A2E4D43F-41F4-4FB9-BB94-7177011C9AED,AD68E85B-441B-4301-B564-A45E4919A6AD,C4A681B0-4A26-480E-93EC-1218098B9AA0] // Xcode兼容的UUID

Note: 这样已经配置成功一半了,但还需要配置Build Settings里面的属性才行~

配置:Build Settings

Deployment要配置几个地方

不要急,我把需要改的地方列出来。

改的地方

1.Deployment Location YES

2.Installation Build Products Location 改为 ${HOME}

3.Installation Directory /Library/Application Support/Developer/Shared/Xcode/Plug-ins // 插件地址

4.Skip install NO

恭喜你,已经完成 85%了。

还需要配置Build Settings 里面的 Packaging

1. Warpper Extension 改为 xcplugin

ok! 终于配置完了,接下来,我们要创建一个类,继承NSObject。

在.m中实现

+ (void)pluginDidLoad:(NSBundle *)plugin;

pluginDidLoad就像ViewDidLoad一样。界面一创建完,就调用,pluginDidLoad是插件加载完调用。

好了,我们重启下Xcode。 打开控制台, -> console.

就会看到 Hello world!的字眼了。

一般插件我们都会创造一个单例对象。

监听Xcode发出的通知 ,

NSApplicationDidFinishLaunchingNotification通知是加载完这个插件后发出的。我们可以做一些我们想要做的事情。

  1. - (instancetype)init{
  2. if(self = [super init]){
  3. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidFinishLaunching:) name:NSApplicationDidFinishLaunchingNotification object:nil];
  4. }
  5. return self;
  6. }

如果你将接收通知的名字写成nil,将代表你将接收所有Xcode发出的通知。比如切换Xcode,切换导航栏都会调用通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidFinishLaunching:) name:nil object:nil];

给Xcode导航栏添加Menu分类

  1. Menu *menu = [[NSMenu allocWithZone:[NSMenu menuZone]] initWithTitle:@"Hello"];
  2. NSMenuItem *newItem = [[NSMenuItem allocWithZone:[NSMenu menuZone]] initWithTitle:@"Hello" action:@selector(<#selector#>) keyEquivalent:@""];
  3. [[NSApp mainMenu] addItem:newItem];

顶部的菜单栏就会出来。 我们可以为newItem分配子subMenu(子Menu)

  1. newItem = [[NSMenuItem allocWithZone:[NSMenu menuZone]] initWithTitle:@"Haha"action:NULL keyEquivalent:@"T"];
  2. [newItem setTag:EmptyTrashItemTag];
  3. [newItem setTarget:self];
  4. [newItem setAction:@selector(Haha:)];
  5. [newMenu addItem:newItem];

第一个小插件完工.

其他通知补充

NSMenuDidChangeItemNotification // 打开新Project

IDEIndexDidChangeStateNotification // 切换Xcode

NSTextDidChangeNotification // 监听Xcode的写入

IDEEditorDocumentDidChangeNotification // 监听工作路径

还有很多需要不断的挖掘~~

插件的优缺点。

插件固然好,但插件多了会令Xcode变的非常卡。因为每个人实现的插件方式不一样,并且有些是非常浪费效率的。 有些比较坑的插件还很容易让Xcode经常卡死.

所以大家尽可能的选择一款比较出名的插件。

Xcode6插件开发的更多相关文章

  1. iOS-提高iOS开发效率的方法和工具

    提高iOS开发效率的方法和工具 介绍 这篇文章主要是介绍一下我在iOS开发中使用到的一些可以提升开发效率的方法和工具. IDE 首先要说的肯定是IDE了,说到IDE,Xcode不能跑,当然你也可能同时 ...

  2. <转>提高iOS开发效率的方法和工具

    介绍 这篇文章主要是介绍一下我在iOS开发中使用到的一些可以提升开发效率的方法和工具. IDE 首先要说的肯定是IDE了,说到IDE,Xcode不能跑,当然你也可能同时在使用AppCode等其他的ID ...

  3. 提高iOS开发效率的方法和工具

    http://www.cocoachina.com/ios/20150717/12626.html 介绍 这篇文章主要是介绍一下我在iOS开发中使用到的一些可以提升开发效率的方法和工具. IDE 首先 ...

  4. iOS开发——实用篇&提高iOS开发效率的方法和工具

    提高iOS开发效率的方法和工具 介绍 这篇文章主要是介绍一下我在iOS开发中使用到的一些可以提升开发效率的方法和工具. IDE 首先要说的肯定是IDE了,说到IDE,Xcode不能跑,当然你也可能同时 ...

  5. JavaScript学习笔记(四)——jQuery插件开发与发布

    jQuery插件就是以jQuery库为基础衍生出来的库,jQuery插件的好处是封装功能,提高了代码的复用性,加快了开发速度,现在网络上开源的jQuery插件非常多,随着版本的不停迭代越来越稳定好用, ...

  6. jira的插件开发流程实践

    怎么开头呢,由于自己比较懒,博客一直不怎么弄,以后克己一点,多传点自己遇到的问题和经历上来,供自己以后记忆,也供需要的小伙伴少走点弯路吧 最近公司项目需要竞标一个运维项目,甲方给予了既定的几种比较常用 ...

  7. Vue插件开发入门

    相对组件来说,Vue 的插件开发受到的关注要少一点.但是插件的功能是十分强大的,能够完成许多 Vue 框架本身不具备的功能. 大家一般习惯直接调用现成的插件,比如官方推荐的 vue-router.vu ...

  8. 【原创】记一次Project插件开发

    一.开发背景 最近在使用微软的Office Project 2010 进行项目管理,看到排的满满的计划任务,一个个地被执行完毕,还是很有成就感的.其实,不光是在工作中可以使用Project进行项目进度 ...

  9. JavaScript学习总结(四)——jQuery插件开发与发布

    jQuery插件就是以jQuery库为基础衍生出来的库,jQuery插件的好处是封装功能,提高了代码的复用性,加快了开发速度,现在网络上开源的jQuery插件非常多,随着版本的不停迭代越来越稳定好用, ...

随机推荐

  1. Android中shape属性详解

    一.简单使用 刚开始,就先不讲一堆标签的意义及用法,先简单看看shape标签怎么用. 1.新建shape文件 首先在res/drawable文件夹下,新建一个文件,命名为:shape_radius.x ...

  2. ios 利用Reveal来调试界面1 --模拟器(步骤详解)

    Reveal是一个程序界面调试工具,可以调试iOS apps和tvOS apps.使用Reveal,我们可以在开发时动态地查看和修改应用程序的界面.避免每次修改UI的时候都要重新运行程序.接下来按照规 ...

  3. (转)tar 解压缩命令

    tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个.下面的 ...

  4. TCP参数设置

    我们这里应用的是CentOS5.3,并内核使用的是2.6.18-128.el5PAE #1 SMP .修改部分TCP ,有的是为了提高性能与负载,但是存在降低稳定性的风险.有的则是安全方面的配置,则有 ...

  5. Gstreamer 数据流线程(GstTask / GstTaskPool)分析

    作者:fengcc 原创文章 转载请注明出处 GStreamer 是一个基于流水线的多媒体框架,基于 GObject,以 C 语言写成. 凭借 GStreamer,程序员可以很容易地创建各种多媒体功能 ...

  6. 浅析@Deprecated

    如果有一个方法你觉得不合适,想要删除,但是别人已经引用了很多次,删除了会对他人的工作产生影响,那该怎么办? 加入@Deprecated注解即可,看代码: @Test public void test1 ...

  7. oracle口令管理之允许某个用户最多尝试三次登录

    如果一个用户连续三次登录失败,则锁定该用户两天,两天之后该用户才能重新登录. 创建profile文件: 更新账户: 三次登录失败后用户就会被锁定: 用户锁住之后要怎么给他解锁: 解锁之后就可以正常登录 ...

  8. WSDL阅读方法

    我们以天气预报WebService服务为例,来看看怎么阅读一个wsdl文档. 打开一个wsdl文档后,先看底部. binding在这里: portType在这里: 好了,看了上面的,我们来说说wsdl ...

  9. 能发送http请求(get,post)的工具

    能发送http请求(get,post)的工具, 1.  fiddler 前端自己模拟发送请求 2.  其他 链接:https://www.zhihu.com/question/20367546/ans ...

  10. kvm安装及配置

     yum install kvm libvirt python-virtinst qemu-kvm virt-viewer bridge-utils virt-install 修改网卡信息 /etc/ ...