Apple Watch设备因SandboxViolation而崩溃拒绝(1)网络出站

时间:2016-10-14 15:15:33

标签: ios xamarin xamarin.ios watchkit apple-watch

我在拨打网络电话时在Apple Watch上遇到问题。

它在模拟器上工作正常但是当部署到设备时,我在设备日志中看到了这一点:

  

MyAppleWatch内核(Sandbox)[0]:SandboxViolation:MyWatchApp(203)拒绝(1)network-outbound / private / var / run / mDNSResponder

使用改装完成调用的代码并在模拟器上工作,所以我想这不是原因,但如果有必要我会发布。

我已在WatchExtensionApp的Info.plist中设置了这些值(而不是将它们设置在WatchApp中作为这些键)

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>my.domain.com</key>
        <dict>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

我将WatchApp和WatchExtensionApp设置为:

enter image description here

关于接下来要尝试什么,有点不知所措。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

好的我工作正常,首先我将Info.plist改为:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>my.domain.com</key>
        <dict>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

我不得不将所有网络电话改为NSUrlSession,而不是使用Refit + HttpClient。因此,我假设HttpClient中有些内容与监视器不相关,或者监视器仅适用于NSUrlSession。无论如何这里是我的一个电话的样本:

    public async Task<HttpResponse> MakeCall(NSMutableUrlRequest request)
    {
        var result = new HttpResponse();
        var config = NSUrlSessionConfiguration.DefaultSessionConfiguration;
        var session = NSUrlSession.FromConfiguration(config);

        var resultUser = await session.CreateDataTaskAsync(request);
        var response = resultUser.Response as NSHttpUrlResponse;
        if (response != null)
        {
            result.StatusCode = (int)response.StatusCode;
            result.Content = NSString.FromData(resultUser.Data, NSStringEncoding.UTF8).ToString();
        }
        return result;
    }

    public async Task<HttpResponse> GetStuffWithParameter(string parameter, string authorization)
    {
        var url = new NSUrl($"https://www.domain.com/api/stuff/{parameter}");

        var header = new NSMutableDictionary();
        header.SetValueForKey(new NSString(authorization), new NSString("Authorization"));
        header.SetValueForKey(new NSString("application/json"), new NSString("Content-Type"));

        var request = new NSMutableUrlRequest(url)
        {
            Headers = header,
            HttpMethod = "GET"
        };

        return await MakeCall(request);
    }

    public class HttpResponse
    {
        public int StatusCode { get; set; }
        public object Content { get; set; }
    }

希望这有帮助。