使用xcode访问本地IP地址

时间:2016-12-31 03:57:11

标签: ios xcode app-transport-security

我试图访问本地IP地址,以便我可以更改/更新本地覆盆子pi上的信息。即使用以下内容:

https://github.com/Jopyth/MMM-Remote-Control

我已将我的plist更新为:

<?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>en</string>
        <key>CFBundleExecutable</key>
        <string>$(EXECUTABLE_NAME)</string>
        <key>CFBundleIdentifier</key>
        <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <string>6.0</string>
        <key>CFBundleName</key>
        <string>$(PRODUCT_NAME)</string>
        <key>CFBundlePackageType</key>
        <string>APPL</string>
        <key>CFBundleShortVersionString</key>
        <string>1.0</string>
        <key>CFBundleVersion</key>
        <string>1</string>
        <key>LSApplicationCategoryType</key>
        <string></string>
        <key>LSRequiresIPhoneOS</key>
        <true/>
        <key>NSAppTransportSecurity</key>
        <dict>
            <key>NSExceptionDomains</key>
            <dict>
                <key>http://192.168.0.40</key>  // need to add your domain name of webservice
                <dict>
                    <key>NSIncludesSubdomains</key>
                    <true/>
                    <key>NSExceptionAllowsInsecureHTTPLoads</key>
                    <true/>
                    <key>NSExceptionRequiresForwardSecrecy</key>
                    <true/>
                    <key>NSExceptionMinimumTLSVersion</key>
                    <string>TLSv1.2</string>
                    <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
                    <false/>
                    <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
                    <true/>
                    <key>NSThirdPartyExceptionMinimumTLSVersion</key>
                    <string>TLSv1.2</string>
                    <key>NSRequiresCertificateTransparency</key>
                    <false/>
                </dict>
            </dict>
        </dict>
        <key>NSTemporaryExceptionMinimumTLSVersion</key>
        <string>TLSv1.1</string>
        <key>UILaunchStoryboardName</key>
        <string>LaunchScreen</string>
        <key>UIMainStoryboardFile</key>
        <string>Main</string>
        <key>UIRequiredDeviceCapabilities</key>
        <array>
            <string>armv7</string>
        </array>
        <key>UISupportedInterfaceOrientations</key>
        <array>
            <string>UIInterfaceOrientationPortrait</string>
            <string>UIInterfaceOrientationLandscapeLeft</string>
            <string>UIInterfaceOrientationLandscapeRight</string>
        </array>
        <key>UISupportedInterfaceOrientations~ipad</key>
        <array>
            <string>UIInterfaceOrientationPortrait</string>
            <string>UIInterfaceOrientationPortraitUpsideDown</string>
            <string>UIInterfaceOrientationLandscapeLeft</string>
            <string>UIInterfaceOrientationLandscapeRight</string>
        </array>
    </dict>
    </plist>

但是在加载SIM卡或设备时,我仍然会看到一个空白的,尽管是黑暗的页面。

我正在制作最基本的应用程序,以便我的兄弟可以访问他的魔镜,当他回家更新它但我似乎无法看到本地IP地址。任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

实际上,真正的问题是ATS异常不适用于IP地址。它仅适用于域名

选项:

选项1 - 禁用ATS

如果您将应用程序提交到应用程序商店,那么完全关闭ATS并不是一个好主意 - 如果您希望在Apple开始执行该规则时提交到应用商店,这样做会使您证明该决定是正确的。通常我不推荐这个作为SO的选项。但是,考虑到你在那里放置了一个硬编码的IP地址,我怀疑这是一个针对特定用例创建的单一用途应用程序,你不需要提交给Apple审查(你可能会直接在设备上安装)使用开发配置文件)。如果是这种情况,我将完全使用Info.plist中的NSAllowsArbitraryLoads键禁用ATS。

enter image description here

这将禁用所有ATS保护,但如果您的应用仅通过HTTPS与本地网络实体通信,则App Transport Security无论如何都不会保护任何内容。

选项2 - 使用NSAllowsLocalNetworking

如果您将NSAllowsArbitraryLoadsNSAllowsLocalNetworking放在Info.plist中,在iOS 9中,您将完全禁用ATS,但在iOS 10中(支持NSAllowsLocalNetworking的第一个版本设置),iOS将忽略NSAllowsArbitraryLoads并仅在本地网络呼叫上禁用ATS。这样会更安全,但如果您只进行本地网络呼叫,我只会禁用ATS(选项1)。

选项3 - xip.io

如果您想要启用ATS,其他人已经成功使用xip.io服务将本地IP地址“转换”为域名。因此,您需要将xip.io添加到Exception域,将NSIncludesSubdomains的子值设置为true。然后,当您连接到您的域,而不是连接到192.168.0.40,您将连接到192.168.0.40.xip.io