我应该向 App Store 发布一个包含打印语句的应用程序吗?
Posted
技术标签:
【中文标题】我应该向 App Store 发布一个包含打印语句的应用程序吗?【英文标题】:Should I release an app to the App Store with print statements in it? 【发布时间】:2017-09-03 09:01:26 【问题描述】:我打算很快(在 TestFlight 之后)将我的应用发布到 App Store。我有很多带有print
语句的视图控制器。 print
语句用于测试目的(调试器),用户永远不会看到它们。
发布后,如果我在应用程序中包含或不包含打印语句,会有什么不同吗?
在场景之间切换时,打印语句是否会降低速度,即使降低几毫秒?
我会因为将它们包含在我的应用中而被拒绝吗?
在几个 vcs 中,为了清楚起见,我打印了 uid。在应用程序中包含这些打印语句是否存在任何安全风险?
【问题讨论】:
不,您的应用不会被拒绝,尽可能多地清理您的应用是一个好习惯,但它仍然不会影响您的应用。 【参考方案1】:我假设您使用的是 Swift,那么 print
是完全安全的,即使对于 AppStore 构建也是如此。您不会被拒绝,也不会带来安全风险。
print
与类似的NSLog
不同,不会在用户可见的任何地方(例如在 Xcode 设备控制台中)生成任何日志。
更多关于print
和NSLog
之间区别的信息:Swift: print() vs println() vs NSLog()
【讨论】:
谢谢。我只使用 printf 是因为 print 的描述是实际打印机的描述。你的答案正是我需要知道的:) 感谢您的回答。我不确定安全性。【参考方案2】:问题的前提假设您面对的是一个想要反省您的应用的对手。所以你需要回答的问题是:“你希望(或被要求)在多大程度上让这些人为难?”。
您使用 print 而不是 NSLog 所做的所有事情都提高了自省的门槛。没有 100% 保证的方法可以防止攻击者自省您的应用程序;假设他们能够在安全性受到威胁(即越狱)的设备上执行它。
我创建的一个系统级调整是挂钩每个 print() 调用和 NSLog 它的参数...从而将 print() 转换为 NSLog。现在有像 Logify 这样的调整,它将挂钩应用程序中的所有类和方法,因此您可以完全跟踪其执行流程,但这有点像噩梦。
如果您正在创建一个特别敏感的应用程序并希望让事情变得更难,您可以将 print() 调用包装在编译器语句中,以查看您是否在模拟器上:
#if TARGET_OS_SIMULATOR
print()
#endif
这仍然是一个容易出错的机制,但确实提高了标准。只是取决于你的要求是什么:)
我:我是一名移动应用渗透测试员,在“如何不做事”方面拥有丰富的经验。
【讨论】:
有趣的答案。一个坚定的人会以一种或另一种方式获得是有道理的。我遇到了这段代码,我忘记了哪个 SO 帖子,但它说它会在推送您的应用程序时杀死所有打印语句。只需将其添加到 AppDelegate。 func print(_ items: Any...) #if DEBUG; Swift.print(items[0]); #万一;以上是关于我应该向 App Store 发布一个包含打印语句的应用程序吗?的主要内容,如果未能解决你的问题,请参考以下文章
向 App Store 提交二进制文件 - 无效的代码签名权利
App Store Connect TestFlight 显示没有构建