MRBrew 7.0.0

MRBrew 7.0.0

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布日期最近发布2015年3月

Marc Ransome维护。



MRBrew 7.0.0

MRBrew是一个简单的Objective-C包装库,用于Homebrew包管理器。它使在您的应用中执行Homebrew操作变得容易

MRBrewOperation *operation = [MRBrewOperation installOperation:[MRBrewFormula formulaWithName:@"vim"]];
[[MRBrew sharedBrew] performOperation:operation delegate:nil];

现在您已经安装了一个强大的文本编辑器:beer:

MRBrew使用自动引用计数,并在OS X版本10.7-10.9上进行了测试。

项目集成

您可以使用CocoaPods将MRBrew集成到现有项目中。简单地将必要的依赖项添加到您的Podfile中,如下所示

platform :osx, '10.7'
pod 'MRBrew'
...

然后将依赖项安装到您的项目中

$ pod install

先决条件

MRBrew依赖于Homebrew来实现重负载,并假设默认安装路径为/usr/local/bin/brew(尽管可以在brew可执行文件已被移动的情况下指定)。如果您还没有安装Homebrew,请按照官方说明进行安装。

常规使用

执行操作

要执行操作,请通过使用performOperation:delegate:方法将MRBrewOperation对象传递给共享的MRBrew实例。

MRBrewOperation类提供了一些便捷方法来创建表示常见Homebrew操作的对象

+ (instancetype)updateOperation;
+ (instancetype)listOperation;
+ (instancetype)searchOperation:(MRBrewFormula *)formula;
+ (instancetype)installOperation:(MRBrewFormula *)formula;
+ (instancetype)infoOperation:(MRBrewFormula *)formula;
+ (instancetype)removeOperation:(MRBrewFormula *)formula;
+ (instancetype)optionsOperation:(MRBrewFormula *)formula;

例如,以下代码将执行一个Homebrew update操作

[[MRBrew sharedBrew] performOperation:[MRBrewOperation updateOperation] delegate:nil];

需要指定公式的操作应传递一个MRBrewFormula对象,这也是很容易创建的。例如

MRBrewOperation *operation = [MRBrewOperation installOperation:[MRBrewFormula formulaWithName:@"appledoc"]];
[[MRBrew sharedBrew] performOperation:operation delegate:nil];

每次调用performOperation:delegate:都会在单独的线程中启动一个子进程,不会中断应用中其余的处理。可以通过重复调用performOperation:delegate:来执行多个操作。操作被放入队列中并并发执行。如果要按顺序执行操作,只需调用[MRBrew setConcurrentOperations:NO]

注意:MRBrew类执行的所有操作都继承自启动这些操作的环境。使用setEnvironment:来定义您自己的环境变量。

自定义操作

MRBrewOperation类提供的便捷方法仅覆盖Homebrew支持的实际操作的一个小子集。要执行尚未定义相关便捷方法的操作,请在创建操作对象时使用以下MRBrewOperation类方法

+ (instancetype)operationWithName:(NSString *)name
                          formula:(MRBrewFormula *)formula
                       parameters:(NSArray *)parameters;

按照Homebrew定义精确地指定操作名称(例如:@"upgrade")。根据进行的操作,formulaparameters可能是可选的(更多信息参见man brew)。

处理操作输出

您可能希望在操作完成后、失败或生成输出时被通知。这可以通过在控制器中实现MRBrewDelegate协议并指定以下可选方法来实现:

- (void)brewOperationDidFinish:(MRBrewOperation *)operation;
- (void)brewOperation:(MRBrewOperation *)operation didFailWithError:(NSError *)error;
- (void)brewOperation:(MRBrewOperation *)operation didGenerateOutput:(NSString *)output;

现在,每次您使用performOperation:delegate:执行操作时,请将控制器对象指定为代理,以便在操作完成后、失败或生成输出时接收回调。

[[MRBrew sharedBrew] performOperation:[MRBrewOperation updateOperation] delegate:controller];

如果您预期控制器将管理(并因此接收针对多种类型操作的回调),则应在代理方法中检查MRBrewOperation对象,以确定如何响应特定类型的操作。

- (void)brewOperation:(MRBrewOperation *)operation didGenerateOutput:(NSString *)output
{
    if ([[operation name] isEqualToString:MRBrewOperationUpdateIdentifier]) {
        // an update operation produced output
    }
    else if ([[operation name] isEqualToString:MRBrewOperationInstallIdentifier]) {
        // an install operation produced output
    }
    ...
}

上述常量可以在MRBrewConstants.h头文件中找到,并用于确定您的代理方法收到的操作类型。如果计划使用这些常量,请将此头文件导入代理实现中。

如果您正在响应尚未定义常量的自定义操作,只需提供您自己的常量或使用字符串字面量。

if ([[operation name] isEqualToString:@"audit"]) {
    // an audit operation produced output
}

或者,如果您需要在代理方法中响应特定操作,请使用MRBrewOperation类的isEqualToOperation:方法来确认生成回调的操作,并相应地做出响应。

取消操作

可以使用以下MRBrew实例方法之一来取消操作(请记住,首先使用+sharedBrew类方法获取对共享MRBrew实例的引用)

- (void)cancelAllOperations;
- (void)cancelOperation:(MRBrewOperation *)operation;
- (void)cancelAllOperationsOfType:(MRBrewOperationType)type;

杂项

如果brew可执行文件已从默认的/usr/local/bin/目录移出(通常不推荐),则在执行任何操作之前指定其位置

[[MRBrew sharedBrew] setBrewPath:@"/usr/bin/brew"];

此调用只需在每个项目中执行一次。

单元测试

已提供单元测试作为MRBrewTests目标的组成部分,并根据需要添加额外的测试。需要运行这些单元测试时,需要OCMock,可以使用CocoaPods依赖项管理器安装。

在安装了CocoaPods后,从复制的存储库的根目录运行以下命令以安装依赖项

$ pod install

贡献

如果您打算为MRBrew项目做贡献,请fork存储库,进行代码更改,然后提交一个带有关于您添加的功能或错误修复的简要描述的pull请求。测试套件和单元测试为MRBrewTests目标提供,有必要时应添加额外的测试方法。

文档

如果您使用的是Dash(您为什么不使用呢?),可以从下载部分直接安装文档。选择Cocoa Docsets并搜索mrbrew

Dash docset

或者,访问CocoaDocs以在线访问文档,或者直接检查头文件。

许可证

MRBrew是基于MIT许可证提供的。

致谢

以下库和资源被用于制作 MRBrew

联系方式

通过邮箱 [email protected] 联系我,或者在@marcransome 上发推。