13

检查存档的应用程序,我可以看到应用程序二进制文件中列出的一些源代码文件的完整路径。并未列出所有源代码文件。

strings - the_binary_app | grep "\.m"

揭示

/Users/bbarnhart/myPath/myPath/App/path/path/SourceCodeFile.m

以及其他一些人。我无法确定一些源代码文件的完整路径是如何嵌入到应用程序二进制文件中的。我想删除它们。有任何想法吗?这是构建设置还是项目文件略有损坏?

有些属于 lib,有些是属于项目的文件。

4

2 回答 2

10

__FILE__宏扩展为当前文件的完整路径。这是您获取可执行文件路径的一种可能方式。例如,宏的扩展assert包括__FILE__宏。

查看strings | grep管道的输出。对于每个文件,在 Xcode 中进入您的项目并打开该文件。然后转到相关文件小工具并选择“预处理”:

相关文件

然后在预处理器输出中搜索文件的路径。你会发现很多误报,因为会有很多#行号/路径指令。你可以忽略这些,因为它们只产生调试输出,它不包含在你的可执行文件中(除非你对你的构建设置做了一些奇怪的事情)。您可能会发现将预处理器输出保存到文件,然后打开该文件并将其通过管道传输grep或使用正则表达式搜索/替换删除所有以#.

查找路径显示为字符串常量的其他实例。例如,如果您使用assert宏,您会发现如下内容:

(__builtin_expect(!(argc > 0), 0) ? __assert_rtn(__func__, "/Volumes/b/Users/mayoff/TestProjects/textViewChanged/textViewChanged/main.m", 16, "argc > 0") : (void)0);

在这种情况下,路径最终会嵌入到您的可执行文件中。

如果没有找到您嵌入路径的所有位置,请尝试从“相关文件”小工具中选择“Assembly”。该程序集将充满包含您的路径的注释;之后的所有内容@都是程序集输出中的注释,因此请忽略这些。

您还将在.file指令中看到您的路径。我相信这些只会产生调试符号输出,不会进入您的可执行文件,因此您也可以忽略它们。

您还将在.asciz指令之后不久在.section DWARF,...指令中看到您的路径。这是更多可以忽略的调试符号内容。

查找您的路径出现在程序集输出中的其余情况。您需要弄清楚如何消除这些情况。你如何做到这一点将取决于路径出现的上下文,所以如果你需要更多帮助,请用你找到的内容更新你的问题。

于 2013-08-16T07:43:35.140 回答
2

听起来您的代码在__FILE__某处包含宏。

于 2013-08-16T07:12:53.050 回答