Skip to content

Releases: ruby-native/gem

v0.10.3

06 Jun 18:38

Choose a tag to compare

Fixed

  • Advanced Mode navbar buttons now appear on the first paint after a modal dismisses. When a modal's form redirected to a new screen, the destination's buttons were dropped until a manual pull-to-refresh because the view controller wasn't on screen when the signal arrived. The navbar now retries briefly until the screen settles.
  • OAuth callback paths in auth.oauth_paths no longer trip a native sign-in loop. Listing a provider's callback next to its authorize path made the iOS app treat the callback as a sign-in entry point and loop. The gem now drops any callback that duplicates a listed authorize path and warns; list only authorize paths.

v0.10.2

01 Jun 18:16

Choose a tag to compare

Added

  • The config error screen now flags gem/native version mismatches and shows the fix: the bundle update ruby_native command for an old gem, or an Update app button for a stale app. When versions match, it names the offending config/ruby_native.yml key.

Changed

  • Config errors no longer leak developer detail to end users. Shipped apps show a generic message; the Preview app adds a Change servers button and shows the unreachable server URL.

Fixed

  • Tabs that use only icons: now keep working on older native binaries. When a tab defines the per-platform icons: { ios:, android: } form without a flat icon:, the served config now also populates the legacy icon field from icons.ios (falling back to icons.android). Native binaries that predate the icons: option read only tab.icon, so without this they showed no tab icon. An explicit icon: is always preserved.

v0.10.0

26 May 04:27

Choose a tag to compare

Added

  • Pull-to-refresh on pages with a native navbar. Any page that renders native_navbar_tag now reloads when the user pulls down from the top, on both iOS and Android Normal Mode. The reload uses the current URL, which means Turbo and Inertia pages refresh correctly without any extra work. Pass pull_to_refresh: false to native_navbar_tag on a specific page to opt out. Advanced Mode already supported pull-to-refresh through Hotwire Native, so no change is needed there.
  • Linked domains for iOS. Tapping a link to your site now opens the app instead of Safari, and saved passwords from your site autofill in the app's web views. Opt-in by adding ios.bundle_id and ios.team_id to config/ruby_native.yml; the gem then serves /.well-known/apple-app-site-association automatically and the build pipeline includes the entitlement in every iOS build. See Linked domains.

Changed

  • Install generator template revamped with a uniform documentation style. Every field now has a block comment above it describing what it does, listing the options with their meanings, and noting the default. Existing apps are unaffected; only rails generate ruby_native:install output changes.

Removed

  • app.name default. RubyNative.config[:app][:name] no longer falls back to "Ruby Native" when missing from the YAML — the value was never read anywhere. If you somehow relied on the default, set the key explicitly.

v0.9.4

20 May 16:45

Choose a tag to compare

Added

  • ruby_native preview --url URL points the cloudflared tunnel at an arbitrary upstream instead of http://localhost:PORT. Useful when your Rails app runs behind a docker compose entry point that isn't directly reachable from a phone.

v0.9.3

17 May 22:03

Choose a tag to compare

Added

  • In-app review prompts. New native_review_tag helper (and NativeReview component for React and Vue) asks iOS to show the App Store rating prompt when the page loads. Apple throttles when it actually appears, so it is safe to render anywhere; it is also suppressed during screenshot runs.

v0.9.2

17 May 19:56

Choose a tag to compare

Added

  • icons: option for per-platform icon names. Pass icons: { ios:, android: } alongside the existing icon: string on navbar buttons, menu items, FABs, and tabs to use platform-specific icon identifiers. Resolves via the native platform parsed from the Ruby Native UA, falling back to icon: when the platform-specific value is missing. Available in the ERB helpers, the React package, and the Vue package. Motivated by Android needing Material Symbols names (e.g. coffee, shopping_bag) instead of the SF Symbols identifiers (cup.and.saucer, bag) that work on iOS. Additive: existing configs using icon: keep working unchanged.
  • ruby_native deploy --android triggers an Android cloud build instead of iOS. Polling and success messaging adapt to Play Internal Testing. Pass --platform=ios|android|all for explicit control; default behavior is unchanged.

Fixed

  • Rails 8.1 compatibility for the gem's middleware initializers. Rails 8.1 replaced the initializer array with a sorted graph, which could place ruby_native.oauth_middleware and ruby_native.tunnel_cookie_middleware after the middleware stack was already frozen. That broke the host app entirely, including bin/rails middleware and every generator. Both initializers now run before: :build_middleware_stack so they are ordered correctly. No config changes needed.

v0.9.1

12 May 18:58

Choose a tag to compare

Fixed

  • screenshot_sign_in lambda now receives a helper object instead of the raw controller. In Rails 8.1, cookies is private on ActionController::Base, so the previous controller.cookies.signed.permanent[...] = ... pattern raised NoMethodError and /native/screenshots/session returned 500. The lambda is now yielded a small helper exposing public cookies, request, and session accessors. Breaking-but-allowed: update your initializer's lambda parameter to a name like helper and call helper.cookies / helper.request / helper.session instead of controller.cookies etc. The 0.9.0 API had no production users to migrate.

v0.9.0

05 May 15:19

Choose a tag to compare

Added

  • Authenticated App Store screenshots from a real iOS Simulator. Generate a per-app screenshot key on the Ruby Native dashboard, register a screenshot_sign_in lambda in your initializer, and Ruby Native captures App Store screenshots against your deployed site, signed in as a designated user.
  • RubyNative.configure block. Set c.screenshot_key and c.screenshot_sign_in for the screenshot session endpoint.
  • GET /native/screenshots/session endpoint mounted by the gem engine. Validates the screenshot key, calls the configured sign-in lambda, and sets a session-scoped cookie.
  • ruby_native_screenshot_session? view helper. Returns true when the current request is part of a screenshot run, so views can render deterministically (frozen timestamps, hidden push banners, suppressed analytics).

Removed

  • ruby_native screenshots CLI command. Screenshots are now captured by Ruby Native's CI infrastructure, not by a local Playwright run. Calling the old command after upgrading prints a deprecation message and exits non-zero.

v0.8.2

29 Apr 17:40

Choose a tag to compare

Fixed

  • TunnelCookieMiddleware no longer joins multi-cookie responses with "\n". Under Rack 3 this caused browsers to drop every cookie after the first, breaking login through the Cloudflare tunnel preview. Multi-cookie responses now return an Array of Set-Cookie strings, matching Rack 3's contract.

v0.8.1

22 Apr 19:37

Choose a tag to compare

Fixed

  • Tab routing no longer cancels navigation from an unclaimed URL back to a tab's claimed URL in Normal Mode. Under Turbo this could lock up the tab bar; under Inertia the page silently failed to navigate. See #50 for details.