本文是投稿文章,作者: everettjf
代码: https://github.com/everettjf/XBookmark
效果
menu
首先要安装插件管理器 Alcatraz ,搜索XBookmark并安装,重启Xcode后就可以在Edit菜单中找到以下功能啦。
对应代码行,按F3可增加、删除书签
Shift+F3,可显示书签列表
Command+F3,下一个书签
Shift+Ctrl+F3,上一个书签
初入iOS开发,发现自己以前在Visual Studio中常用的书签功能,Xcode中竟然没有。网上找了一阵子,大概有以下替代方法:
使用断点(Disabled Breakpoint)
使用插件XToDo,增加标签BOOKMARK,并在想加书签的代码行增加注释 BOOKMARK
使用插件XcodeBookmark(不是本文说的XBookmark),但此插件貌似不支持Xcode7,而且原理仍然是辅助增加断点。
目前找到了这3种方法,但感觉都不理想。没法快速进行上一个书签、下一个书签切换,没法增加书签注释。
于是,想自己开发一个,就叫做 XBookmark 吧。
开发中大概看了以下几篇文章。
Xcode插件的文章:
http://studentdeng.github.io/blog/2014/02/21/xcode-plugin-fun/
http://www.poboke.com/study/write-a-xcode-plugin-to-auto-select-all-targets.html
http://www.onevcat.com/2013/02/xcode-plugin/
Mac开发的文章:
http://www.raywenderlich.com/17811/how-to-make-a-simple-mac-app-on-os-x-10-7-tutorial-part-13
还看了几个插件的源码。
安装模板、创建工程
在 Alcatraz 中的 Templates 中搜索 Xcode Plugin。安装后从此模板创建工程。
增加菜单
NSMenuItem?*menuItem?=?[[NSApp?mainMenu]?itemWithTitle:@"Edit"]; if?(menuItem)?{ ????[[menuItem?submenu]?addItem:[NSMenuItem?separatorItem]]; ???? ????{ ????????NSMenuItem?*actionMenuItem?=?[[NSMenuItem?alloc]?initWithTitle:@"Toggle?Bookmark"?action:@selector(toggleBookmark)?keyEquivalent:f3]; ????????[actionMenuItem?setKeyEquivalentModifierMask:0]; ????????[actionMenuItem?setTarget:self]; ????????[[menuItem?submenu]?addItem:actionMenuItem]; ????} ????//...
IDESourceCodeEditor*?editor?=?[XcodeUtil?currentEditor]; NSTextView*?textView?=?editor.textView; if?(nil?==?textView) ????return; ???? NSRange?range?=?[textView.selectedRanges[0]?rangeValue]; NSUInteger?lineNumber?=?[[[textView?string]substringToIndex:range.location]componentsSeparatedByString:@"/n"].count; //?length?of?"file://"?is?7 NSString?*sourcePath?=?[[editor.sourceCodeDocument.fileURL?absoluteString]?substringFromIndex:7]; XBookmarkEntity?*bookmark?=?[[XBookmarkEntity?alloc]initWithSourcePath:sourcePath?withLineNumber:lineNumber]; [[XBookmarkModel?sharedModel]toggleBookmark:bookmark]; //...
发布到 Alcatraz
挺简单,修改配置文件,创建一个 Pull Request 就可以。
见 https://github.com/supermarin/alcatraz-packages 的README。
目前仅是完成了基本功能,还有几个需要优化和完善的地方。
定位代码行。(代码来自XToDo的代码,但有些情况下定位速度慢。需要查找原因解决)
书签标识。代码行前面显示书签符号,对号之类的。
注释功能。(增加书签注释功能)
Mnemonic 书签。(模仿 IntelliJ 系列)