I have created a fresh Phoenix app using mix phx.new.web web_interface --no-dashboard --no-ecto --no-gettext --no-mailer
inside an Umbrella app.
After following the basic installation instructions for the dependencies and changing my application.ex
to:
defmodule WebInterface.Application do
use Application
alias Desktop
alias WebInterface.{Endpoint, Telemetry, PubSub}
alias WebInterface.Live.MenuBar
@impl true
def start(_type, _args) do
children = [
Telemetry,
{Phoenix.PubSub, name: PubSub},
Endpoint,
{Desktop.Window,
[
app: :web_interface,
id: WebInterface,
title: "Market Manager",
size: {940, 980},
menubar: MenuBar,
icon: "static/images/resized_logo_5_32x32.png",
url: &WebInterface.Endpoint.url/0
]}
]
opts = [strategy: :one_for_one, name: WebInterface.Supervisor]
Supervisor.start_link(children, opts)
end
# boilerplate code bellow
end
I was able to launch my Desktop application and have it working.
However, after changing endpoint.ex
following the instruction #3 here:
I was no longer able to launch the application due to an error:
08:30:14.411 [notice] Application runtime_tools exited: :stopped
** (Mix) Could not start application web_interface: WebInterface.Application.start(:normal, []) returned an error: shutdown: failed to start child: WebInterface.Endpoint
** (EXIT) an exception was raised:
** (UndefinedFunctionError) function Phoenix.Endpoint.Supervisor.url/1 is undefined or private
(phoenix 1.7.2) Phoenix.Endpoint.Supervisor.url(WebInterface.Endpoint)
(phoenix 1.7.2) lib/phoenix/config.ex:65: Phoenix.Config.cache/3
(web_interface 2.2.0) lib/web_interface/endpoint.ex:2: WebInterface.Endpoint.url/0
(phoenix 1.7.2) lib/phoenix/endpoint/supervisor.ex:425: Phoenix.Endpoint.Supervisor.log_access_url/2
(phoenix 1.7.2) lib/phoenix/endpoint/supervisor.ex:17: Phoenix.Endpoint.Supervisor.start_link/3
(stdlib 4.1.1) supervisor.erl:414: :supervisor.do_start_child_i/3
(stdlib 4.1.1) supervisor.erl:400: :supervisor.do_start_child/2
(stdlib 4.1.1) supervisor.erl:384: anonymous fn/3 in :supervisor.start_children/2
To me, this indicates that changing Phoenix.Endpoint
to Desktop.Endpoint
is no longer necessary.
It is worth noting however, that the creation of Phoenix projects inside Umbrella applications is currently bugged (see: https://elixirforum.com/t/phoenix-1-7-welcome-page-assets-not-showing-properly/55969) but I don't think this is related.
So, after delving into the source code, I am of the opinion the documentation (https://github.com/elixir-desktop/desktop/blob/main/guides/your_first_app.md) needs to be updated, specifically:
def deps do
[
{:desktop, "~> 1.4"}
]
end
Needs to be:
def deps do
[
{:desktop, "~> 1.5"}
]
end
As v1.4 breaks with Phoenix LiveView 1.18. More info:
https://elixirforum.com/t/changing-endpoint-ex-to-use-desktop-endpoint-breaks-desktop-app/56550/3