我试图找出如何将用
Ruby(
Sass)编写的包捆绑到Cocoa应用程序(Objective-C,而不是Ruby Cocoa)中以供我执行(通过NSTask很好,除非有一个简单的方法桥ObjC< - > Cocoa,我不知道).
Sass包是你必须安装的东西,使用“gem install”或“rake install” – 这样做会在我的〜/ .gem目录中放入大量文件.由于我希望安装了基于Cocoa的应用程序的任何人能够在我的应用程序中执行此工具,我不希望让用户经历一个额外的安装过程,所以我希望能够在我的应用包的Resources目录中嵌入我需要的所有内容.
然而,不熟悉Ruby的内部和结构(对不起,我只是把ObjC/C++ocoa保留在我的脑海里!),我不清楚在〜/中安装了1,444个文件中的哪一个.gem目录(是的,我算了)我需要嵌入应用程序以及我可能需要做什么来获取目录引用等工作正常.
如果有人有任何将ruby工具嵌入Cocoa应用程序的经验,我将非常感谢您的意见.考虑到Mac OS X上安装了ruby,我并没有想到会这么难……但显然这个软件包(通常是非典型的?)不仅仅是一个脚本文件….
解决方法
您可以将gem安装到特定位置:
GEM_HOME=path/to/your/project/gems gem install sass
然后,作为构建过程的一部分,将文件夹复制到资源中.当你想运行sass时,找到你的gem文件夹.像这样调用ruby:
NSString *gems_path = …; NSTask *task = [[NSTask alloc] init]; // you may want to copy NSProcessInfo.processInfo.environment and modify it instead task.environment = @{ @"GEM_HOME": gems_path }; task.launchPath = @"/usr/bin/ruby"; task.arguments = @[[gems_path stringByAppendingPaths:@[@"bin",@"sass"]],@"rest",@"of",@"your",@"arguments"]; // add handling for I/O [task launch];
(键入github,可能有愚蠢的错误)
请注意,您可能还想捆绑ruby(可能是macruby),以防止出现兼容性问题.如果没有,请确保测试您支持的所有OS X版本,尤其是10.9,因为ruby已升级到2.0.