
首先 Visual Studio 2019 for mac 有很多版本必须一对一和Xcode的版本对应才能正确开发 否则编译都报错本人xcode11.1 、13.2.1、12.5.1 轮着配 VS2019 for Mac 8.4、8.10 编译都报错。提醒大家不要以为是自己问题就是两者版本不适配。本人最后试出来 vs2019 for mac 8.3.1 配 Xcode 11.2 。 亲测正常了。搞了一礼拜 微软还不让正常下载旧版旧版从微软订阅频道下载要收费的。 现在最新版VS for Mac 又要升级自己的mac系统这升级就会破坏本机目前使用一些mac应用的环境导致又要下载新版应用。果断不能如此劝大家不要踩坑给Visual Studio for Mac开发苹果应用的初学者建议1、 VS版本和Xcode要对应。 不出错就用本人亲测可用的版本2、mac OS系统里卸载应用就是卸不干净无论是360 还是 腾讯的mac维护应用现在用deepseek 它会回答 清理的终端代码就可以清干净。 VS 和 Xcode是附件太占硬盘容量掉了它本体其它东西还在mac电脑里如果你需要卸载整个 Visual Studio for Mac 和所有 Xamarin 组件可以下载并使用微软官方提供的卸载脚本。脚本下载地址为https://raw.githubusercontent.com/MicrosoftDocs/visualstudio-docs/master/mac/resources/uninstall-vsmac.sh。下载后在终端中通过chmod x赋予执行权限后运行即可。手动删干净xcode ,本人上篇文章 点这里Visual Studio Mac 开发Mac应用的原理在vs中写代码事件在xcode中摆放控件如button label textbox这两个软件因为适配就会同步更新两边的更改微软的一步步教的步骤 HelloMac - 演练 - Xamarin | Microsoft Learn在vs for mac中获取本机电池的代码using System; using Xamarin.Essentials; namespace helloworld1 { public class BatteryInfoHelper { public static double GetBatteryPercent() { double level Battery.ChargeLevel; level level * 100; return level; } public static string getState() { // 根据状态执行逻辑 switch (Battery.State) { case BatteryState.Charging: // 正在充电 return 充电中;//break; case BatteryState.Full: // 电池已满 return 电量已满; //break; case BatteryState.Discharging: case BatteryState.NotCharging: // 正在放电或未充电 return 正在放电或未充电; //break; case BatteryState.NotPresent: // 设备无电池如台式机 return 本机无电池; //break; case BatteryState.Unknown: // 无法检测状态 return 无法检测状态; // break; default: return 状态未知; } } public static void GetBatteryStatus() { // 1. 获取当前电量百分比 (0.0 到 1.0) // 如果连接交流电或无电池通常返回 1.0 double level Battery.ChargeLevel; // 2. 获取电池状态 BatteryState state Battery.State; // 3. 获取电源来源 BatteryPowerSource source Battery.PowerSource; // 输出调试信息 //Debug.WriteLine($电池电量: {level * 100}%); //Debug.WriteLine($电池状态: {state}); //Debug.WriteLine($电源来源: {source}); // 根据状态执行逻辑 switch (state) { case BatteryState.Charging: // 正在充电 break; case BatteryState.Full: // 电池已满 break; case BatteryState.Discharging: case BatteryState.NotCharging: // 正在放电或未充电 break; case BatteryState.NotPresent: // 设备无电池如台式机 break; case BatteryState.Unknown: // 无法检测状态 break; } } } }使用上述代码需要Xamarin.Essential包 可以在VS for Mac 里用nutget 在线获取。VS for mac 开发mac播放声音/* * * var player new AudioPlayerHelper(); // 播放包内资源假设 Resources 文件夹中有 sound.mp3 player.PlayFromBundle(sound, mp3); // 或播放绝对路径文件 player.PlayFromFile(/Users/你的用户名/Music/example.mp3) * * * */ using System; using AVFoundation; using Foundation; namespace helloworld1 { public class MacAudioPlayer { // 必须保持强引用否则播放可能被 GC 中断 private AVAudioPlayer _audioPlayer; /// summary /// 从绝对文件路径播放声音 /// /summary public void PlayFromFile(string filePath) { var url NSUrl.FromFilename(filePath); Play(url); } /// summary /// 从应用程序包资源中播放声音 /// 例如资源文件名为 beep.mp3放在 Resources 文件夹Build Action 设为 BundleResource /// /summary public void PlayFromBundle(string resourceName, string extension) { var path NSBundle.MainBundle.PathForResource(resourceName, extension); if (path null) { Console.WriteLine($未找到资源: {resourceName}.{extension}); return; } var url NSUrl.FromFilename(path); Play(url); } private void Play(NSUrl url) { // 如果已有播放器在播放先停止并释放 Stop(); NSError error; _audioPlayer AVAudioPlayer.FromUrl(url, out error); if (error ! null) { Console.WriteLine($AVAudioPlayer 初始化失败: {error.LocalizedDescription}); _audioPlayer null; return; } // 配置播放参数 _audioPlayer.Volume 1.0f; // 音量 0.0 ~ 1.0 _audioPlayer.NumberOfLoops 0; // 0 播放一次-1 无限循环 _audioPlayer.FinishedPlaying OnFinishedPlaying; _audioPlayer.PrepareToPlay(); bool started _audioPlayer.Play(); Console.WriteLine(started ? 开始播放 : 播放失败); } private void OnFinishedPlaying(object sender, AVStatusEventArgs e) { Console.WriteLine(播放完成); Stop(); // 播放结束后释放 } public void Stop() { if (_audioPlayer ! null) { _audioPlayer.FinishedPlaying - OnFinishedPlaying; if (_audioPlayer.Playing) _audioPlayer.Stop(); _audioPlayer.Dispose(); _audioPlayer null; } } } }在VS for Mac里开发C#代码主要在Viewcontroller.cs文件里编写各类控件事件 上面的代码被调用就这样的。Viewcontroller.cs有Viewcontorller.designer.cs的文件这由vs for Mac自己维护它会自动根据xcode控件变化 同步自我更新。