插件的简介
- Xcode插件,必须是与Xcode是同一个级别的应用,也就是必须也是mac OS APP
- 改变Xcode常规的操作被称为插件
- Xcode著名的插件文档注释,颜色提示,图片选择等等...
插件的开发步骤
- 需要配置项目中的pist文件
- 需要修改和添加plist文件只中的多处
- 操作繁琐,步骤麻烦
- 这时候,有一个专门用来开发插件的插件Xcode Plugin
插件
- 在新建项目中的OS X中多了一个Xcode Plugin模板
- 选择模板中的Xcode Plugin进行开发
模板分析
- (id)initWithBundle:(NSBundle *)plugin
{
if (self = [super init]) {
// reference to plugin's bundle, for resource access
// 应用插件的资源包,用于资源访问
// 在NSObject_Extension中初始化的时候设置
self.bundle = plugin;
// 发送Xcode程序启动的通知
// 调用didApplicationFinishLaunchingNotification方法
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(didApplicationFinishLaunchingNotification:)
name:NSApplicationDidFinishLaunchingNotification
object:nil];
}
return self;
}
/**
* 当Xcode启动的时候调用
*
*/
- (void)didApplicationFinishLaunchingNotification:(NSNotification*)noti
{
// 接收到通知后移除通知
[[NSNotificationCenter defaultCenter] removeObserver:self name:NSApplicationDidFinishLaunchingNotification object:nil];
// 获取到Edit菜单
NSMenuItem *menuItem = [[NSApp mainMenu] itemWithTitle:@"Edit"];
if (menuItem) {
// 添加一条分割线
[[menuItem submenu] addItem:[NSMenuItem separatorItem]];
// 创建一个菜单项目
// 设置菜单项目的点击事件
NSMenuItem *actionMenuItem = [[NSMenuItem alloc] initWithTitle:@"Do Action" action:@selector(doMenuAction:) keyEquivalent:@""];
// 将事件交给当前类处理
[actionMenuItem setTarget:self];
// 添加子标题
[[menuItem submenu] addItem:actionMenuItem];
}
}
- 点击菜单上的Edit中的Do Action按钮调用
// 弹出弹框
- (void)doMenuAction:(NSMenuItem *)item
{
NSLog(@"=====%@ item = %@",item.keyEquivalent,item);
NSAlert *alert = [[NSAlert alloc] init];
[alert setMessageText:[NSString stringWithFormat:@"Hello, World%@",item.keyEquivalent]];
[alert runModal];
}
需求
- 在我们添加文件的时候都会选择将文件添加到target里面
- 那需求就是使用几个其它的的选项替代掉target
需求分析
- 所有的target都在一个白色的矩形框里
- 其实这个巨型框就相当于我们iOS中的UITableview,而在OS X 中是NSTableView
- 每一行显示的内容是NSCell
- 那么首先拿到NSTableView
- 然后拿到这个Cell便可以改变里面的内容
实现步骤
- 拿到NSTableView
- 我们可以使用遍历这个界面中的subviews来拿到NSTableView
- 在没有打开添加文件界面的时候是没有创建NSTableView,而在创建视图初始化控件的大小的时候会调用NSViewDidUpdateTrackingAreasNotification通知
- 所以我们可以监听这个通知,在打开添加文件窗口的时候就能拿到里面所有的对象
- 使用snip截屏可以看到白色的视图的大概大小为320 X 170
- 那么我们遍历子控件的视图并且打印他们的frame
- 查看NSTableView发现正是我们需要找到的
- 拿到NSTableView打印内部的的数据源
- 我们可以发现数据源是Xcode3TargetMembershipDataSource类型的
- Xcode3TargetMembershipDataSource是Xcode的私有类
- 位置是:/Applications/Xcode.app/Contents/PlugIns/Xcode3UI.ideplugin/Contents/MacOS/Xcode3UI
- 如果需要使用Xcode3TargetMembershipDataSource需要将Xcode3UI拖入我们的项目里,但是不要勾选Copy items if needed,否则可能会有冲突
- 将Xcode3TargetMembershipDataSource拖入项目中
网友评论