我如何确定哪个 URL 被 App Transport Security 阻止?

How can I figure out which URL is being blocked by App Transport Security?

我正在将一个 iOS 应用程序升级到 iOS 9,我有一些不安全的 URL,我需要应用程序传输安全的一些例外。我已经添加了我所知道的两个,但现在出现了一些警告:

App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.

我需要知道哪些 URL 被阻止,以便我可以将它们添加到 Info.plist,它们可能是图像或媒体文件。如何让系统记录它决定不加载的 URL?

编者注:@jessedc 在 link 下面的评论中指出苹果官方文档关于如何做到这一点:https://developer.apple.com/library/content/qa/qa1887/_index.html

好的,我有一个我不喜欢的答案!我还是很想要更好的。

在我的 application:didFinishLaunchingWithOptions: 方法中,我添加了行

setenv("CFNETWORK_DIAGNOSTICS", "3", 1);

当我 运行 应用程序时,在日志中我可以找到如下所示的条目:

2015-07-02 15:27:56.152 MyApp[45041:9125662] CFNetwork diagnostics log file
created at: /Users/micah.hainline/Library/Developer/CoreSimulator/Devices/
11BCA581-5F5F-494D-932A-2ECFCA33EA93/data/Containers/Data/Application/
9ACC6941-8039-4B86-B5E8-A6C66E2AD520/Library/Logs/CrashReporter/CFNetwork_com
.myapp.MyApp_45041.nwlrb.log

当我打开该文件时,我有大量关于网络上发生的一切的日志条目。我在该文件中搜索 kCFErrorDomainCFNetwork 并获取失败网络请求的日志。我可以用它来查看系统试图攻击的 URL,然后可以将 URL 添加到 App T运行sport Security 的例外情况中。

接受的答案是正确的,但如果您在 Xamarin iOS 上执行此操作,则需要使用;

Environment.SetEnvironmentVariable("CFNETWORK_DIAGNOSTICS", "3", EnvironmentVariableTarget.Process);

此外,如果您要查找日志文件,请使用模拟器管理器之类的工具更轻松地找到正确的位置 (https://github.com/tue-savvy/SimulatorManager)。