MAUI MacCatalyst 无法编辑 Entitlements.plists 以允许使用近场通信

MAUI MacCatalyst can't edit Entitlements.plists for allowing use of Near Field Communication usage

提问人:Nimerya 提问时间:10/31/2023 最后编辑:Nimerya 更新时间:11/6/2023 访问量:31

问:

我正在使用这个PCSC包来读取和写入一些NFC标签的数据。

当我在调试或发布 mod 中启动我的应用程序时,一切正常,直到我准备好将应用程序打包到 MacCatalyst 中。 我需要添加一个 Entitlements.plist 文件以允许某些功能使用,这是我在遵循此打包教程后找到的一个基本文件。

添加此文件后,如果我启动我的应用程序,我会收到一条错误消息,它无法访问智能卡资源管理器。 在另一台Mac上,我刚刚得到,但我认为这是同样的问题。The Smart card resource manager is not running.PCSC.framework/PCSC

下面是一个快速的分步步骤,其中包含一个简化的示例代码来重现该问题:

  1. 创建一个新的默认 .NET MAUI 应用,目标来自 awork .NET 7.0,我称之为“pcsc-test”
  2. 右键单击解决方案并安装 NuGet 包 PCSC
  3. 转到 MainPage.xaml.cs 并将代码替换为此示例,不要忘记将命名空间更改为名为项目的名称。
using PCSC;

namespace pcsc_test
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private void OnCounterClicked(object sender, EventArgs e)
        {
            try
            {
                var context = ContextFactory.Instance.Establish(SCardScope.System);
                CounterBtn.Text = context.GetReaders().FirstOrDefault("None");
            }
            catch (Exception ex)
            {
                CounterBtn.Text = ex.Message;
            }

            SemanticScreenReader.Announce(CounterBtn.Text);
        }
    }
}

此时,如果您启动应用程序并单击按钮,您应该会获得计算机上连接的第一个阅读器的名称,或者如果您没有,则为无。这是预期的行为,现在是问题所在

  1. 进入 Platforms>MacCatalyst 并创建一个新文件“Entitlement.plist”,并将其内容设置为:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.app-sandbox</key>
    <true/>
    <key>com.apple.security.network.client</key>
    <true/>
</dict>
</plist>

现在尝试再次启动应用程序并单击按钮,您应该会在阅读器名称的位置收到一条错误消息。我的是. 如果尝试在 Entitlements.plist 文件中添加任何其他参数,则会出现另一个问题,而该文件无法启动应用。The Smart card resource manager is not running.

如果有人遇到同样的错误或愿意提供帮助,我们将不胜感激。 祝你有美好的一天。

.NET macOS Maui NFC 打包

评论


答:

0赞 Nimerya 11/6/2023 #1

通过删除 Entitlements 文件的第一个授权解决了问题。

<key>com.apple.security.app-sandbox</key>
<true/>