Releases: ruby-native/gem
Releases · ruby-native/gem
v0.10.3
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_pathsno 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
Added
- The config error screen now flags gem/native version mismatches and shows the fix: the
bundle update ruby_nativecommand for an old gem, or an Update app button for a stale app. When versions match, it names the offendingconfig/ruby_native.ymlkey.
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-platformicons: { ios:, android: }form without a flaticon:, the served config now also populates the legacyiconfield fromicons.ios(falling back toicons.android). Native binaries that predate theicons:option read onlytab.icon, so without this they showed no tab icon. An expliciticon:is always preserved.
v0.10.0
Added
- Pull-to-refresh on pages with a native navbar. Any page that renders
native_navbar_tagnow 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. Passpull_to_refresh: falsetonative_navbar_tagon 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_idandios.team_idtoconfig/ruby_native.yml; the gem then serves/.well-known/apple-app-site-associationautomatically 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:installoutput changes.
Removed
app.namedefault.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
Added
ruby_native preview --url URLpoints the cloudflared tunnel at an arbitrary upstream instead ofhttp://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
Added
- In-app review prompts. New
native_review_taghelper (andNativeReviewcomponent 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
Added
icons:option for per-platform icon names. Passicons: { ios:, android: }alongside the existingicon: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 toicon: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 usingicon:keep working unchanged.ruby_native deploy --androidtriggers an Android cloud build instead of iOS. Polling and success messaging adapt to Play Internal Testing. Pass--platform=ios|android|allfor 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_middlewareandruby_native.tunnel_cookie_middlewareafter the middleware stack was already frozen. That broke the host app entirely, includingbin/rails middlewareand every generator. Both initializers now runbefore: :build_middleware_stackso they are ordered correctly. No config changes needed.
v0.9.1
Fixed
screenshot_sign_inlambda now receives a helper object instead of the raw controller. In Rails 8.1,cookiesis private onActionController::Base, so the previouscontroller.cookies.signed.permanent[...] = ...pattern raisedNoMethodErrorand/native/screenshots/sessionreturned 500. The lambda is now yielded a small helper exposing publiccookies,request, andsessionaccessors. Breaking-but-allowed: update your initializer's lambda parameter to a name likehelperand callhelper.cookies/helper.request/helper.sessioninstead ofcontroller.cookiesetc. The 0.9.0 API had no production users to migrate.
v0.9.0
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_inlambda in your initializer, and Ruby Native captures App Store screenshots against your deployed site, signed in as a designated user. RubyNative.configureblock. Setc.screenshot_keyandc.screenshot_sign_infor the screenshot session endpoint.GET /native/screenshots/sessionendpoint 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 screenshotsCLI 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
Fixed
TunnelCookieMiddlewareno 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 anArrayofSet-Cookiestrings, matching Rack 3's contract.