我想使用Xcode Version 7.0.1将基于HTML的网站捆绑为iPhone应用程序,一切正常,我唯一的问题是当我在iPhone 4s上测试应用程序时,它不会显示通过{访问的图像{1}}。但是,我可以访问另一个提供http
访问其图像的网站的图像。
有没有办法为捆绑添加http支持?
更新
我在我的plist文件中添加了https
,但我仍有同样的问题
NSExceptionDomains
我也尝试过基于此question
的关注<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleDisplayName</key>
<string>My Project</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIcons</key>
<dict/>
<key>CFBundleIcons~ipad</key>
<dict/>
<key>CFBundleIdentifier</key>
<string>com.myproject.names</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>1.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0.1</string>
<key>CFBundleSignature</key>
<string>myproject</string>
<key>CFBundleVersion</key>
<string>1.1</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<key>UIMainStoryboardFile</key>
<string>Main_iPhone</string>
<key>UIMainStoryboardFile~ipad</key>
<string>Main_iPad</string>
<key>UIRequiresFullScreen</key>
<string>YES</string>
<key>UIStatusBarHidden</key>
<false/>
<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>appanalytics.embarcadero.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key><true/>
</dict>
</dict>
</dict>
</dict>
</plist>
更新
我添加了here中提到的代码,但仍然存在同样的问题。
更新
正如所建议的那样,我将plist更改为以下但仍有相同的问题。另外,我将http://添加到关键标记的值中无济于事。
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>mydomain.com</key>
<dict>
<!--Include to allow subdomains-->
<key>NSIncludesSubdomains</key>
<true/>
<!--Include to allow HTTP requests-->
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<!--Include to specify minimum TLS version-->
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
答案 0 :(得分:14)
首先,您的Info.plist有两个单独的NSAppTransportSecurity键值对。你应该修复它,这样只有一对。
您的问题并未说明图片的加载域。如果您可以包含此信息,则更容易给出具体答案。
例如,如果您的图片是从example.com
或子域加载的,则可以按如下方式添加例外:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>appanalytics.embarcadero.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
<key>example.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
如果您事先不知道将从哪些域加载图像,那么您可以允许对所有域进行HTTP访问:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>appanalytics.embarcadero.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
请注意,虽然在第二个示例中包含appanalytics.embarcadero.com
在技术上是多余的,但建议您为应用将访问的所有已知域指定ATS例外。
答案 1 :(得分:1)
您可以阅读本教程,了解如何配置App Transport Security,或者您可以像以前一样通过添加Dictionary&#34; NSAppTransportSecurity&#34;使用名为&#34; NSAllowsArbitraryLoads&#34;的布尔键价值&#34;是&#34;在你的info.plist。
答案 2 :(得分:1)
您的密钥名称为NSExceptionAllowsInsecureHTTPLoads
,但应为NSTemporaryExceptionAllowsInsecureHTTPLoads
另外,您是否尝试添加
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
到ATS域的密钥?
有些域名需要它。