Xamarin.ios 不适用于真正的 iOS 设备,但它适用于模拟器

Xamarin.ios does NOT work on real iOS device but it works on Simulator

我构建了一个移动应用程序。此应用程序在 iOS 模拟器、Android 模拟器和 Android 真实设备上运行良好。但是当我在 TestFlight 上发布它并安装在真正的 iOS 设备上时,这个应用程序无法运行。我没有收到任何错误。我的微调器(激活器指示器)永远是 运行,我无法从 HttpResponse 获得任何响应。我用 Web 服务构建了这个应用程序。 因此我使用 http://46.221..... url post 或 get 请求。我认为 iOS 出于安全原因不支持 http 请求。但如果这是真的,那么为什么这个应用程序在模拟器上 运行 非常好?我找不到任何解决方案。这是我的部分代码:

public async Task<BSUser> ValidateUser(string userName, string password)
    {
        string url = Xamarin.Essentials.Preferences.Get(Constants.URL_KEY, "") + "/api/Validateuser";
        HttpClient _Client = new HttpClient();

        var data = new Dictionary<string, string>
        {
          {"userName", userName},
          {"password", password}
        };

        string jsonData = JsonConvert.SerializeObject(data);
        HttpContent content = new StringContent(jsonData, Encoding.UTF8, "application/json");

        try
        {
            HttpResponseMessage httpResponse = await _Client.PostAsync(url, content);
            if (httpResponse.IsSuccessStatusCode)
            {
                var responseData = await httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
                var result = JsonConvert.DeserializeObject(responseData).ToString();
                UserInfo userInfo = JsonConvert.DeserializeObject<UserInfo>(result);

                BSUser value = new BSUser();
                value.UserName = userInfo.userCode;

                return value;
            }
            else
            {
                return null;
            }
        }
        catch (SystemException)
        {
            return null;
        }
    }

enter image description here

看来您真的应该利用 HTTPS 而不是 HTTP。您可以参考这些页面以获取更多信息:

https://www.hackingwithswift.com/example-code/system/how-to-handle-the-https-requirements-in-ios-with-app-transport-security

https://developer.apple.com/documentation/security/preventing_insecure_network_connections?language=objc

这是ios中ATS的问题,如果你想使用HTTP,你可以配置它。 https://docs.microsoft.com/en-us/xamarin/ios/app-fundamentals/ats#configuring-ats-options.

有人遇到和你一样的问题:Xamarin Forms, iOS will not open links in WebView

我发现了我项目的问题。它与 HTTPS-HTTP 或安全情况无关。这是如此荒谬和不合逻辑,但这是真正的问题。我的应用程序在任何 iOS 模拟器上运行得很好,但是,模拟器的最低版本是 Visual Studio 中的 iPhone-8。但是,当我在 iPhone-6 的 真实设备上安装我的应用程序时,出现 Newtonsoft.Json.JsonSerializationException 错误。但是我的 HttpResponse 返回了 200OK 并且我看到来自我的服务的所有值都是 json。我认为 iPhones 的旧版本和新版本之间在转换 Json 序列化方面存在一些差异。