首先 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
- 这两个软件因为适配,就会同步更新两边的更改
微软的一步步教的步骤 : https://learn.microsoft.com/zh-cn/previous-versions/xamarin/mac/get-started/hello-mac
在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控件变化 同步自我更新。