Xcode6插件开发
来源:互联网 发布:在线客服聊天软件 编辑:程序博客网 时间:2024/06/05 16:19
工欲善其事必先利其器,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通知是加载完这个插件后发出的。我们可以做一些我们想要做的事情。
- (instancetype)init{ if(self = [super init]){ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidFinishLaunching:) name:NSApplicationDidFinishLaunchingNotification object:nil]; } return self;}
如果你将接收通知的名字写成nil,将代表你将接收所有Xcode发出的通知。比如切换Xcode,切换导航栏都会调用通知
[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(applicationDidFinishLaunching:)name:nil object:nil];
给Xcode导航栏添加Menu分类
Menu *menu = [[NSMenu allocWithZone:[NSMenu menuZone]] initWithTitle:@"Hello"];NSMenuItem *newItem = [[NSMenuItem allocWithZone:[NSMenu menuZone]] initWithTitle:@"Hello" action:@selector(<#selector#>) keyEquivalent:@""]; [[NSApp mainMenu] addItem:newItem];
顶部的菜单栏就会出来。 我们可以为newItem分配子subMenu(子Menu)
newItem = [[NSMenuItem allocWithZone:[NSMenu menuZone]] initWithTitle:@"Haha"action:NULL keyEquivalent:@"T"]; [newItem setTag:EmptyTrashItemTag]; [newItem setTarget:self]; [newItem setAction:@selector(Haha:)]; [newMenu addItem:newItem];
第一个小插件完工.
其他通知补充
NSMenuDidChangeItemNotification // 打开新Project
IDEIndexDidChangeStateNotification // 切换Xcode
NSTextDidChangeNotification // 监听Xcode的写入
IDEEditorDocumentDidChangeNotification // 监听工作路径
还有很多需要不断的挖掘~~
插件的优缺点。
插件固然好,但插件多了会令Xcode变的非常卡。因为每个人实现的插件方式不一样,并且有些是非常浪费效率的。 有些比较坑的插件还很容易让Xcode经常卡死.
所以大家尽可能的选择一款比较出名的插件。
- Xcode6插件开发
- iOS:Xcode6插件下载
- Xcode6 插件单
- xcode6 插件制作
- iOS8开发~Xcode6下载
- xcode6.3跟Xcode6.4插件失效解决方法
- iOS开发Xcode6添加.pch
- xcode6.1插件安装及安装问题
- 关于xcode6 插件的管理使用
- Xcode6.2插件无效的解决方法
- 升级Xcode6.3插件失效解决办法
- 【转】升级Xcode6.3插件失效解决办法
- Xcode6以上不能安装插件管理工具解决办法
- xcode6 自动添加注释插件攻略
- Xcode6无法安装VVDocumenter插件的解决方法
- xcode6.4 插件不能用,解决办法。
- Xcode6无法安装VVDocumenter插件的解决方法
- xcode6
- Android笔记-ViewPager禁止滑动的方法
- 深入分析Java Web技术内幕 笔记4
- [背包问题][第三阶段-初见dp][HDU-2504]Bone Collector
- jQuery 遮罩
- JavaScript事件
- Xcode6插件开发
- 一根有斑点的香蕉到底有多厉害?绝对长知识
- Linux串口分析open
- PB中数据窗口“Update Properties”的设置
- NYOJ 60 谁获得了最高奖学金(结构体的应用)
- 三次样条差值-matlab通用程序
- 【C++ Primer】【学习笔记】【第八章】标准IO库之:输出缓冲区的管理
- ServletContext和ServletContextListener的关系
- 任务调度开源框架Quartz动态添加、修改和删除定时任务