【问题标题】:Xamarin.ios does NOT work on real iOS device but it works on SimulatorXamarin.ios 不能在真正的 iOS 设备上运行,但它可以在模拟器上运行
【发布时间】:2021-04-12 12:13:47
【问题描述】:

我构建了一个移动应用程序。这个应用程序在 iOS 模拟器、Android 模拟器和 Android 真机上运行良好。但是当我在 TestFlight 上发布它并安装在真正的 iOS 设备上时,这个应用程序就不起作用了。我没有收到任何错误。我的微调器(激活器指示器)一直在运行,我无法从 HttpResponse 获得任何响应。我使用 Web 服务构建了这个应用程序。 因此我使用 http://46.221..... url 来 发布或获取 请求.我认为 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

【问题讨论】:

  • 你发布到 TestFlight Release build with NSUrlSession http 客户端实现了吗?
  • 嗨阿列克谢!当我发布它时,我没有使用 NSUrlSession 构建它。但是我在 info.plist 中添加了 'NSAppTransportSecurityNSAllowsArbitraryLoadsNSAllowsArbitraryLoadsInWebContent'你能举例说明你的建议吗?
  • 如果使用HttpClient 的默认托管实现,所有这些设置都将无效,试试NSUrlSession 这个设置,也许会有所帮助。
  • 我找到了你说的。我再次使用 NSUrlSession 将我的应用程序发布到 TestFlight,但我有同样的错误。当我尝试登录时,我的应用程序崩溃并出现故障。但是iOS模拟器仍然可以正常工作。太有趣了!
  • 在这种情况下我所能推荐的就是改进您的日志记录和错误处理。

标签: c# ios web-services xamarin.ios rest


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    【讨论】:

    • 嗨史蒂文!感谢您的回复。我知道https的优点。我发现了我的问题。它与iPhone版本有关。新版本的 iPhone 可以转换我的 Json 数据,但在旧版本的 iPhone 中我应该做一些修复。因为我已经从服务中获得了我所有的价值。
    • @Veysel Turan,所以不是 HTTP 的问题?是导致这个问题的ios版本吗?只是有点好奇。并感谢您的回复。
    • 是的!我使用 HTTP 从服务中获取所有数据,http 请求没有问题。我的问题是 iPhone-6 的设备。将数据转换为 Json.Serialization 时出错。但令人惊讶的是,我的代码适用于 iPhone 8 及更高版本的所有 iOS 模拟器。此外,我没有 iPhone 8 或更高版本的真实设备。因此,我不知道这些版本的真实设备是否也会出现问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 2019-12-13
    • 1970-01-01
    • 2014-03-27
    • 2018-10-16
    • 1970-01-01
    相关资源
    最近更新 更多