本文是投稿文章,作者: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 系列)