如何知道第三方编写的代码是否在发布时运行

时间:2019-03-18 16:47:11

标签: ios swift xcode

我是否可以知道printassertlog_os等一段代码是否仅在查看文档的情况下才能在DEBUG上编译,因为它通常是不完整的,并且实现不是公开的?

如果没有,这是我唯一的解决方案,可以在编译器预处理程序之间调用用于调试目的的每个代码,如下所示:

#if DEBUG
assert(true)
print("Hello")
#endif

出于安全和性能的原因,我想确保代码完全不存在。

这样的代码将由编译器进行优化,并在发行时将其完全删除,或者将保留一些程序集,例如跳转到空函数:

func DebugOnlyPrint(message: String) {
#if DEBUG
print(message)
#endif
}

2 个答案:

答案 0 :(得分:2)

要查看输出运行的发行版,然后在Xcode中转到Window -> Devices(或按cmd + shift + 2)。

现在将iOS设备连接到Mac并执行> View Device Logs,您将看到所有输出。

答案 1 :(得分:0)

简单答案:您的示例将在生成的代码中保留一个空函数。

长答案:

要定义仅在一种方案中可用的函数,请将宏放在整个函数定义周围:

#if DEBUG
func DebugOnlyPrint(message: String) {
    print(message)
}
#endif

要成功进行编译,这需要将DebugOnlyPrint的所有函数调用都包装在#if DEBUG中。在这种情况下,将以不同的方案将功能跟踪完全删除到DEBUG

要检查私有框架是否适用,可以为框架目标使用不同的方案来构建项目,然后:

  • 检查公共接口文件。
  • 检查设备日志。

另一个示例:

func DebugOnlyPrint(message: String) {
#if DEBUG
print(message)
#endif
}

由于要检查助理编辑器的对应部分,因此即使没有任何内容也将包含在公共界面(标题)中。