我打算很快将我的应用程序发布到App Store(在TestFlight之后)。我有很多视图控制器,其中包含print
语句。 print
语句用于测试目的(调试器),用户永远不会看到它们。
如果我发布或不在应用程序中包含打印语句,它会有什么不同吗?
即使按照毫秒,在场景之间切换时,打印语句是否会降低速度?
我可以拒绝将它们包含在我的应用中吗?
在几个vcs中,为了清楚起见,我打印了uids。通过在应用程序中包含这些打印语句是否存在安全风险?
答案 0 :(得分:9)
我假设您正在使用Swift,那么print
即使对于AppStore版本也是完全安全的。您不会被拒绝,也不会带来安全风险。
print
与类似NSLog
不同,不会在用户可见的任何地方生成任何日志(例如在Xcode设备控制台中)。
有关print
和NSLog
之间差异的更多信息:Swift: print() vs println() vs NSLog()
答案 1 :(得分:1)
问题的前提是假设您面对一个想要对您的应用进行自省的对手。因此,您需要回答的问题是:“您希望(或要求)在多大程度上使这些人感到困难?”。
通过使用print而不是NSLog所做的所有事情都使内省变得更加严格。没有100%保证的方法可以防止攻击者对您的应用程序进行内省;假设他们能够在安全性受到损害(即越狱)的设备上执行该程序。
我创建的一个系统级调整是挂接每个print()调用,并NSLog其参数...从而将print()转换为NSLog。现在有像Logify这样的调整,它们将钩住应用程序中的所有类和方法,以便您可以完全跟踪其执行流,但这是通宵阅读的噩梦。
如果您要创建一个特别敏感的应用程序并且想让事情变得更困难,则可以将print()调用包装在编译器语句中,以查看您是否在模拟器上:
#if TARGET_OS_SIMULATOR
print()
#endif
这仍然是一个容易犯错的机制,但确实将标准提高了很多。只取决于您的要求是什么:)
我:我是移动应用程序的渗透测试仪,并且在“如何不做事”方面拥有丰富的经验。