【问题标题】:iOS App Contains Developer Path InformationiOS App 包含开发者路径信息
【发布时间】:2023-03-30 01:46:01
【问题描述】:

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

strings - the_binary_app | grep "\.m"

揭示

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

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

有些属于一个库,有些是属于项目的文件。

【问题讨论】:

  • 您是否在“调试”模式下构建?如果是这样,您的二进制文件包含调试符号,其中可能包含路径信息。 (不过,我只是在猜测。)
  • 我使用了提交给 Apple 的存档。
  • 我认为这并不一定意味着您还没有处于调试模式。转到 Product > Scheme 并确保您选择了“Release”或“Distribution”方案。
  • 我会检查的。我想知道为什么无论构建方案如何都没有列出所有源文件。
  • 我再次构建项目,确保未定义 DEBUG 并且结果相同。

标签: ios xcode


【解决方案1】:

__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”。该程序集将充满包含您的路径的 cmets; @ 之后的所有内容都是程序集输出中的注释,因此请忽略它们。

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

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

查找您的路径出现在程序集输出中的其余情况。您需要弄清楚如何消除这些情况。具体操作方式取决于路径出现的上下文,因此如果您需要更多帮助,请根据您的发现更新您的问题。

【讨论】:

  • 我在有问题的文件中查找“assert”,发现这就是原因。感谢您的详细回答。
  • @bbarnhart 按照您的建议,我们能够看到 assert 中的文件路径。我们现在如何删除这些路径?只是注释代码行就可以了吗?
  • @dreamdeveloper 删除或注释掉 assert 和 NSAssert 应该删除它们。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多