【问题标题】:How to obtain iOS device CPU architecture in Xamarin?如何在 Xamarin 中获取 iOS 设备 CPU 架构?
【发布时间】:2019-01-31 09:03:49
【问题描述】:

在我的 Xamarin iOS 应用程序中,我可以从 UIKit.UIDevice.CurrentDevice 实例中获取许多设备特征,例如型号、系统名称等。但是,我没有看到任何获取类上的 CPU 架构(x86、arm 等)的方法。

How can I get the iOS device CPU architecture in runtime 展示了一种使用 Objective C 获取此信息的方法。我想知道是否有一种方法可以使用任何预定义的 Xamarin 类在 C# 中获取 CPU 信息。

【问题讨论】:

    标签: xamarin.ios


    【解决方案1】:

    在您的 iOS 项目中使用此类创建一个新文件:

    public static class DeviceInfo
    {
        public const string HardwareSysCtlName = "hw.machine";
    
        public static string HardwareArch { get; private set; }
    
        [DllImport(ObjCRuntime.Constants.SystemLibrary)]
        static internal extern int sysctlbyname([MarshalAs(UnmanagedType.LPStr)] string property, IntPtr output, IntPtr oldLen, IntPtr newp, uint newlen);
    
        static DeviceInfo()
        {
            var pLen = Marshal.AllocHGlobal(sizeof(int));
            sysctlbyname(HardwareSysCtlName, IntPtr.Zero, pLen, IntPtr.Zero, 0);
    
            var length = Marshal.ReadInt32(pLen);
    
            var pStr = Marshal.AllocHGlobal(length);
            sysctlbyname(HardwareSysCtlName, pStr, pLen, IntPtr.Zero, 0);
    
            HardwareArch = Marshal.PtrToStringAnsi(pStr);
        }
    }
    

    【讨论】:

    • 非常感谢您的帮助。虽然“hw.machine”不是我需要的,但你的代码确实让我知道我需要做什么。
    【解决方案2】:

    今天,我发现这段代码不仅适用于 Windows(UWP),而且适用于带有 Xamarin 的 iOS:

    System.Runtime.InteropServices.RuntimeInformation.ProcessArchitecture.ToString();
    

    使用 iOS 模拟器,RuntimeInformation 有更多的信息,如 OSArchitecture,但在真实的 iOS 设备上,只有 ProcessArchitecture 可用。

    我使用了所有可用的最新软件:Xcode 12.4、Visual Studio for Mac 8.9 (1651) 等。

    【讨论】:

      猜你喜欢
      • 2013-11-20
      • 1970-01-01
      • 1970-01-01
      • 2020-01-21
      • 1970-01-01
      • 1970-01-01
      • 2018-10-18
      • 1970-01-01
      相关资源
      最近更新 更多