我是否应该在App Store中发布带有打印语句的应用程序?

时间:2017-04-07 21:18:37

标签: ios security uiviewcontroller printf mac-app-store

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

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

即使按照毫秒,在场景之间切换时,打印语句是否会降低速度?

我可以拒绝将它们包含在我的应用中吗?

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

2 个答案:

答案 0 :(得分:9)

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

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

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

答案 1 :(得分:1)

问题的前提是假设您面对一个想要对您的应用进行自省的对手。因此,您需要回答的问题是:“您希望(或要求)在多大程度上使这些人感到困难?”。

通过使用print而不是NSLog所做的所有事情都使内省变得更加严格。没有100%保证的方法可以防止攻击者对您的应用程序进行内省;假设他们能够在安全性受到损害(即越狱)的设备上执行该程序。

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

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

#if TARGET_OS_SIMULATOR
    print()
#endif

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

我:我是移动应用程序的渗透测试仪,并且在“如何不做事”方面拥有丰富的经验。