繁体   English   中英

Xamarin.Mac URL方案

[英]Xamarin.Mac URL Scheme

如何使用Xamarin.Mac设置和调试URL方案?

我在Info.plist添加了以下内容:

的Info.plist

然后我构建了一个安装程序包并安装了应用程序。 但是,如果我打开mytest://在浏览器或运行open mytest://命令行,无论是启动我的应用程序。

另外,运行mytest://后,有没有办法在Xamarin Studio中附加调试器? 在Windows上,我使用Debugger.BreakDebugger.Attach但这些方法似乎没有在Mono中实现。

它没有直接解决您的问题,但这个问题的答案对您有帮助吗?

具体来说,它使用项目上的自定义执行命令选项进行寻址。 您可以定义自定义命令以在调试器中执行您的应用程序:

打开“项目选项”,进入“运行>自定义命令”部分,为“执行”添加自定义命令

它还提到了Debugger.Break行为:

如果您的应用程序在带有Mono 2.11或更高版本的Mono Soft Debugger中运行[...],它将为软调试器设置软断点并按预期工作


编辑:

您可以在已经运行的Mac应用程序上调用URL ...您是否可以设置处理程序来捕获事件,在内部设置断点并检查您的URL是否正确调用已在运行的应用程序? 它可能会为您提供行为的线索或进一步调试的方法。 像这样的东西:

    public override void FinishedLaunching(NSObject notification)
    {
        NSAppleEventManager appleEventManager = NSAppleEventManager.SharedAppleEventManager;

        appleEventManager.SetEventHandler(this, new Selector("handleGetURLEvent:withReplyEvent:"), AEEventClass.Internet, AEEventID.GetUrl);
    }

    [Export("handleGetURLEvent:withReplyEvent:")]
    private void HandleGetURLEvent(NSAppleEventDescriptor descriptor, NSAppleEventDescriptor replyEvent)
    {
        // Breakpoint here, debug normally and *then* call your URL
    }

由@TheNextman发布,该解决方案确实有效,但这是一个更完整的解决方案。 我从这个 Xamarin论坛帖子中获得了以下信息。 用户(和Xamarin员工)Sebastien Pouliot(@poupou)说,

我从未使用过特定的API,但枚举值中的四个字符在Apple API中很常见。

四个字符(4个字节)被编译成整数。 如果没有C#enum已经可用,那么你可以将字符串转换为整数,该代码如下:

 public static int FourCC (string s) { return (((int)s [0]) << 24 | ((int)s [1]) << 16 | ((int)s [2]) << 8 | ((int)s [3])); } 

所以完整的样本如下,

public override void FinishedLaunching(NSObject notification)
{
    NSAppleEventManager.SharedAppleEventManager.SetEventHandler(this, new Selector("handleGetURLEvent:withReplyEvent:"), AEEventClass.Internet, AEEventID.GetUrl);
}

[Export("handleGetURLEvent:withReplyEvent:")]
private void HandleGetURLEvent(NSAppleEventDescriptor descriptor, NSAppleEventDescriptor replyEvent)
{
    string keyDirectObject = "----";
    uint keyword = (((uint)keyDirectObject[0]) << 24 |
                   ((uint)keyDirectObject[1]) << 16 |
                   ((uint)keyDirectObject[2]) << 8 |
                   ((uint)keyDirectObject[3]));
    string urlString = descriptor.ParamDescriptorForKeyword(keyword).StringValue;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM