Skip to content

Latest commit

 

History

History
72 lines (53 loc) · 3.7 KB

File metadata and controls

72 lines (53 loc) · 3.7 KB
permalink /ios/configuration.html
order 5
title Configuration
description How to customize a Hotwire Native iOS app.

Configuration

Hotwire Native provides a few options to customize your iOS app. We recommend making all configuration changes before instantiating a Navigator, ideally in AppDelegate.swift.

General

  • Hotwire.config.debugLoggingEnabled - Enable or disable debug logging for Turbo visits and bridge elements connecting, disconnecting, receiving/sending messages, and more.
  • Hotwire.config.applicationUserAgentPrefix - Set a custom user agent application prefix for every WKWebView instance. The library will automatically append a substring to your prefix which includes:
    • "Hotwire Native iOS; Turbo Native iOS;" - for hotwire_native_app? on your Rails server
    • "bridge-components: [your bridge components];"
    • WKWebView's default user agent string (at the beginning of the user agent)
  • Hotwire.config.showDoneButtonOnModals - When enabled, adds a UIBarButtonItem of type .done to the left navigation bar button item on screens presented modally.
  • Hotwire.config.backButtonDisplayMode - Sets the back button display mode of HotwireWebViewController.

Turbo

Hotwire.config.defaultViewController = { url in
    CustomViewController(url: url)
}
Hotwire.config.defaultNavigationController = {
    CustomNavigationController()
}
  • Hotwire.config.makeCustomWebView - Optionally customize the web views used by each Turbo Session. Ensure you return a new instance each time.

Path Configuration

  • Hotwire.config.pathConfiguration.matchQueryStrings - Enable to match the query string when applying rules in addition to the path.

Load path configuration with Hotwire.loadPathConfiguration(from:), like so:

let localPathConfigURL = Bundle.main.url(forResource: "path-configuration", withExtension: "json")!
let remotePathConfigURL = URL(string: "https://example.com/configurations/ios_v1.json")!

Hotwire.loadPathConfiguration(from: [
    .file(localPathConfigURL),
    .server(remotePathConfigURL)
])

Bridge

  • Hotwire.config.jsonEncoder - Set a custom JSON encoder when parsing bridge payloads. The custom encoder can be useful when you need to apply specific encoding strategies, like snake case vs. camel case.
  • Hotwire.config.jsonDecoder - Set a custom JSON decoder when parsing bridge payloads. The custom decoder can be useful when you need to apply specific decoding strategies, like snake case vs. camel case.

Register bridge components with Hotwire.registerBridgeComponents(), like so:

Hotwire.registerBridgeComponents([
    FormComponent.self,
    MenuComponent.self,
    OverflowMenuComponent.self,
    // ...
])