检查已归档的应用程序,我可以看到应用程序二进制文件中列出的一些源代码文件的完整路径。并非列出所有源代码文件。
strings - the_binary_app | grep "\.m"
揭示
/Users/bbarnhart/myPath/myPath/App/path/path/SourceCodeFile.m
以及其他一些人。我无法确定如何将几个源代码文件的完整路径嵌入到app二进制文件中。我想删除它们。有任何想法吗?这是构建设置还是项目文件略有损坏?
某些属于lib,其他属于项目的文件。
答案 0 :(得分:8)
__FILE__
宏扩展到当前文件的完整路径。这可能是您获取可执行文件路径的一种方式。例如,assert
宏的扩展包括__FILE__
宏。
查看strings | grep
管道的输出。对于每个文件,进入Xcode中的项目并打开该文件。然后转到相关文件doodad并选择“预处理”:
然后在预处理器输出中搜索文件的路径。你会发现很多误报,因为会有很多#
行号/路径指令。您可以忽略这些,因为它们只生成调试输出,这不会包含在您的可执行文件中(除非您对构建设置做了一些奇怪的事情)。您可能会发现将预处理器输出保存到文件更快,然后打开该文件并通过grep
进行管道传输或使用正则表达式搜索/替换来删除以#
开头的所有行。
查找路径显示为字符串常量的其他实例。例如,如果您使用了assert
宏,您会发现如下内容:
(__builtin_expect(!(argc > 0), 0) ? __assert_rtn(__func__, "/Volumes/b/Users/mayoff/TestProjects/textViewChanged/textViewChanged/main.m", 16, "argc > 0") : (void)0);
这种情况是路径最终会嵌入到您的可执行文件中。
如果找不到您嵌入路径的所有地方,请尝试从相关文件doodad中选择“程序集”。大会将充满包含你的路径的评论; @
之后的所有内容都是程序集输出中的注释,因此请忽略它们。
您还将在.file
指令中看到您的路径。我相信这些只产生调试符号输出,它不会进入你的可执行文件,所以你也可以忽略它们。
在.asciz
指令后不久,您还会在.section DWARF,...
指令中看到您的路径。这是你可以忽略的更多调试符号。
查找路径出现在程序集输出中的其余情况。您需要弄清楚如何消除这些情况。如何操作将取决于路径显示的上下文,因此如果您需要更多帮助,请使用您找到的内容更新您的问题。
答案 1 :(得分:2)
听起来您的代码在某处包含__FILE__
宏。