iOS 外掛程式製作

來源:互聯網
上載者:User

iOS 外掛程式製作

概述

我們平時也使用了很多的xcode外掛程式,雖然官方對於外掛程式製作沒有提供任何支援,但是載入三方的外掛程式,預設還是被允許的.第三方的外掛程式,需要存放在 ~/Library/Application Support/Developer/Shared/Xcode/Plug-ins檔案夾中,尾碼名必須是.xcplugin (不過其實際上是一種bundle).
所以我們建立一個外掛程式工程,直接建立bundle工程即可,然後通過修改尾碼名為.xcplugin,將其放到~/Library/Application Support/Developer/Shared/Xcode/Plug-ins目錄中就可以了

第一個demo外掛程式功能:在xcode的edit菜單中加入一個叫做 測試菜單 的項目,當點擊的時候,彈出一個警告框,顯示一句話,完整的工程放在TestPluginBundle

詳細過程

建立Bundle工程 TestPluginBundle

工程名稱就是 TestPluginBundle

工程設定

外掛程式工程和普通的bundle工程還是有區別的,所以需要進行特殊的設定

首先是工程的plist檔案


添加 三項
XCPluginHasUI = NO
XC4Compatible = YES
DVTPlugInCompatibilityUUIDs 這是一個數組.數組內容字串,指示了該外掛程式相容的xcode版本,只有對應版本的xcode的UIID加入這個數組了,外掛程式才能被載入,否則,即使你將外掛程式放入xcode的外掛程式檔案夾,外掛程式也不會被載入的
那麼怎麼擷取你目前的版本的xcode的UUID呢?在terminal中輸入 defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID ,terminal會返回一串字串給你,這就是你的Xcode的DVTPlugInCompatibilityUUID.

接下來是 Build Setting了



Installation Build Products Location 設定為 ${HOME} [顯示的時候,顯示的是你的使用者目錄],這個是products的根目錄

Installation Directory 設定為 /Library/Application Support/Developer/Shared/Xcode/Plug-ins,這個是指定你的外掛程式安裝的目錄. 注意,這裡填入的其實是相對目錄,外掛程式的絕對目錄是這樣的,例如 /Users/yohunl/Library/Application Support/Developer/Shared/Xcode/Plug-ins/Alcatraz.xcplugin ,最後的絕對目錄是 Installation Build Products Location和Installation Directory的結合,這也是為什麼兩者都要設定的原因

Deployment Location 設定為 YES,這個是指示該工程不使用設定裡的build location,而是用Installation Directory來確定build後放哪兒

我們預設工程產生的相關檔案放在哪.都是 Build Locations指示的,通過Deployment Location 設定為 YES告訴工程,我們不使用這個預設的設定,而是我們自訂的

Wrapper extension 設定為 xcplugin,尾碼名必須為xcplugin,否則不會被載入

接下來就是外掛程式的實現過程了

在工程中添加一個檔案 ,名稱為 TestPluginBundle (當然,名字隨便什麼都可以),在其中添加代碼

@implementationTestPluginBundle+(void)pluginDidLoad:(NSBundle*)plugin{NSLog(@"外掛程式運行了!");[TestPluginBundlesharedInstance];}-(instancetype)init{self=[superinit];if(self){[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(didApplicationFinishLaunchingNotification:)name:NSApplicationDidFinishLaunchingNotificationobject:nil];}returnself;}-(void)didApplicationFinishLaunchingNotification:(NSNotification*)noti{[[NSNotificationCenterdefaultCenter]removeObserver:selfname:NSApplicationDidFinishLaunchingNotificationobject:nil];NSMenuItem*menuItem=[[NSAppmainMenu]itemWithTitle:@"Edit"];if(menuItem){[[menuItemsubmenu]addItem:[NSMenuItemseparatorItem]];NSMenuItem*actionMenuItem=[[NSMenuItemalloc]initWithTitle:@"測試菜單"action:@selector(doMenuAction)keyEquivalent:@""];[actionMenuItemsetTarget:self];[[menuItemsubmenu]addItem:actionMenuItem];}}-(void)doMenuAction{NSAlert*alert=[[NSAlertalloc]init];[alertsetMessageText:@"測試菜單運行"];[alertrunModal];}-(void)dealloc{[[NSNotificationCenterdefaultCenter]removeObserver:self];}+(instancetype)sharedInstance{staticidinstance;staticdispatch_once_tonceToken;dispatch_once(&onceToken,^{instance=[[selfalloc]init];});returninstance;}@end

ctrl+B來Build工程,查看路徑下/Library/Application Support/Developer/Shared/Xcode/Plug-ins,可以看到我們的外掛程式TestPluginBundle.xcplugin存在了,接下來,重啟xcode

點擊 測試菜單

可能你 會說,這樣雖然是起作用了,但是,難道開發一個外掛程式工程,沒打單步調試麼???,當然不是啊
編輯工程的scheme,將Executable設定為Xcode.app,意思是工程調試的時候掛載到xcode中

將Options下面的Core Location,XPC Services,View Debugging前面的勾都去掉,否則,你調試的時候,可能會直接crash

當設定完後,你的工程的scheme的表徵圖會從bundle表徵圖變為xcode的表徵圖

再運行(這裡是運行了,不是編譯了)
不出意外的話,會出現xode啟動另外一個xcode,接下來和你普通的調試工程就是一樣的了!

說了這麼多,其實只是想讓你明白一個外掛程式的初始化的配置,調試等

上面的過程,已經有國外大神製作成了一個 工程模板了,https://github.com/kattrali/Xcode-Plugin-Template其支援OC和Swift,當你安裝它後,會在建立工程時候,看到 Xcode Plugin模板,使用這個模板建立一個新工程,以上的配置等,就都設定好了,直接運行就是一個demo了.

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.