我应该向 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 设备控制台中)生成任何日志。

更多关于printNSLog之间区别的信息: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 提交更新时考虑新的 iOS 版本

向 App Store 提交二进制文件 - 无效的代码签名权利

App Store Connect TestFlight 显示没有构建

如果我的应用不在 App Store 中,如何测试 Firebase 动态链接?

向 Mac App Store 提交问题

用于将应用程序分发到 App Store 的 iOS 公司名称