自定义Xcode插件实现
来源:互联网 发布:iptv管理系统源码下载 编辑:程序博客网 时间:2024/05/21 22:52
支持原创,更多内容欢迎关注作者博客:
http://www.china10s.com/blog/?p=330
在使用xcode的过程中,我们经常会遇到重复繁杂的操作。而作为程序员,我们要实现的就是用程序去替代人类的双手,让人能提高效率,产生更大价值。
于是我想到了Xcode的插件,在网上google了一番之后,发现虽然繁杂,但是鲜有能够完全满足个人需求的插件,那既然如此,何不自己动手写一个插件呢。于是乎现在就开始行动:
第一步,下载Plugin模板
插件的创建需要一系列的设置,都是一些重复的工作,在这里,有现成的插件模板,可以给我们一键生成插件:
https://github.com/kattrali/Xcode-Plugin-Template
将下载下来的模板放到目录下 ~/Library/Developer/Xcode/Templates/Project Templates/Application Plug-in/Xcode Plugin.xctemplate,如果没有该目录,创建即可。
接下来需要重启Xcode,在创建新的工程的时候,就可以看到你想要的工程模板:
第二步,查询出你xcode的版本号DVTPlugInCompatibilityUUID
由于你的Xcode版本并没有写入程序当中,因此需要查询出来
read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID
并手动填入刚创建的Xcode插件工程的info.plist中去。
我们此次插件编写的目的是实现一个在Xcode任一界面,用Shift+F的快捷方式打开Finder文件目录,定位到当前显示的文件。
第三步,开始编写插件业务逻辑
由于Xcode的接口并没有开放,关于插件的编写并没有可以作为指导的文档。因此我们只能通过监听事件的方式来获取程序运行状态,并挨个查看事件可能带来的通知。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationLog:) name:nil object:nil];
我们会监听到,当文件编辑器切换文件的过程中,会触发如下事件:
if([notify.name containsString:@"IDENavigableItemCoordinatorObjectGraphChangeNotification"] ){
id items = [notify.userInfo objectForKey:@"IDEChangedItems"];
id item = [items firstObject];
if([item respondsToSelector:@selector(fileURL)]){
NSURL *url = [item performSelector:@selector(fileURL)];
NSLog(@"%@",url);
}
id items = [notify.userInfo objectForKey:@"IDEChangedItems"];
id item = [items firstObject];
if([item respondsToSelector:@selector(fileURL)]){
NSURL *url = [item performSelector:@selector(fileURL)];
NSLog(@"%@",url);
}
}
我们将获取到的文件目录保存下来,在程序里增加Shift+F功能打开Finder窗口的功能:
NSMenuItem *actionMenuItem = [[NSMenuItem alloc] initWithTitle:@"Do Action" action:@selector(doMenuAction) keyEquivalent:@"F"];
[actionMenuItem setKeyEquivalentModifierMask:NSAlphaShiftKeyMask ];
打开Finder:
// Sample Action, for menu item:
- (void)doMenuAction
{
[[NSWorkspace sharedWorkspace] selectFile:strUrl inFileViewerRootedAtPath:nil];
- (void)doMenuAction
{
[[NSWorkspace sharedWorkspace] selectFile:strUrl inFileViewerRootedAtPath:nil];
}
注意:
如果开发插件过程中,错误插件已经被安装上去,每次打开Xcode程序会崩溃,可以在一下目录中删除该插件即可。
本文中涉及的项目,已上传Github欢迎下载:
https://github.com/china10s/PBFPluginFileFinder
0 0
- 自定义Xcode插件实现
- Xcode插件KSImageNamed添加自定义方法
- phonegap自定义插件实现
- Xcode插件Injection实现代码注入
- xcode自定义编写插件----改变c++/c注释风格
- 自定义 smarty 插件 实现 实例
- 自定义jQuery插件实现分页
- xcode 插件
- Xcode插件
- xcode插件
- xcode插件
- Xcode插件
- xcode插件
- xcode 插件
- xcode 插件
- XCode 插件
- Xcode插件
- Xcode插件
- Jenkins:Jenkins服务的搭建
- 使用Stacktrace处理异常
- Linux下模块编译 MODPOST 0
- Mysql常用命令
- LeetCode 058 Length of Last Word
- 自定义Xcode插件实现
- Code::Blocks 12.11 error: ‘nullptr’ was not declared in this scope&GNU GCC -std=gnu++0x
- 达达日志收集系统
- Java IO之Socket通信
- Arborescent曲线
- mybatis不能插入,查询中文的问题以及可能的解决办法,以及Mysql数据库编码的设置
- Flume日志收集分层架构应用实践
- Git 笔记
- 可引导MBR的利用