MRBrew是一个简单的Objective-C包装库,用于Homebrew包管理器。它使在您的应用中执行Homebrew操作变得容易
MRBrewOperation *operation = [MRBrewOperation installOperation:[MRBrewFormula formulaWithName:@"vim"]];
[[MRBrew sharedBrew] performOperation:operation delegate:nil];
现在您已经安装了一个强大的文本编辑器。
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"
)。根据进行的操作,formula
和parameters
可能是可选的(更多信息参见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
或者,访问CocoaDocs以在线访问文档,或者直接检查头文件。
MRBrew
是基于MIT许可证提供的。
以下库和资源被用于制作 MRBrew
通过邮箱 [email protected] 联系我,或者在@marcransome 上发推。