我应该在 App Store 上发布一个带有打印声明的应用程序吗?

Should I release an app to the App Store with print statements in it?

我打算尽快(在 TestFlight 之后)将我的应用程序发布到 App Store。我有很多视图控制器,其中包含 print 语句。 print 语句用于测试目的(调试器),用户永远不会看到它们。

发布应用程序后,如果我在应用程序中包含或不包含打印语句,会有什么不同吗?

即使以毫秒为单位,打印语句在切换场景时是否会降低速度?

我会因为将它们包含在我的应用程序中而被拒绝吗?

在几个 vc 中,为了清楚起见,我打印了 uid。在应用程序中包含这些打印语句是否存在任何安全风险?

我假设您使用的是 Swift,那么 print 是完全安全的,即使对于 AppStore 版本也是如此。您不会被拒绝,也不会存在安全风险。

print,与类似的 NSLog 不同,不会在用户可见的任何地方生成任何日志(例如,在 Xcode 设备控制台中)。

有关 printNSLog 之间区别的更多信息:Swift: print() vs println() vs NSLog()

问题的前提假设你面对的是一个想要反省你的应用程序的对手。所以你需要回答的问题是:"to what extent do you want (or are required) to make it difficult for these people?".

你使用 print 而不是 NSLog 所做的一切都是在提高自省的门槛。没有 100% 保证的方法可以防止攻击者反省您的应用程序;假设他们能够在安全受到威胁(即越狱)的设备上执行它。

我创建的一个系统级调整是挂钩每个 print() 调用和 NSLog 它的参数...从而将 print() 转换为 NSLog。现在有像 Logify 这样的调整,它将挂钩应用程序中的所有 类 和方法,因此您可以完全跟踪其执行流程,但通读起来有点像噩梦。

如果您正在创建一个特别敏感的应用程序并且想让事情变得更难,您可以将 print() 调用包装在编译器语句中以查看您是否在模拟器上:

#if TARGET_OS_SIMULATOR
    print()
#endif

这仍然是一个容易出错的机制,但确实提高了标准。只取决于您的要求:)

我:我是移动应用程序的渗透测试员,在 "how not to do things" 方面有丰富的经验。