Giter Site home page Giter Site logo

microsoft / dotnet-podcasts Goto Github PK

View Code? Open in Web Editor NEW
2.7K 161.0 725.0 14.61 MB

.NET reference application shown at .NET Conf featuring ASP.NET Core, Blazor, .NET MAUI, Microservices, Orleans, Playwright, and more!

Home Page: https://dot.net

License: MIT License

PowerShell 0.19% Bicep 2.45% C# 48.76% HTML 28.74% Dockerfile 0.91% JavaScript 1.00% CSS 15.92% TypeScript 2.02%
dotnet-maui dotnetmaui aspnetcore asp-net-core dotnet csharp blazor orleans playwright playwright-typescript

dotnet-podcasts's Introduction

page_type description languages products
sample
.NET reference application shown at .NET Conf 2021 & 2022 featuring ASP.NET Core, Blazor, .NET MAUI, Microservices, Power Apps, Playwright, Orleans, and more!
csharp
dotnet-core
ef-core
blazor
orleans
dotnet-maui
azure-sql-database
azure-storage
azure-container-apps
azure-container-registry
azure-app-service-web
playwright

.NET Podcasts - Sample Application

The .NET Podcast app is a sample application showcasing .NET, ASP.NET Core, Blazor, .NET MAUI, Azure Container Apps, Orleans, Playwright, and more.

In addition, we created an Approval App using Microsoft Power Apps to handle incoming podcast requests.

You can browse a live running version of the .NET Podcasts app powered by ASP.NET Core and Blazor.

Logo

Application Architecture Diagram

.NET Podcast Application Diagram

Repositories

For this sample application, we build an app to listen to all your favorite .NET podcasts for all the ecosystems: Web, Android, iOS, macOS and Windows. You can find the different apps separated by folders in this repo:

  • Mobile & Desktop: Native .NET MAUI Application for iOS, Android, macOS, and Windows
  • Website: Blazor WebAssembly app and ASP.NET Core Razor Marketing website
  • Backend API: ASP.NET Core Web APIs & Minimal APIs, ingestion worker, and podcast update worker
  • Blazor Hybrid App: Sample hybrid application of .NET MAUI with Blazor.

Additionally, we build an application using Microsoft Power Apps to allow us to reject or accept incoming podcast requests:

Full Deployment with GitHub Actions

dotnet-podcasts repo is configured to deploy all services and websites automatically to Azure using GitHub Actions. Follow the detailed guidelines to setup GitHub Actions on your fork.

Local Deployment Quickstart

The easiest way to get started is to build and run the .NET Podcasts app service, database, and storage using Docker.

  1. First install Docker Desktop
  2. Clone the repository and navigate to the root directory in a terminal
  3. Run the following docker command (this may take some time to pull images, build, and deploy locally)
docker-compose up
  • For Apple arm64-based system:
docker-compose -f docker-compose.arm64.yml -f docker-compose.override.yml up

This will deploy and start all services required to run the web, mobile, and desktop apps. The Web API will run on localhost:5003 and the SignalR Hub for listen together will run on localhost:5001.

Web, Mobile, & Desktop

The apps are configured to speak to localhost on the correct ports for each service. Simply open the Web solution or the .NET MAUI solution and run the app.

Ensure that you have the following services running in Docker (podcast.api, listentogether.hub, podcast.updater.worker, podcast.db, storage):

Configured Docker services

Backend Services

Open the Services solution and pick a service to run locally such as the Podcast.API.

Ensure that the following services are running in Docker, note that you only need the podcast.db and storage:

Configured Docker services

Local Deployment with Visual Studio

  1. First install Docker Desktop
  2. Clone the repository and navigate to the root directory in a terminal
  3. Open the solution NetPodcast.sln, set the start project to docker-compose and hit F5. To optimize debugging while running all services, please refer to Launch a subset of Compose services documentation.
  4. By default, the Podcast.Api's swagger endpoint will be launched. Navigate to localhost:5002 for the web application. If you see any errors, wait for a while and refresh the page.

Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.

When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

Trademarks

This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft's Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party's policies.

dotnet-podcasts's People

Contributors

aborrego-plain avatar antborari avatar baronfel avatar brunck avatar captainsafia avatar danroth27 avatar davidfowl avatar debs-obrien avatar dependabot[bot] avatar eerhardt avatar ievangelist avatar jamesmontemagno avatar jonathanpeppers avatar jongalloway avatar joseasync avatar juliajuju93 avatar loopedbard3 avatar marcusfelling avatar mertsch avatar michaelstonis avatar microsoft-github-operations[bot] avatar microsoftopensource avatar miguebarrera avatar naricc avatar ninallam avatar nishanil avatar pulimento avatar redth avatar soruk avatar trba1810 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dotnet-podcasts's Issues

The live website is not working

When I go to https://dotnetpodcasts.azurewebsites.net/, I got these error messages.

Error.
An error occurred while processing your request.
Request ID: 00-5947b58faa5f3049ff0a89b9d77d07ce-7c0aaf04f38c9c6d-00

Development Mode
Swapping to the Development environment displays detailed information about the error that occurred.

The Development environment shouldn't be enabled for deployed applications. It can result in displaying sensitive information from exceptions to end users. For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development and restarting the app.

SetTheme causing build failure

The file ListenTogetherComponent.razor in the Blazor folder of the maui project contains the following:

`private async Task UpdateWebThemeAsync()
{
var darkModeIsActive = Settings.Theme == AppTheme.Dark;
await ThemeInterop.SetTheme(darkModeIsActive ? Theme.Dark : Theme.Light);

}`

This is causing the build to fail. If I set SetTheme to SetThemeAsync all builds correctly.

`private async Task UpdateWebThemeAsync()
{
var darkModeIsActive = Settings.Theme == AppTheme.Dark;
await ThemeInterop.SetThemeAsync(darkModeIsActive ? Theme.Dark : Theme.Light);

}`

Link decoration does not return after being set to none

Thank you so much for this wonderful repo and all your great talks at the conference - I'm learning so much!

Was going through to see where I could help, and was about to add an issue suggesting we add links to the tech mentions, but it turns out they were just not very visible! The text decoration resets for links don't seem to get set for the page content. Here's what it looks like for me on MacOS Monterey.

On Safari

safari missing link decoration

On Firefox

firefox missing link decoration

Error with kubeEnvironments location

I'm trying to setup the dotnet-podcasts app but I keep getting this error: The subscription is not registered for the resource type 'kubeEnvironments' in the location 'eastus'. Please re-register for this provider in order to have access to this location.

I've tried changing the location in the dotnet-podcasts/deploy/Services/api.deployment.json file, but that doesn't fix it. Originally it was set to 'canadacentral', but that didn't work either.

Delaying Task at JitterHandler

JitterHandler waits for some time before performing an action.

protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            // Who would do such a thing?!
            // TODO fix this horrible perf leak!
            await Task.Delay(TimeSpan.FromMilliseconds(Random.Shared.NextInt64(50, 500)));
            return await base.SendAsync(request, cancellationToken);
        }

Can I be assigned to this one, please?

And if there are any additional details about this (as it feels like) workaround, please, share.

Terraform templates create resources failed in WSL

Describe the issue:
Test terraform templates after azd login. When Run command bash ./test-templates.sh -c false -t <template_name> -s xxx , we see the following errors:
image

Repro Steps:
1. Login with azd login
2. Run Command bash ./test-templates.sh -c false -t <template_name> -s xxx

Environment:
OS: WSL in VS Code
Template: todo-python-mongo-terraform and todo-nodejs-mongo-terraform.
Branch: Staging
Azd version: 0.4.0-beta.2-daily.2010605 (commit Azure/azure-dev@b6c8218)

Expected behavior:
Run command bash ./test-templates.sh -c false -t <template_name> -s xxx can pass after azd login.

@rajeshkamal5050 for notification.

Publish to App Stores

Hi,

Have you considered publishing this app to the various app stores (App Store, Google Play, etc.)? It would be really helpful to be able to install and see what a reasonably complex MAUI application feels like with minimal friction.

Thank you!

In docker dotnet-podcasts-podcast.api-1 cannot run

2022-12-02 13:29:03 Unhandled exception. Microsoft.Data.SqlClient.SqlException (0x80131904): A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: TCP Provider, error: 35 - An internal exception was caught)
2022-12-02 13:29:03 ---> System.Security.Authentication.AuthenticationException: The remote certificate was rejected by the provided RemoteCertificateValidationCallback.
2022-12-02 13:29:03 at System.Net.Security.SslStream.SendAuthResetSignal(ProtocolToken message, ExceptionDispatchInfo exception)
2022-12-02 13:29:03 at System.Net.Security.SslStream.CompleteHandshake(SslAuthenticationOptions sslAuthenticationOptions)
2022-12-02 13:29:03 at System.Net.Security.SslStream.ForceAuthenticationAsync[TIOAdapter](Boolean receiveFirst, Byte[] reAuthenticationData, CancellationToken cancellationToken)
2022-12-02 13:29:03 at System.Net.Security.SslStream.AuthenticateAsClient(SslClientAuthenticationOptions sslClientAuthenticationOptions)
2022-12-02 13:29:03 at Microsoft.Data.SqlClient.SNI.SNITCPHandle.EnableSsl(UInt32 options)

Deploy to Android device in Release mode

Anybody tried this?
Following error is thrown when I tried to deploy the app in release mode to my device 'Xiaomi Redmi Note 9 Pro' which runs on Android 11.
Missing APKs for [ABI] dimensions in the module 'base'

After some digging, added the following to the NetPodsMauiBlazor.csproj file

  <PropertyGroup Condition="$(TargetFramework.Contains('-android'))">
    <RuntimeIdentifiers>android-arm64</RuntimeIdentifiers>
  </PropertyGroup>

After this, the app installed successfully. But when I open the app. It crashes.

P.S: I was successfully able to deploy in 'debug' mode and run the app without any issues

Subscription not registered - API CICD

When running the Podcast API CICD workflow I get the following error during Deploy > Deploy Container Apps: "MissingSubscriptionRegistration", "The subscription is not registered to use namespace 'Microsoft.OperationalInsights'".

Playback issues on Android

For about a year, I have been working on a podcast app myself. Implementing playback support for Android was something I was hesitating to do, and then luckily for me dotnet-podcasts were released that helped me a lot with this. Thank you for this project!

However, I have found a few issues, and solutions (at least I think so, I haven’t I run dotnet-podcasts myself). I’m too lazy to make a PR, so instead I share these here.

Stopping notifications

If the application for some reason crashes, in many cases the player notification remains open. To solve this (or at least reduce the risk for this), I modified MainApplication and added several calls to StopNotification like this:

    public MainApplication(IntPtr handle, JniHandleOwnership ownership)
        : base(handle, ownership)
    {
        AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
        TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;
        AndroidEnvironment.UnhandledExceptionRaiser += AndroidEnvironment_UnhandledExceptionRaiser;

        NotificationHelper.StopNotification(this);
    }

    private ILogger? _Logger;

    private ILogger Logger
    {
        get
        {
            return _Logger ??= Services.GetRequiredService<ILogger<App>>();
        }
    }
        
    private void AndroidEnvironment_UnhandledExceptionRaiser(object? sender, RaiseThrowableEventArgs e)
    {
        Logger.LogError(e.Exception, nameof(AndroidEnvironment_UnhandledExceptionRaiser));
        NotificationHelper.StopNotification(this);
    }

    private void TaskScheduler_UnobservedTaskException(object? sender, UnobservedTaskExceptionEventArgs e)
    {
        Logger.LogError(e.Exception, nameof(TaskScheduler_UnobservedTaskException));
        NotificationHelper.StopNotification(this);
    }

    private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
    {
        Logger.LogError(e.ExceptionObject as Exception, nameof(CurrentDomain_UnhandledException));
        NotificationHelper.StopNotification(this);
    }

    public override void OnTerminate()
    {
        Logger.LogWarning($"Is terminating.");
        NotificationHelper.StopNotification(this);

        base.OnTerminate();
    }

Pause button in notification

The pause button in the notification is visible when the audio is playing. But it should also be visible when the state is buffering or stopped. In MediaPlayerService.UpdateNotification, replace:

MediaPlayerState == PlaybackStateCode.Playing

With:

MediaPlayerState is PlaybackStateCode.Playing or PlaybackStateCode.Buffering or PlaybackStateCode.Stopped

Position and Duration properties in MediaPlayerService

The properties Position and Duration in MediaPlayerService have valid values depending on state. I modified these to provide a cached value if the underlying media player cannot provide this:

    private int _LatestValidPosition = -1;

    public int Position
    {
        get
        {
            var pos = RawPosition;

            if (pos >= 0)
            {
                _LatestValidPosition = pos;
            }

            return _LatestValidPosition;
        }
        private set
        {
            _LatestValidPosition = value;
        }
    }

    private int RawPosition
    {
        get
        {
            if (mediaPlayer is null ||
                !(MediaPlayerState is PlaybackStateCode.Playing or PlaybackStateCode.Paused or PlaybackStateCode.Buffering)
                )
            {
                return -1;
            }
            else
            {
                return mediaPlayer.CurrentPosition;
            }
        }
    }

    private int _LatestValidDuration = -1;

    public int Duration
    {
        get
        {
            var duration = RawDuration;

            if (duration > 0)
            {
                _LatestValidDuration = duration;
            }

            return _LatestValidDuration;
        }
        set
        {
            _LatestValidDuration = value;
        }
    }

    private int RawDuration
    {
        get
        {
            if (mediaPlayer is null ||
                !(MediaPlayerState is PlaybackStateCode.Playing or PlaybackStateCode.Paused or PlaybackStateCode.Buffering)
            {
                return 0;
            }
            else
            {
                return mediaPlayer.Duration;
            }
        }
    }

_LatestValidDuration and _LatestValidPosition should be set to -1 in PrepareAndPlayMediaPlayerAsync.

MediaPlayerService.Seek

The seek method I have modified to this:

    public async Task Seek(int position)
    {
        Logger.LogInformation($"{nameof(Seek)} - position {position}");

        UpdatePlaybackState(PlaybackStateCode.Buffering);

        await Task.Run(() =>
        {
            if (mediaPlayer is not null)
            {
                Position = position;
                mediaPlayer.SeekTo(position);
            }
        });
    }

MediaPlayerService.PrepareAndPlayMediaPlayerAsync

In PrepareAndPlayMediaPlayerAsync I have added:

    mediaPlayer.Pause();
    mediaPlayer.Reset();

before the call to SetDataSourceAsync. If I remember correctly this solved a couple of cases where an IllegalStateException was thrown. But I have done other changes too, not sure if this is needed.

MediaPlayerService.OnAudioFocusChange

The MediaPlayerService automatically starts media player when it gains audio focus. This is great – if the service also has automatically paused the audio. Currently, if the audio is manually paused by the user and then the user gets a phone call (or a notification), the audio will be restarted after the phone call is completed. It is very surprising :-). I rewrote the method like this:

    private bool RestartAudioOnGainAudioFocus = false;

    public async void OnAudioFocusChange(AudioFocus focusChange)
    {
        Logger.LogInformation($"{nameof(OnAudioFocusChange)} - {focusChange}");

        switch (focusChange)
        {
            case AudioFocus.Gain:
                Logger.LogInformation("Gaining audio focus.");
                mediaPlayer.SetVolume(1f, 1f);

                if (RestartAudioOnGainAudioFocus)
                {
                    Logger.LogInformation("Restarting audio.");

                    _ = Play();
                }
                else
                {
                    Logger.LogInformation("Restarting audio not needed.");
                }

                break;
            case AudioFocus.Loss:
                Logger.LogInformation("Permanent lost audio focus.");
                RestartAudioOnGainAudioFocus = false;

                //We have lost focus stop!
                await Stop(true);
                break;
            case AudioFocus.LossTransient:
                Logger.LogInformation("Transient lost audio focus.");

                //We have lost focus for a short time

                // Restart if playing
                if (this.MediaPlayerState == PlaybackStateCode.Playing)
                {
                    Logger.LogInformation("Was playing. Will restart audio on gain audio focus.");
                    RestartAudioOnGainAudioFocus = true;
                }
                else
                {
                    Logger.LogInformation("Was not playing. Will not restart audio on gain audio focus.");
                    RestartAudioOnGainAudioFocus = false;
                }

                await Pause();
                break;

            case AudioFocus.LossTransientCanDuck:
                //We have lost focus but should till play at a muted 10% volume
                if (mediaPlayer.IsPlaying)
                {
                    mediaPlayer.SetVolume(.1f, .1f);
                }

                break;
        }
    }

WifiLock

MediaPlayerService uses a Wifi-lock. The reason for this seems to be:

“Lock the wifi so we can still stream under lock screen”

Assuming the user has access to mobile data, a Wifi-lock is not required. However, to properly support streaming when the device is locked, a foreground services should be used, see next topic.

Services doesn't need to be exported

I see this in the code:

[Service(Exported = true)

I have changed Exported to false, and it works simply fine.

RemoteControlBroadcastReceiver

The RemoteControlBroadcastReceiver could be removed. As I understand it, this is used to handle ACTION_MEDIA_BUTTON intent. But in Android 5, this was replaced with MediaButtonReceiver that is also implemented. See more details here: https://developer.android.com/guide/topics/media-apps/mediabuttons

I have tried without RemoteControlBroadcastReceiver and haven't found any issues.

Foreground service

Lastly, a bug that took me several months to solve :-( In my application, I could start audio and then after about 20 minutes that playback would be blocked. This only happen if my device wasn’t charging or connected to a computer. When I started the device, the audio started to play again. The reason for this was that the device lost connection to the Internet. The WifiLock mentioned earlier didn’t solve this. It looks like the internal media player is buffering about 20 minutes of audio. Just to prove that internet connection was solved I created this little utility:

class ConnectionAliveChecker
{
    private ILogger Logger { get; }
    public ConnectionAliveChecker(IServiceProvider serviceProvider)
    {
        Logger = serviceProvider.GetRequiredService<ILogger<ConnectionAliveChecker>>();
    }

    public async void RunCheck()
    {
        // Infinite loop. Check if vecka.nu is accessible every 10 second
        while (true)
        {
            try
            {
                using (var client = new HttpClient())
                {
                    var response = await client.GetAsync("https://vecka.nu");
                    if (response.IsSuccessStatusCode)
                    {
                        Logger.LogWarning("ConnectionAliveChecker is alive");
                    }
                    else
                    {
                        Logger.LogError("ConnectionAliveChecker is not alive");
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.LogError(ex, "ConnectionAliveChecker is not alive");
            }
            await Task.Delay(10000);
        }
    }
}

Then I started this when the application was started. About 5-10 minutes after the device was locked and USB was not connected, it was unable to connect to Internet.

To solve this, the MediaPlayerService needs to be a foreground service. Currently it is just a bound service. I have found no documentation about this limitation :-( First step is to add the android.permission.FOREGROUND_SERVICE should be added to AndroidManifest.xml:

<uses-permission android: name="android.permission.FOREGROUND_SERVICE" />

The second step, that I’m not sure if it’s required, is to change the MediaPlayerService attribute:

[Service(Exported = true)]

To:

[Service(Exported = true, ForegroundServiceType = global::Android.Content.PM.ForegroundService.TypeMediaPlayback)]

See this documentation: https://developer.android.com/guide/topics/manifest/service-element

Third step is to change how the notification is published. In NotificationHelper.StartNotification add Service service as a parameter and replace:

    NotificationManagerCompat.From(context).Notify(NotificationId, builder. Build());

With:

        if (Build.VERSION.SdkInt >= BuildVersionCodes.Q)
        {
            service.StartForeground(NotificationId, builder.Build(), ForegroundService.TypeMediaPlayback);
        }
        else
        {
            service.StartForeground(NotificationId, builder. Build());
        }

Images loaded over HTTP don't show up when running from VS

If I start the backend by running docker-compose up and then run the web app from VS using the Podcasts.Web solution, some of the images don't show up in the podcast player app because by the default VS will launch the site under HTTPS, but some of the podcast images are HTTP URLs:

image

Podcasts don't play the first time you press the play button in the Blazor web app

The first time I try to play a podcast using the Blazor web app I get the following exception in the browser dev console:

       Unhandled Exception:
       Microsoft.JSInterop.JSException: The play() request was interrupted by a new load request.
       undefined
          at Microsoft.JSInterop.JSRuntime.<InvokeAsync>d__16`1[[Microsoft.JSInterop.Infrastructure.IJSVoidResult, Microsoft.JSInterop, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60]].MoveNext()
          at Microsoft.JSInterop.JSObjectReferenceExtensions.InvokeVoidAsync(IJSObjectReference jsObjectReference, String identifier, Object[] args)
          at Podcast.Components.AudioInterop.PlayAsync(ElementReference element) in C:\Users\daroth\Documents\GitHub\microsoft\dotnet-podcasts\src\Web\Components\AudioInterop.cs:line 19
          at Podcast.Pages.Shared.Player.Audio.OnPlayingChanged(Boolean play) in C:\Users\daroth\Documents\GitHub\microsoft\dotnet-podcasts\src\Web\Pages\Shared\Player\Audio.razor:line 97
          at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_1(Object state)
          at System.Threading.QueueUserWorkItemCallbackDefaultContext.Execute()
          at System.Threading.ThreadPoolWorkQueue.Dispatch()
          at System.Threading.ThreadPool.Callback()
       ThreadPool Callback threw an unhandled exception of type Microsoft.JSInterop.JSException

If I stop play and try to play again the podcast plays fine.

In general, to play a podcast I'm finding I have to click the play button once, pause it, and then play it again to hear sound.

Error handling

What is the best way to handle errors? mainly internet connection drops

Should we use a try catch in the Page and display it on that page or is there a better way?

e.g. CategoriesPage.razor

private IEnumerable<Category>? categories;
 private PersistingComponentStateSubscription _persistingSubscription;
 private string? _errorMessage ;
 protected override async Task OnInitializedAsync()
 {
     _persistingSubscription = ApplicationState.RegisterOnPersisting(PersistCategories);

     if (!ApplicationState.TryTakeFromJson<IEnumerable<Category>>("categories", out var restored))
     {
         try
         {
             categories = await PodcastService.GetCategories();
         }
         catch (Exception e)
         {
             _errorMessage = e.Message;
         }
         
     }
     else
     {
         categories = restored!;
     }
 }

If I run the NetPodsMauiBlazor App without the server running this is what I get.

image

Port 5000 already In use on macOS Monterey (Native feature)

Running the docker-compose up to have the services running locally on the docker, I faced the error related to the port 5000 already in use, "Breaking" the setup.

It happens due to a standard feature on the OS (AirPlay Receiver) that is enabled as default and uses this port 5000.
https://developer.apple.com/forums/thread/682332

As it's a native feature, I think would be nice to highlight this on the documentation that is required to disable this flag on the configurations to have the service running on the docker, or maybe we can raise the possibility to have this port changed on the project to work on any supported OS.

Reference: https://developer.apple.com/forums/thread/682332

[Bug] App Theme Switch somehow not affect immediately on Shell Background

I cloned and just run the app on Windows 10 using visual studio 2022 Preview 3 & MAUI Preview 12.
It built successfully and managed to be runnable.
When I tried to switch theme, shell background stuck in old theme, after restarted the app seems showing correct theme.

It's working correctly at MAUI Preview 11 version code base as I remembered.
And also I'm facing the same issue at my new project working on visual studio 2022 Preview 3 & MAUI Preview 12.

Please see below screen shot for your reference.
image

With many thanks,

Multiple ``.csproj`` files for Razor Class libraries.

I am opening an issue for this question because this repo does not support discussions as of the time of writing. I noticed that there was an extra csproj file created for the RCLs shared between MAUI and Blazor. In my understanding, the extra .csproj file was to add the MAUI targets for the same project. I am confused as to why this is necessary since the RCL already targets .NET 6, I'd be glad if anyone can help point out what I seem to be missing or misunderstanding.

Issue with initial get of Theme preference

I don't know if I am using this app properly. on my PC running Windows 11, I am compiling and running only the Mobile app. When I run the Mobile app it immediately errors out with a null reference because the Theme preference has never been set;
The line in error is in Settings.cs :
get => Enum.Parse<AppTheme>(Preferences.Get(nameof(Theme), Enum.GetName(theme)));
Since the Theme preference has never been set, the code gets a null reference.
To get this app to run, I modified the code as follows:

     get {
           if (!Preferences.ContainsKey(nameof(Settings.Theme)))
                Preferences.Default.Set(nameof(Settings.Theme), "Light");
            return Enum.Parse<AppTheme>(Preferences.Get(nameof(Theme), Enum.GetName(theme)));
        }

This is done only to demonstrate I determined a possible reason for the error.

Workload ID wasm-tools isn't supported on this platform.

I am on an M1 Macbook Pro with the arm64 version of Net Core 6 installed. I am using Jetbrains Rider to run the program and get the following error when running the application:

#6 0.314 Workload ID wasm-tools isn't supported on this platform.

I am able to install the tool locally and I will admit my experience with Docker is limited but not sure what to do next.

Main branch does not build

Hello I pull the latest of the main branch and I am using VS preview 17.3
I had installed the Maui workload successfuly,

but the project simply does not build because of the lack of the namesapces

There are a lot of comments which is saying

/* Unmerged change from project 'Microsoft.NetConf2021.Maui (net6.0-ios)'
Before:
using Android.Media.Session;
After:
using Microsoft.Maui.Platform;
*/

are those conflicts solved in another branch?
When those conflicts will be solved?

Thank you very much, I appreciate it

UPDATE
I switched to maui-p13 branch and the the situation is better there, but still can not build the project becuase of some namespaces that does not exists

Questions about Infrastructure/Deployment choices

Hello,

If possible, I just wanted @nishanil to clarify 2 choices:

  1. For CI/CD, Why did you choose github workflows and not Azure DevOps Pipelines?
  2. You guys mentioned this sample is meant to be simple, shouldn't it be better\clearer to have bicep files for IAC instead of ARM json templates?

Thank you anyway for your help & guidance, I will try the sample and study how you guys structured things.

Admin documentation

Hi,

I wonder, if there is any admin documentation on how to bring new podcasts to this infrastructure or delete existing podcasts? I haven´t found any "admin login" at the deployed software.

No back button on Windows to get back to the Discover page

When running the .NET MAUI (not Blazor) version of .NET Podcasts on Windows, there doesn't appear to be a way to get back to the Discover page after selecting a podcast. There's no back button anywhere like there is on mobile:

image

Clicking on the Discover tab doesn't help.

Audio playback is silent when running the .NET MAUI Blazor app on iPhone

When attempting to play a podcast on iPhone, no sound comes out. Attempting to skip ahead throws the following exception:

Nullable object must have a value.
at System.Nullable`1[[System.Double, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].get_Value()
at Podcast.Components.Player.FloatingPlayer.Forward() in C:\dotnet-podcasts\src\Web\Components\Player\FloatingPlayer.razor:line 166
at Microsoft.AspNetCore.Components.EventCallbackWorkItem.InvokeAsync[Object](MulticastDelegate , Object )
at Microsoft.AspNetCore.Components.EventCallbackWorkItem.InvokeAsync(Object )
at Microsoft.AspNetCore.Components.ComponentBase.Microsoft.AspNetCore.Components.IHandleEvent.HandleEventAsync(EventCallbackWorkItem callback, Object arg)
at Microsoft.AspNetCore.Components.EventCallback.InvokeAsync(Object )
at Microsoft.AspNetCore.Components.RenderTree.Renderer.DispatchEventAsync(UInt64 , EventFieldInfo , EventArgs )

Steps to reproduce:

  • Run the backend locally with Docker
  • Run the MobileBlazor app on either an iPhone simulator or physical iPhone (tested with physical iPhone XR and iPhone 11 simulator)
  • Try playing a podcast
  • Click the "skip ahead" button, which will throw an exception and make the entire app uninteractive until restarted

Expected result:

Audio plays, and skipping ahead works as expected

Actual result:

No audio plays, and clicking the "skip ahead" button makes the app uninteractive until restarted

Notes:

I've tested on the iPad Air (5th generation) simulator, and it does not exhibit the same problem (audio playback works as expected). The iPad simulator, iPhone simulator, and physical iPhone were all running iOS 15.4.

[ios] Components podcastImage and epiosdeTitle don't exist in the current context

Description

When attempting to publish the app for iOS using .NET version 8.0.100-rtm.23479.1, the publish fails with:

performance/src/scenarios/mauiiospodcast/dotnet-podcasts/src/Mobile/Controls/Player.xaml.cs(54,9): error CS0103: The name 'podcastImage' does not exist in the current context
performance/src/scenarios/mauiiospodcast/dotnet-podcasts/src/Mobile/Controls/Player.xaml.cs(55,9): error CS0103: The name 'duration' does not exist in the current context

The same issue occured on the CI (https://dev.azure.com/dnceng/internal/_build/results?buildId=2276822&view=logs&j=c04974e3-584c-5152-8f00-7b886e6c86dc&t=1bd054e9-6573-5c14-ef83-f6e1ac550017) with 8.0.100-rc.2 version. These components seems to be defined only when for macOS:

<On Platform="UWP, macOS">
<Grid ColumnDefinitions="auto, *, auto">
<Grid ColumnDefinitions="auto, auto"
RowDefinitions="auto,auto"
Margin="16"
HorizontalOptions="Start"
ColumnSpacing="12">
<Image x:Name="podcastImage"
WidthRequest="56"
HeightRequest="56"
HorizontalOptions="Center"
Grid.RowSpan="2" />
<Label Grid.Column="1"
Text="{Binding Text, Source={x:Reference epiosdeTitle}}"
FontSize="Medium"
TextColor="White"
MaxLines="1" />
<Label Text="{Binding Text, Source={x:Reference authorText}}"
Grid.Row="1"
Grid.Column="1"
FontSize="Small"
TextColor="White" />
</Grid>

However, they are referenced here:

private void UpdatePlayPause()
{
this.IsVisible = true;
this.playButton.Source = this.playerService.IsPlaying ? "player_pause.png" : "player_play.png";
epiosdeTitle.Text = this.playerService.CurrentEpisode.Title;
authorText.Text = $"{this.playerService.CurrentShow?.Author} - {this.playerService.CurrentEpisode?.Published.ToString("MMM, d yyy")}";
podcastImage.Source = this.playerService.CurrentShow?.Image;
duration.Text = this.playerService.CurrentEpisode?.Duration.ToString();
}

Repro steps

  1. Clone the repository and checkout to net8.0 branch
  2. Run the publish command: dotnet publish ./dotnet-podcasts/src/Mobile/Microsoft.NetConf2021.Maui.csproj --runtime ios-arm64 --framework net8.0-ios

/cc: @LoopedBard3 @ivanpovazan

Deployment fails when secret password contains "$"

Hi

I lost 2 hours when deploying to my subscription when using GiHhub action
I put in my secret password '$' sign and the deployment was failing on creating SQL Server with error

Password validation failed. The password does not meet policy requirements because it is too short.

In Yaml files in script tasks the variables should be passed as string (with simple quote ').
When I will have some time I will try to prepare PR that will fix it.

Error : android:Exported require on IntentFilter

Hello, with Android Emulator, I get this error when launching the Podcasts.DotnetMaui project

crc64304231ab98fa0dde.MediaPlayerService: Targeting S+ (version 31 and above) requires that an explicit value for android:exported be defined when intent filters are present]

Documentation question

Could you tell me what tools you used to draw the following architectural diagram:

https://github.com/microsoft/dotnet-podcasts/raw/main/docs/arch_diagram_podcast.png

Thank you in advance

Adrien C.

Theme always dark after page refresh

After turning off Dark Theme in the Settings page and refreshing the page via the browser, data-theme="Dark" is always added back to <body>.

I'm looking for a way to manage themes within a Blazor app, and was looking here for an example that doesn't flash the light theme when refreshing the page, for which this app is successful. However, I'm not sure if the reason it is successful is because of the issue in the first paragraph.

Podcasts app crashes -> NullReferenceException => solution Disable XAML Hot Reload in Tools->Options

I watched the .NET Podcasts app - Local Development Walkthrough video on Youtube. When I tried to run the .NET Maui app on my mobile phone, the app threw a NullReferenceException.

After checking the Device Log I found it had something to do with XAML Hot Reload. After disabling XAML Hot Reload in Tools->Options in Visual Studio 2022 Preview, I could run the Podcasts app.

DEVICE LOG
01-07 22:55:41.354 pixel_2_pie_9_0_-_api_28 Error 6645 mono-rt [ERROR] FATAL UNHANDLED EXCEPTION: System.NullReferenceException: Object reference not set to an instance of an object.
at Xamarin.HotReload.Xaml.VisualTreeService.DiagnosticVisualTreeService.Dispose(Boolean isDisposing) in D:\a_work\1\s\HotReload\Source\Xamarin.HotReload.Xaml\VisualTreeService\DiagnosticVisualTreeService.cs:line 75
at Xamarin.HotReload.Xaml.VisualTreeService.VisualTreeService.Finalize() in D:\a_work\1\s\HotReload\Source\Xamarin.HotReload.Xaml\VisualTreeService\VisualTreeService.cs:line 138

Crash when launch IOS app with .NET MAUI RC2 on MacOS with M1

Only occurs on MacOS with M1. Devices without M1 build fine.

With the latest version of .NET MAUI I cannot launch the IOS version.
I have tried the next-steps branch.
could it be an AOT issue?
I think this is the main issue: error: Failed to load AOT module 'System.Private.CoreLib' while running in aot-only mode: doesn't match assembly.
the full blazor version has the same issue.
ANY IDEAS??

Macos Problem detail and system configuration:

Translated Report (Full Report Below)

Incident Identifier: D5CFB024-664B-4824-B512-8451556F4BD0
CrashReporter Key: 36ADD537-C451-3D92-0A9A-BB2715C46877
Hardware Model: MacBookPro18,3
Process: Microsoft.NetConf2021.Maui [1241]
Path: /Users/USER/Library/Developer/CoreSimulator/Devices/9E3F13A7-A78E-4332-B1F0-53D877438EB1/data/Containers/Bundle/Application/D1AC16F9-87DC-4A2E-9374-B8B66A3C2585/Microsoft.NetConf2021.Maui.app/Microsoft.NetConf2021.Maui
Identifier: com.Microsoft.NetConf2021.Maui.2
Version: 1.0 (1)
Code Type: X86-64 (Native)
Role: Foreground
Parent Process: launchd_sim [705]
Coalition: com.apple.CoreSimulator.SimDevice.9E3F13A7-A78E-4332-B1F0-53D877438EB1 [682]
Responsible Process: SimulatorTrampoline [652]

Date/Time: 2022-04-28 08:54:27.8483 +0200
Launch Time: 2022-04-28 08:53:51.1177 +0200
OS Version: macOS 12.3.1 (21E258)
Release Type: User
Report Version: 104

Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Triggered by Thread: 0

Application Specific Information:
dyld4 config: DYLD_ROOT_PATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot
CoreSimulator 802.6 - Device: iPhone 13 Pro Max (9E3F13A7-A78E-4332-B1F0-53D877438EB1) - Runtime: iOS 15.4 (19E240) - DeviceType: iPhone 13 Pro Max
dyld4 config: DYLD_ROOT_PATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot
abort() called

Kernel Triage:
VM - pmap_enter failed with resource shortage
VM - pmap_enter failed with resource shortage
VM - pmap_enter failed with resource shortage
VM - pmap_enter failed with resource shortage
VM - pmap_enter failed with resource shortage

Thread 0 Crashed:: tid_103 Dispatch queue: com.apple.main-thread
0 ??? 0x100d14940 ???
1 0x101314054 ???
2 libsystem_pthread.dylib 0x11b6761ff pthread_kill + 263
3 libsystem_c.dylib 0x11b56e751 __abort + 139
4 libsystem_c.dylib 0x11b56e6c6 abort + 145
5 libmonosgen-2.0.dylib 0x109ebeb49 mono_log_write_os_log + 361
6 libmonosgen-2.0.dylib 0x10a085668 monoeg_g_logv + 168
7 libmonosgen-2.0.dylib 0x10a085802 monoeg_g_log + 130
8 libmonosgen-2.0.dylib 0x109fbaef9 load_aot_module + 3065
9 libmonosgen-2.0.dylib 0x109de945d mono_assembly_request_load_from + 1373
10 libmonosgen-2.0.dylib 0x109de8e5d mono_assembly_request_open + 653
11 libmonosgen-2.0.dylib 0x109deae60 mono_assembly_open + 96
12 libxamarin-dotnet-debug.dylib 0x10986f77f xamarin_assembly_preload_hook + 927
13 libmonosgen-2.0.dylib 0x109deb637 invoke_assembly_preload_hook + 71
14 libmonosgen-2.0.dylib 0x109deb819 mono_assembly_load_corlib + 169
15 libmonosgen-2.0.dylib 0x109de571b mono_init_internal + 587
16 libmonosgen-2.0.dylib 0x109f2f04d mini_init + 1373
17 libmonosgen-2.0.dylib 0x109f96fae mono_jit_init_version + 14
18 libxamarin-dotnet-debug.dylib 0x1098697ec xamarin_bridge_initialize + 172
19 libxamarin-dotnet-debug.dylib 0x10986fe6c xamarin_main + 1388
20 Microsoft.NetConf2021.Maui 0x100babd04 0x100ae2000 + 826628
21 dyld_sim 0x109443f21 start_sim + 10
22 dyld 0x200f2e51e start + 462

Thread 1:: com.apple.rosetta.exceptionserver
0 ??? 0x7ff7ffe199a4 ???
1 ??? 0x7ff7ffe32208 ???

Thread 2:
0 ??? 0x7ff7ffe37814 ???

Thread 3:: SGen worker
0 ??? 0x100d14940 ???
1 0x1012c3324 ???
2 libsystem_pthread.dylib 0x11b676a6f _pthread_cond_wait + 1249
3 libmonosgen-2.0.dylib 0x109f17f73 thread_func + 243
4 libsystem_pthread.dylib 0x11b6764e1 _pthread_start + 125
5 libsystem_pthread.dylib 0x11b671f6b thread_start + 15

Thread 0 crashed with X86 Thread State (64-bit):
rax: 0x0000000000000000 rbx: 0x0000000200fa9600 rcx: 0x0000000000000000 rdx: 0x0000000000000000
rdi: 0x0000000305abfc60 rsi: 0x0000000000000003 rbp: 0x0000000000989680 rsp: 0x0000000000000000
r8: 0x0000000305abfc58 r9: 0x0000000000989680 r10: 0x0000000200fa9600 r11: 0x000000000000007f
r12: 0x0000000000000103 r13: 0x00006000033c0240 r14: 0x0000000000000006 r15: 0x0000000000000016
rip: rfl: 0x0000000000000283
tmp0: 0xffffffffffffffff tmp1: 0x0000000100d14914 tmp2: 0x000000014fb83950

Binary Images:
0x0 - 0xffffffffffffffff ??? () <00000000-0000-0000-0000-000000000000> ???
0x11b670000 - 0x11b67bfff libsystem_pthread.dylib (
) <2f6c275d-7e14-3d31-a924-e1bb41d2415f> /usr/lib/system/libsystem_pthread.dylib
0x11b4f0000 - 0x11b575fff libsystem_c.dylib () /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/system/libsystem_c.dylib
0x109dde000 - 0x10a295fff libmonosgen-2.0.dylib (
) <662c7583-d821-30f2-8b95-e26783b7524a> /Users/USER/Library/Developer/CoreSimulator/Devices/9E3F13A7-A78E-4332-B1F0-53D877438EB1/data/Containers/Bundle/Application/D1AC16F9-87DC-4A2E-9374-B8B66A3C2585/Microsoft.NetConf2021.Maui.app/libmonosgen-2.0.dylib
0x109828000 - 0x109877fff libxamarin-dotnet-debug.dylib () <68e18036-047f-394d-9ec6-48f0e358a83a> /Users/USER/Library/Developer/CoreSimulator/Devices/9E3F13A7-A78E-4332-B1F0-53D877438EB1/data/Containers/Bundle/Application/D1AC16F9-87DC-4A2E-9374-B8B66A3C2585/Microsoft.NetConf2021.Maui.app/libxamarin-dotnet-debug.dylib
0x100ae2000 - 0x100bfdfff com.Microsoft.NetConf2021.Maui.2 (1.0) <7a8d8f01-46be-3374-98c2-c586335d6b03> /Users/USER/Library/Developer/CoreSimulator/Devices/9E3F13A7-A78E-4332-B1F0-53D877438EB1/data/Containers/Bundle/Application/D1AC16F9-87DC-4A2E-9374-B8B66A3C2585/Microsoft.NetConf2021.Maui.app/Microsoft.NetConf2021.Maui
0x109442000 - 0x10948ffff dyld_sim (
) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/dyld_sim
0x200f29000 - 0x200f94fff dyld (*) /usr/lib/dyld

Error Formulating Crash Report:
dyld_process_snapshot_get_shared_cache failed

EOF


Full Report

{"app_name":"Microsoft.NetConf2021.Maui","timestamp":"2022-04-28 08:54:38.00 +0200","app_version":"1.0","slice_uuid":"7a8d8f01-46be-3374-98c2-c586335d6b03","build_version":"1","platform":7,"bundleID":"com.Microsoft.NetConf2021.Maui.2","share_with_app_devs":0,"is_first_party":0,"bug_type":"309","os_version":"macOS 12.3.1 (21E258)","incident_id":"D5CFB024-664B-4824-B512-8451556F4BD0","name":"Microsoft.NetConf2021.Maui"}
{
"uptime" : 170,
"procLaunch" : "2022-04-28 08:53:51.1177 +0200",
"procRole" : "Foreground",
"version" : 2,
"userID" : 501,
"deployVersion" : 210,
"modelCode" : "MacBookPro18,3",
"procStartAbsTime" : 3425650368,
"coalitionID" : 682,
"osVersion" : {
"train" : "macOS 12.3.1",
"build" : "21E258",
"releaseType" : "User"
},
"captureTime" : "2022-04-28 08:54:27.8483 +0200",
"incident" : "D5CFB024-664B-4824-B512-8451556F4BD0",
"bug_type" : "309",
"pid" : 1241,
"procExitAbsTime" : 4307164829,
"translated" : true,
"cpuType" : "X86-64",
"procName" : "Microsoft.NetConf2021.Maui",
"procPath" : "/Users/USER/Library/Developer/CoreSimulator/Devices/9E3F13A7-A78E-4332-B1F0-53D877438EB1/data/Containers/Bundle/Application/D1AC16F9-87DC-4A2E-9374-B8B66A3C2585/Microsoft.NetConf2021.Maui.app/Microsoft.NetConf2021.Maui",
"bundleInfo" : {"CFBundleShortVersionString":"1.0","CFBundleVersion":"1","CFBundleIdentifier":"com.Microsoft.NetConf2021.Maui.2"},
"storeInfo" : {"deviceIdentifierForVendor":"C3449EB0-2070-5432-89E2-6E015E6356DA","thirdParty":true},
"parentProc" : "launchd_sim",
"parentPid" : 705,
"coalitionName" : "com.apple.CoreSimulator.SimDevice.9E3F13A7-A78E-4332-B1F0-53D877438EB1",
"crashReporterKey" : "36ADD537-C451-3D92-0A9A-BB2715C46877",
"responsiblePid" : 652,
"responsibleProc" : "SimulatorTrampoline",
"sip" : "enabled",
"isCorpse" : 1,
"exception" : {"codes":"0x0000000000000000, 0x0000000000000000","rawCodes":[0,0],"type":"EXC_CRASH","signal":"SIGABRT"},
"ktriageinfo" : "VM - pmap_enter failed with resource shortage\nVM - pmap_enter failed with resource shortage\nVM - pmap_enter failed with resource shortage\nVM - pmap_enter failed with resource shortage\nVM - pmap_enter failed with resource shortage\n",
"asi" : {"dyld_sim":["dyld4 config: DYLD_ROOT_PATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot"],"libsystem_sim_platform.dylib":["CoreSimulator 802.6 - Device: iPhone 13 Pro Max (9E3F13A7-A78E-4332-B1F0-53D877438EB1) - Runtime: iOS 15.4 (19E240) - DeviceType: iPhone 13 Pro Max"],"dyld":["dyld4 config: DYLD_ROOT_PATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot"],"libsystem_c.dylib":["abort() called"]},
"extMods" : {"caller":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"system":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"targeted":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"warnings":0},
"faultingThread" : 0,
"threads" : [{"triggered":true,"id":12245,"threadState":{"flavor":"x86_THREAD_STATE","rbp":{"value":10000000},"r12":{"value":259},"rosetta":{"tmp2":{"value":5632440656},"tmp1":{"value":4308683028},"tmp0":{"value":18446744073709551615}},"rbx":{"value":8606356992,"symbolLocation":0,"symbol":"_main_thread"},"r8":{"value":12980059224},"r15":{"value":22},"r10":{"value":8606356992,"symbolLocation":0,"symbol":"_main_thread"},"rdx":{"value":0},"rdi":{"value":12980059232},"r9":{"value":10000000},"r13":{"value":105553170530880},"rflags":{"value":643},"rax":{"value":0},"rsp":{"value":0},"r11":{"value":127},"rcx":{"value":0},"r14":{"value":6},"rsi":{"value":3}},"name":"tid_103","queue":"com.apple.main-thread","frames":[{"imageOffset":4308683072,"imageIndex":0},{"imageOffset":4314972244,"region":"","imageIndex":0},{"imageOffset":25087,"symbol":"pthread_kill","symbolLocation":263,"imageIndex":1},{"imageOffset":517969,"symbol":"__abort","symbolLocation":139,"imageIndex":2},{"imageOffset":517830,"symbol":"abort","symbolLocation":145,"imageIndex":2},{"imageOffset":920393,"symbol":"mono_log_write_os_log","symbolLocation":361,"imageIndex":3},{"imageOffset":2782824,"symbol":"monoeg_g_logv","symbolLocation":168,"imageIndex":3},{"imageOffset":2783234,"symbol":"monoeg_g_log","symbolLocation":130,"imageIndex":3},{"imageOffset":1953529,"symbol":"load_aot_module","symbolLocation":3065,"imageIndex":3},{"imageOffset":46173,"symbol":"mono_assembly_request_load_from","symbolLocation":1373,"imageIndex":3},{"imageOffset":44637,"symbol":"mono_assembly_request_open","symbolLocation":653,"imageIndex":3},{"imageOffset":52832,"symbol":"mono_assembly_open","symbolLocation":96,"imageIndex":3},{"imageOffset":292735,"symbol":"xamarin_assembly_preload_hook","symbolLocation":927,"imageIndex":4},{"imageOffset":54839,"symbol":"invoke_assembly_preload_hook","symbolLocation":71,"imageIndex":3},{"imageOffset":55321,"symbol":"mono_assembly_load_corlib","symbolLocation":169,"imageIndex":3},{"imageOffset":30491,"symbol":"mono_init_internal","symbolLocation":587,"imageIndex":3},{"imageOffset":1380429,"symbol":"mini_init","symbolLocation":1373,"imageIndex":3},{"imageOffset":1806254,"symbol":"mono_jit_init_version","symbolLocation":14,"imageIndex":3},{"imageOffset":268268,"symbol":"xamarin_bridge_initialize","symbolLocation":172,"imageIndex":4},{"imageOffset":294508,"symbol":"xamarin_main","symbolLocation":1388,"imageIndex":4},{"imageOffset":826628,"imageIndex":5},{"imageOffset":7969,"symbol":"start_sim","symbolLocation":10,"imageIndex":6},{"imageOffset":21790,"symbol":"start","symbolLocation":462,"imageIndex":7}]},{"id":12247,"name":"com.apple.rosetta.exceptionserver","frames":[{"imageOffset":140703126624676,"imageIndex":0},{"imageOffset":140703126725128,"imageIndex":0}]},{"id":12611,"frames":[{"imageOffset":140703126747156,"imageIndex":0}]},{"id":12619,"name":"SGen worker","frames":[{"imageOffset":4308683072,"imageIndex":0},{"imageOffset":4314641188,"region":"","imageIndex":0},{"imageOffset":27247,"symbol":"_pthread_cond_wait","symbolLocation":1249,"imageIndex":1},{"imageOffset":1286003,"symbol":"thread_func","symbolLocation":243,"imageIndex":3},{"imageOffset":25825,"symbol":"_pthread_start","symbolLocation":125,"imageIndex":1},{"imageOffset":8043,"symbol":"thread_start","symbolLocation":15,"imageIndex":1}]}],
"usedImages" : [
{
"size" : 0,
"source" : "A",
"base" : 0,
"uuid" : "00000000-0000-0000-0000-000000000000"
},
{
"source" : "P",
"arch" : "x86_64",
"base" : 4754702336,
"size" : 49152,
"uuid" : "2f6c275d-7e14-3d31-a924-e1bb41d2415f",
"path" : "/usr/lib/system/libsystem_pthread.dylib",
"name" : "libsystem_pthread.dylib"
},
{
"source" : "P",
"arch" : "x86_64",
"base" : 4753129472,
"size" : 548864,
"uuid" : "f6067e2a-6779-322c-a961-25c10048631f",
"path" : "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/system/libsystem_c.dylib",
"name" : "libsystem_c.dylib"
},
{
"source" : "P",
"arch" : "x86_64",
"base" : 4460503040,
"size" : 4947968,
"uuid" : "662c7583-d821-30f2-8b95-e26783b7524a",
"path" : "/Users/USER/Library/Developer/CoreSimulator/Devices/9E3F13A7-A78E-4332-B1F0-53D877438EB1/data/Containers/Bundle/Application/D1AC16F9-87DC-4A2E-9374-B8B66A3C2585/Microsoft.NetConf2021.Maui.app/libmonosgen-2.0.dylib",
"name" : "libmonosgen-2.0.dylib"
},
{
"source" : "P",
"arch" : "x86_64",
"base" : 4454514688,
"size" : 327680,
"uuid" : "68e18036-047f-394d-9ec6-48f0e358a83a",
"path" : "/Users/USER/Library/Developer/CoreSimulator/Devices/9E3F13A7-A78E-4332-B1F0-53D877438EB1/data/Containers/Bundle/Application/D1AC16F9-87DC-4A2E-9374-B8B66A3C2585/Microsoft.NetConf2021.Maui.app/libxamarin-dotnet-debug.dylib",
"name" : "libxamarin-dotnet-debug.dylib"
},
{
"source" : "P",
"arch" : "x86_64",
"base" : 4306378752,
"CFBundleShortVersionString" : "1.0",
"CFBundleIdentifier" : "com.Microsoft.NetConf2021.Maui.2",
"size" : 1163264,
"uuid" : "7a8d8f01-46be-3374-98c2-c586335d6b03",
"path" : "/Users/USER/Library/Developer/CoreSimulator/Devices/9E3F13A7-A78E-4332-B1F0-53D877438EB1/data/Containers/Bundle/Application/D1AC16F9-87DC-4A2E-9374-B8B66A3C2585/Microsoft.NetConf2021.Maui.app/Microsoft.NetConf2021.Maui",
"name" : "Microsoft.NetConf2021.Maui",
"CFBundleVersion" : "1"
},
{
"source" : "P",
"arch" : "x86_64",
"base" : 4450426880,
"size" : 319488,
"uuid" : "d5f18ce9-9569-30ea-86b1-355b990260dd",
"path" : "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/dyld_sim",
"name" : "dyld_sim"
},
{
"source" : "P",
"arch" : "x86_64",
"base" : 8605831168,
"size" : 442368,
"uuid" : "dd9e80de-fb3b-349b-96a4-46874ad34d11",
"path" : "/usr/lib/dyld",
"name" : "dyld"
}
],
"vmSummary" : "ReadOnly portion of Libraries: Total=1.2G resident=0K(0%) swapped_out_or_unallocated=1.2G(100%)\nWritable regions: Total=745.5M written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=745.5M(100%)\n\n VIRTUAL REGION \nREGION TYPE SIZE COUNT (non-coalesced) \n=========== ======= ======= \nActivity Tracing 256K 1 \nKernel Alloc Once 8K 1 \nMALLOC 182.4M 30 \nMALLOC guard page 64K 3 \nMALLOC_NANO (reserved) 384.0M 1 reserved VM address space (unallocated)\nRosetta Arena 4096K 2 \nRosetta Generic 2652K 660 \nRosetta IndirectBranch 256K 1 \nRosetta JIT 128.0M 1 \nRosetta Return Stack 60K 6 \nRosetta Thread Context 60K 6 \nSTACK GUARD 4K 1 \nStack 9228K 3 \nStack Guard 56.0M 2 \nVM_ALLOCATE 13.8M 15 \nVM_ALLOCATE (reserved) 16.5M 4 reserved VM address space (unallocated)\n__DATA 31.8M 944 \n__DATA_CONST 65.8M 740 \n__DATA_DIRTY 84K 11 \n__FONT_DATA 4K 1 \n__LINKEDIT 501.9M 759 \n__TEXT 691.6M 757 \n__UNICODE 592K 1 \ndyld private memory 2048K 2 \nmapped file 6.1G 35 \nshared memory 16K 1 \n=========== ======= ======= \nTOTAL 8.1G 3988 \nTOTAL, minus reserved VM space 7.7G 3988 \n",
"legacyInfo" : {
"threadTriggered" : {
"name" : "tid_103",
"queue" : "com.apple.main-thread"
}
},
"trialInfo" : {
"rollouts" : [
{
"rolloutId" : "6112e14f37f5d11121dcd519",
"factorPackIds" : {
"SIRI_TEXT_TO_SPEECH" : "625de77818a7dd465be99423"
},
"deploymentId" : 240000109
},
{
"rolloutId" : "6112dda2fc54bc3389840642",
"factorPackIds" : {
"SIRI_DICTATION_ASSETS" : "6254a7bdc34a1e77c8f0765f"
},
"deploymentId" : 240000108
}
],
"experiments" : [

]
},
"reportNotes" : [
"dyld_process_snapshot_get_shared_cache failed"
]
}

Model: MacBookPro18,3, BootROM 7459.101.3, proc 10:8:2 processors, 16 GB, SMC
Graphics: Apple M1 Pro, Apple M1 Pro, Built-In
Display: Color LCD, 3024 x 1964 Retina, Main, MirrorOff, Online
Memory Module: LPDDR5
AirPort: Wi-Fi, wl0: Feb 8 2022 01:51:44 version 20.90.39.0.8.7.114 FWID 01-510a2aee
Bluetooth: Version (null), 0 services, 0 devices, 0 incoming serial ports
Network Service: Wi-Fi, AirPort, en0
USB Device: USB31Bus
USB Device: USB31Bus
USB Device: USB31Bus
Thunderbolt Bus: MacBook Pro, Apple Inc.
Thunderbolt Bus: MacBook Pro, Apple Inc.
Thunderbolt Bus: MacBook Pro, Apple Inc.


And this is terminal log:

Microsoft (R) Build Engine version 17.2.0+41abc5629 for .NET
Copyright (C) Microsoft Corporation. All rights reserved.

Determining projects to restore...
All projects are up-to-date for restore.
SharedMauiLib -> /Users/mbarrera/Src/Git/dotnet-podcasts/src/Lib/SharedMauiLib/bin/Debug/net6.0-ios/SharedMauiLib.dll
Podcast.Components -> /Users/mbarrera/Src/Git/dotnet-podcasts/src/Web/Components/bin/Debug/net6.0/Podcast.Components.dll
Detected signing identity:

Provisioning Profile: "iOS Team Provisioning Profile: com.Microsoft.NetConf2021.Maui.2" (5103e99a-451e-4e86-87c2-f56959d56b06)
Bundle Id: com.Microsoft.NetConf2021.Maui.2
App Id: L9D8MDWQ3R.com.Microsoft.NetConf2021.Maui.2

Microsoft.NetConf2021.Maui -> /Users/mbarrera/Src/Git/dotnet-podcasts/src/Mobile/bin/Debug/net6.0-ios/iossimulator-x64/Microsoft.NetConf2021.Maui.dll
Optimizing assemblies for size, which may change the behavior of the app. Be sure to test after publishing. See: https://aka.ms/dotnet-illink
objc[1533]: Class CDPCABackupRecoveryReporter is implemented in both /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/CoreCDPInternal.framework/CoreCDPInternal (0x15386f890) and /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/CoreCDP.framework/CoreCDP (0x14c94aa88). One of the two will be used. Which one is undefined.
objc[1533]: Class CDPCAReporter is implemented in both /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/CoreCDPInternal.framework/CoreCDPInternal (0x15386edf0) and /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/CoreCDP.framework/CoreCDP (0x14c94ac18). One of the two will be used. Which one is undefined.
2022-04-28 09:06:32.912935+0200 Microsoft.NetConf2021.Maui[1533:20258] Microsoft.iOS: Socket error while connecting to IDE on 127.0.0.1:10000: Connection refused
2022-04-28 09:06:32.947114+0200 Microsoft.NetConf2021.Maui[1533:20214] error: Failed to load AOT module 'System.Private.CoreLib' while running in aot-only mode: doesn't match assembly.

=================================================================
Native Crash Reporting

Got a SIGABRT while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries
used by your application.

=================================================================
Native stacktrace:

0x10e120a85 - /Users/mbarrera/Library/Developer/CoreSimulator/Devices/9E3F13A7-A78E-4332-B1F0-53D877438EB1/data/Containers/Bundle/Application/C8BDD5A9-23FD-4841-A929-43E5B2BCF9E6/Microsoft.NetConf2021.Maui.app/libmonosgen-2.0.dylib : mono_dump_native_crash_info
0x10e0c072e - /Users/mbarrera/Library/Developer/CoreSimulator/Devices/9E3F13A7-A78E-4332-B1F0-53D877438EB1/data/Containers/Bundle/Application/C8BDD5A9-23FD-4841-A929-43E5B2BCF9E6/Microsoft.NetConf2021.Maui.app/libmonosgen-2.0.dylib : mono_handle_native_crash
0x10e120392 - /Users/mbarrera/Library/Developer/CoreSimulator/Devices/9E3F13A7-A78E-4332-B1F0-53D877438EB1/data/Containers/Bundle/Application/C8BDD5A9-23FD-4841-A929-43E5B2BCF9E6/Microsoft.NetConf2021.Maui.app/libmonosgen-2.0.dylib : sigabrt_signal_handler
0x11eee3dfd - /usr/lib/system/libsystem_platform.dylib : _sigtramp
0x4e2e74666f736f72 - Unknown
0x11f6576b7 - /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/system/libsystem_c.dylib : abort
0x10dfa7b49 - /Users/mbarrera/Library/Developer/CoreSimulator/Devices/9E3F13A7-A78E-4332-B1F0-53D877438EB1/data/Containers/Bundle/Application/C8BDD5A9-23FD-4841-A929-43E5B2BCF9E6/Microsoft.NetConf2021.Maui.app/libmonosgen-2.0.dylib : mono_log_write_os_log
0x10e16e668 - /Users/mbarrera/Library/Developer/CoreSimulator/Devices/9E3F13A7-A78E-4332-B1F0-53D877438EB1/data/Containers/Bundle/Application/C8BDD5A9-23FD-4841-A929-43E5B2BCF9E6/Microsoft.NetConf2021.Maui.app/libmonosgen-2.0.dylib : monoeg_g_logv
0x10e16e802 - /Users/mbarrera/Library/Developer/CoreSimulator/Devices/9E3F13A7-A78E-4332-B1F0-53D877438EB1/data/Containers/Bundle/Application/C8BDD5A9-23FD-4841-A929-43E5B2BCF9E6/Microsoft.NetConf2021.Maui.app/libmonosgen-2.0.dylib : monoeg_g_log
0x10e0a3ef9 - /Users/mbarrera/Library/Developer/CoreSimulator/Devices/9E3F13A7-A78E-4332-B1F0-53D877438EB1/data/Containers/Bundle/Application/C8BDD5A9-23FD-4841-A929-43E5B2BCF9E6/Microsoft.NetConf2021.Maui.app/libmonosgen-2.0.dylib : load_aot_module
0x10ded245d - /Users/mbarrera/Library/Developer/CoreSimulator/Devices/9E3F13A7-A78E-4332-B1F0-53D877438EB1/data/Containers/Bundle/Application/C8BDD5A9-23FD-4841-A929-43E5B2BCF9E6/Microsoft.NetConf2021.Maui.app/libmonosgen-2.0.dylib : mono_assembly_request_load_from
0x10ded1e5d - /Users/mbarrera/Library/Developer/CoreSimulator/Devices/9E3F13A7-A78E-4332-B1F0-53D877438EB1/data/Containers/Bundle/Application/C8BDD5A9-23FD-4841-A929-43E5B2BCF9E6/Microsoft.NetConf2021.Maui.app/libmonosgen-2.0.dylib : mono_assembly_request_open
0x10ded3e60 - /Users/mbarrera/Library/Developer/CoreSimulator/Devices/9E3F13A7-A78E-4332-B1F0-53D877438EB1/data/Containers/Bundle/Application/C8BDD5A9-23FD-4841-A929-43E5B2BCF9E6/Microsoft.NetConf2021.Maui.app/libmonosgen-2.0.dylib : mono_assembly_open
0x10d95877f - /Users/mbarrera/Library/Developer/CoreSimulator/Devices/9E3F13A7-A78E-4332-B1F0-53D877438EB1/data/Containers/Bundle/Application/C8BDD5A9-23FD-4841-A929-43E5B2BCF9E6/Microsoft.NetConf2021.Maui.app/libxamarin-dotnet-debug.dylib : xamarin_assembly_preload_hook
0x10ded4637 - /Users/mbarrera/Library/Developer/CoreSimulator/Devices/9E3F13A7-A78E-4332-B1F0-53D877438EB1/data/Containers/Bundle/Application/C8BDD5A9-23FD-4841-A929-43E5B2BCF9E6/Microsoft.NetConf2021.Maui.app/libmonosgen-2.0.dylib : invoke_assembly_preload_hook
0x10ded4819 - /Users/mbarrera/Library/Developer/CoreSimulator/Devices/9E3F13A7-A78E-4332-B1F0-53D877438EB1/data/Containers/Bundle/Application/C8BDD5A9-23FD-4841-A929-43E5B2BCF9E6/Microsoft.NetConf2021.Maui.app/libmonosgen-2.0.dylib : mono_assembly_load_corlib
0x10dece71b - /Users/mbarrera/Library/Developer/CoreSimulator/Devices/9E3F13A7-A78E-4332-B1F0-53D877438EB1/data/Containers/Bundle/Application/C8BDD5A9-23FD-4841-A929-43E5B2BCF9E6/Microsoft.NetConf2021.Maui.app/libmonosgen-2.0.dylib : mono_init_internal
0x10e01804d - /Users/mbarrera/Library/Developer/CoreSimulator/Devices/9E3F13A7-A78E-4332-B1F0-53D877438EB1/data/Containers/Bundle/Application/C8BDD5A9-23FD-4841-A929-43E5B2BCF9E6/Microsoft.NetConf2021.Maui.app/libmonosgen-2.0.dylib : mini_init
0x10e07ffae - /Users/mbarrera/Library/Developer/CoreSimulator/Devices/9E3F13A7-A78E-4332-B1F0-53D877438EB1/data/Containers/Bundle/Application/C8BDD5A9-23FD-4841-A929-43E5B2BCF9E6/Microsoft.NetConf2021.Maui.app/libmonosgen-2.0.dylib : mono_jit_init_version
0x10d9527ec - /Users/mbarrera/Library/Developer/CoreSimulator/Devices/9E3F13A7-A78E-4332-B1F0-53D877438EB1/data/Containers/Bundle/Application/C8BDD5A9-23FD-4841-A929-43E5B2BCF9E6/Microsoft.NetConf2021.Maui.app/libxamarin-dotnet-debug.dylib : xamarin_bridge_initialize
0x10d958e6c - /Users/mbarrera/Library/Developer/CoreSimulator/Devices/9E3F13A7-A78E-4332-B1F0-53D877438EB1/data/Containers/Bundle/Application/C8BDD5A9-23FD-4841-A929-43E5B2BCF9E6/Microsoft.NetConf2021.Maui.app/libxamarin-dotnet-debug.dylib : xamarin_main
0x104c94d04 - /Users/mbarrera/Library/Developer/CoreSimulator/Devices/9E3F13A7-A78E-4332-B1F0-53D877438EB1/data/Containers/Bundle/Application/C8BDD5A9-23FD-4841-A929-43E5B2BCF9E6/Microsoft.NetConf2021.Maui.app/Microsoft.NetConf2021.Maui :
0x10d52cf21 - Unknown
0x204f0551e - Unknown
0x204f00000 - Unknown

=================================================================
Basic Fault Address Reporting

Memory around native instruction pointer (0x11f6c200e):0x11f6c1ffe ff ff c3 90 90 90 b8 48 01 00 02 49 89 ca 0f 05 .......H...I....
0x11f6c200e 73 08 48 89 c7 e9 ad a1 ff ff c3 90 90 90 b8 53 s.H............S
0x11f6c201e 00 00 02 49 89 ca 0f 05 73 08 48 89 c7 e9 95 a1 ...I....s.H.....
0x11f6c202e ff ff c3 90 90 90 b8 83 01 00 02 49 89 ca 0f 05 ...........I....

Label with html content does not render nothing on MacOS

With .NET MAUI RC2

On EpisodeDetailPage. We have this label:
<Label Style="{StaticResource BodySLabelStyle}" TextType="Html" Text="{Binding Episode.Description}" />

On MacOS does not render nothing. On Android works fine.

Enabling Nav bar and using the back button causing a crash

I used the Dependency injection style used in the Podcast App for my own test app. Everything works fine but-

After enabling the nav bar using Shell.NavBarIsVisible="True" in one of the pages and clicking on Back button (to go back ) crashed the App with below exception-

The specified child already has a parent. You must call removeView() on the child's parent first.

Is that a known bug in the MAUI Dependency Injection? Any workarounds?
VS 2022 - 17.2.0 Preview 1

Ios Constructor Error at VS Mac 2022(preview)

IOS Project fails at start with below error at Visual Studio Mac 2022(Preview), while it can build without an issue at Windows 2022(Preview) with remote mac connection. Does Mac 2022 preview not supported yet or any configuration is required for mac builds?

  • No parameterless constructor defined for type '...DiscoverPage'

Error when running Mac build

Just installed MAUI following the instructions for MacOS, cloned the repo, executed the docker command and tried to run locally the mac app.

Error when running dotnet build src/Mobile/Microsoft.NetConf2021.Maui.csproj -t:run -f net6.0-maccatalyst

Microsoft(R) Build Engine versão 17.1.0+ae57d105c para .NET
Copyright (C) Microsoft Corporation. Todos os direitos reservados.

  Determinando os projetos a serem restaurados...
  Todos os projetos estão atualizados para restauração.
  Podcast.Components -> /Users/afucher/Projects/dotnet-podcasts/src/Web/Components/bin/Debug/net6.0/Podcast.Components.dll
  Detected signing identity:

    Bundle Id: com.Microsoft.NetConf2021.Maui
    App Id: com.Microsoft.NetConf2021.Maui
Properties/launchSettings.json : error : The path '../../../../../../../../../Users/afucher/Projects/dotnet-podcasts/src/Mobile/Properties/launchSettings.json' would result in a file outside of the app bundle and cannot be used. [/Users/afucher/Projects/dotnet-podcasts/src/Mobile/Microsoft.NetConf2021.Maui.csproj]
Properties/launchSettings.json : error :          [/Users/afucher/Projects/dotnet-podcasts/src/Mobile/Microsoft.NetConf2021.Maui.csproj]

FALHA da compilação.

Properties/launchSettings.json : error : The path '../../../../../../../../../Users/afucher/Projects/dotnet-podcasts/src/Mobile/Properties/launchSettings.json' would result in a file outside of the app bundle and cannot be used. [/Users/afucher/Projects/dotnet-podcasts/src/Mobile/Microsoft.NetConf2021.Maui.csproj]
Properties/launchSettings.json : error :          [/Users/afucher/Projects/dotnet-podcasts/src/Mobile/Microsoft.NetConf2021.Maui.csproj]
    0 Aviso(s)
    1 Erro(s)

iOS App Store button doesn't work

I'm probably jumping the gun, but the iOS link to download in the App Store is a hash.

https://dotnetpodcasts.azurewebsites.net/

<a href="#" title="Download on the App Store">
    <img src="images/download-app_store.png" alt="Download on the App Store" loading="lazy">
</a>

Maybe you've got an element selector in some JavaScript somewhere, but clicking just goes to #.

Should this app be available?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.