Skip to content

otp-interop/elixir_pack

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Elixir Pack

Build your Elixir application for iOS with the following mix task:

mix elixir_pack TestPackage --target iphonesimulator-arm64

Offline LiveView Native Apps

Elixir Pack can build Phoenix applications to run on-device for offline support.

Add dependencies

Add elixir_pack as a dev dependency in your mix.exs file.

def deps do
  [
    {:elixir_pack, git: "https://github.com/liveview-native/elixir_pack", branch: "main"}
  ]
end

Warning

Elixir Pack requires plug_crypto v2.1.1+ to support iOS. Specify this dependency in your mix file:

def deps do
  [
    {:plug_crypto, ">= 2.1.1"}
  ]
end

Prepare for a production release

Elixir Pack will run mix release to compile your application. If making a production build, make sure to prepare the static files.

mix phx.digest

Run Elixir Pack

Run the elixir_pack mix task to create a Swift Package containing your Phoenix server and OTP for iOS.

MIX_ENV=prod mix elixir_pack native/swiftui/YourAppServer --target iphonesimulator-arm64 --target iphoneos

Run mix help elixir_pack to get more info on the supported options.

Add server to Xcode project

Open your Xcode project and add the server package as a dependency.

  1. Go to File -> Add Package Dependencies...
  2. Click the Add Local... button in the bottom left of the popup
  3. Select the server package generated by Elixir Pack (such as native/swiftui/YourAppServer)
  4. In the Add to Target dropdown, select your app's target

Setup server launch

Import the generated package, and modify your App struct to start the server on launch.

import YourAppServer

struct YourApp: App {
  init() {
    YourAppServer.start()
  }

  var body: some Scene {
    // ...
  }
}

You can optionally pass a host, port, and secretKeyBase to configure the server on startup.

Connect LiveView to the local server

Ensure your LiveView connects to the correct host and port.

struct ContentView: View {
  var body: some View {
    #LiveView(.localhost) // `.localhost` uses the default host and port
  }
}

Run the application

When you run the application, the server will start on a separate thread and the client will connect. Any logs from the server will appear in Xcode's debugger log.

Installation

If available in Hex, the package can be installed by adding elixir_pack to your list of dependencies in mix.exs:

def deps do
  [
    {:elixir_pack, "~> 0.1.0"}
  ]
end

Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/elixir_pack.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published