如何将NSExceptionDomains添加到xcode V7.0.1的plist?

时间:2015-10-06 05:10:49

标签: ios xcode plist ios9 xcode7

我想使用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>

3 个答案:

答案 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域的密钥?
有些域名需要它。