我需要一种方法在代码进入编译器之前拦截代码,对其进行更改,并使其在文件/Xcode 中保持不变。
我认为构建脚本是一种流拦截,但事实似乎并非如此。另一种方法可能是在构建之前和之后运行脚本。我应该注意这是否有任何影响?
-----编辑-----
为什么?我有一个基于特定注释语法的自动记录系统的想法。我希望能够在构建时解析某个字符串并将其替换为日志记录函数,但代码保持不变。可能吗?-----更新-----
看来自定义编译器可能是前进的方向,或者至少是一个包装当前 LLVM clang 的插件。我一直在调查此事。对于感兴趣的人来说,这是一个相关问题:Xcode custom compiler which wraps and does a passthru to clang
最佳答案
如果“构建时”是指在实际编译代码之前,则意味着每次要运行脚本时都需要打开 Xcode。我不相信有办法做到这一点。但是,您可以在运行代码之前使用 Automator 接收字符串,但您需要使用 Automator 来构建应用程序,这是有限制的。另一种方法是在您的应用程序中创建 2 个类:预运行类和主类。预运行类将提示用户或读取文件(或类似的东西)来获取字符串,并根据字符串以特殊方式运行主类。
编辑:回复评论
我不知道如何在 Objective-C 中执行此操作,但您始终可以将主文件重命名为 main.mm(.mm 文件包含 C++ 和 Objective-C 代码)并向其中添加 C++ 代码。但是,这是使用控制台:
using namespace std // all (this line is optional)
string s = ""; // this
cin >> s; // is C++ (if you omitted the optional line above, the correct code is std::cin >> s;
MainClass mc = //constructor for your "main class" here in Objective-C
if(s == someCertainString){ //hypothetical string and C++ condition checking for a C++ string
[mc doThisACertainWay:];
}else if(s == someOtherString){ // again, hypothetical string that you need to declare
[mc doThisADifferentWay];
}
我现在不在电脑上,所以无法检查代码,但您可以搜索如何用 C++ 和 Obj-C 读写文件。我现在能给出的唯一提示是你需要 #include <iostream>
如果您使用 C++ 读/写文件,则在开头。
如果您不想使用控制台(如果您想发布此内容,这是正常的),您也可以创建一个对话框。在此示例中,您不需要 C++,因此无需重命名主文件。创建一个在启动时可见的新窗口(从现在开始称为theDialog
),并确保您的主图形界面在启动时不会显示。将文本字段添加到 theDialog
并为其命名(在本例中为 tf
)。添加标签来告诉用户要在文本字段中输入什么内容。添加一个按钮并将其链接到一个操作。在此操作中,输入以下代码:
MainClass mc = // constructor here
NSString *str = [self.tf stringValue];
if([str equalsString:someString]){ // hypothetical string and possible error in the condition checking, I'm new to Obj-C
[mc doThisInACertainWay];
} else {
[mc doThisInADifferentWay];
}
关于Xcode,是否可以在构建时拦截和更改代码而不更新文件?如果是这样,怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19068830/