File: Program.cs
Web Access
Project: src\src\Microsoft.DotNet.MacOsPkg\Cli\Microsoft.DotNet.MacOsPkg.Cli.csproj (Microsoft.DotNet.MacOsPkg.Cli)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System;
 
#if !NET

// This code is unreachable. Here to keep the compiler happy.
throw new PlatformNotSupportedException("This tool is only supported on .NET Core.");
 
#else
 
using System.Runtime.InteropServices;
using System.CommandLine;
using System.IO;
using Microsoft.DotNet.MacOsPkg.Core;
 
namespace Microsoft.DotNet.MacOsPkg.Cli;
 
public class Program
{
    public static int Main(string[] args)
    {
        if (!RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
        {
            Console.Error.WriteLine("This tool is only supported on macOS.");
            return 1;
        }
 
        RootCommand rootCommand = Setup();
        return new CommandLineConfiguration(rootCommand).Invoke(args);
    }
 
    /// <summary>
    /// Set up the command line interface and associated actions.
    /// </summary>
    /// <returns>Root  command</returns>
    private static RootCommand Setup()
    {
        var rootCommand = new RootCommand();
        var unpackSrcArgument = new Argument<string>("src") { Description = "Source path of the .pkg or .app file" };
        var unpackDestinationArgument = new Argument<string>("dst") { Description = "Destination path to unpack the file" };
        var unpackCommand = new Command("unpack", "Unpack a .pkg or .app file")
        {
            Arguments = { unpackSrcArgument, unpackDestinationArgument }
        };
        unpackCommand.SetAction(result =>
        {
            var srcPath = result.GetValue(unpackSrcArgument);
            var dstPath = result.GetValue(unpackDestinationArgument);
            return MacOsPkgCore.Unpack(srcPath, dstPath);
        });
 
        var packSrcArgument = new Argument<string>("src") { Description = "Source path to pack." };
        var packDstArgument = new Argument<string>("dst") { Description = "Destination path of the .pkg or .app file." };
        var packCommand = new Command("pack", "Pack a directory into a .pkg or .app file.")
        {
            Arguments = { packSrcArgument, packDstArgument }
        };
        packCommand.SetAction(result =>
        {
            var srcPath = result.GetValue(packSrcArgument);
            var dstPath = result.GetValue(packDstArgument);
            return MacOsPkgCore.Pack(srcPath, dstPath);
        });
 
        var pkgOrAppArgument = new Argument<string>("src") { Description = "Input pkg or app to verify." };
        var verifyCommand = new Command("verify", "Verify that a pkg or app is signed.")
        {
            Arguments = { pkgOrAppArgument }
        };
        verifyCommand.SetAction(result =>
        {
            var srcPath = result.GetValue(pkgOrAppArgument);
            return MacOsPkgCore.VerifySignature(srcPath);
        });
 
        rootCommand.Subcommands.Add(unpackCommand);
        rootCommand.Subcommands.Add(packCommand);
        rootCommand.Subcommands.Add(verifyCommand);
        return rootCommand;
    }
}
#endif