自定义Xcode插件实现


支持原创,更多内容欢迎关注作者博客:

 http://www.china10s.com/blog/?p=330


在使用xcode的过程中,我们经常会遇到重复繁杂的操作。而作为程序员,我们要实现的就是用程序去替代人类的双手,让人能提高效率,产生更大价值。
于是我想到了Xcode的插件,在网上google了一番之后,发现虽然繁杂,但是鲜有能够完全满足个人需求的插件,那既然如此,何不自己动手写一个插件呢。于是乎现在就开始行动:
 

第一步,下载Plugin模板

插件的创建需要一系列的设置,都是一些重复的工作,在这里,有现成的插件模板,可以给我们一键生成插件:
将下载下来的模板放到目录下 ~/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欢迎下载:
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值