自定义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);
    }
}
 
我们将获取到的文件目录保存下来,在程序里增加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];
}
 
 
注意:
如果开发插件过程中,错误插件已经被安装上去,每次打开Xcode程序会崩溃,可以在一下目录中删除该插件即可。
 
本文中涉及的项目,已上传Github欢迎下载:
https://github.com/china10s/PBFPluginFileFinder
 

0 0
原创粉丝点击