This document is the source of truth for how Kelpie uses AppReveal.
AppReveal has two distinct pieces. Do not conflate them.
-
The AppReveal CLI is an external command-line helper. It helps an agent connect to and operate an AppReveal-enabled app. Updating the CLI does not update the in-app SDK.
-
The AppReveal library is the in-app runtime. On iOS this is a Swift package imported by the app in debug-only builds. On Android this is a debug-only app dependency. This runtime is what actually exposes the app to external automation.
The in-app AppReveal library must never ship in release builds.
Reason:
- It uses private API.
- Shipping it in production would risk App Store rejection.
That means:
- iOS: AppReveal is linked and started only in debug builds.
- Android: AppReveal belongs in
debugImplementationonly, with no release inclusion. - Release builds must behave as if AppReveal does not exist.
Kelpie uses AppReveal for debug automation and verification, not for core product behavior.
AppReveal is used to:
- inspect visible windows and UI state
- inspect WebViews and DOM state
- drive taps and other debug interactions
- support local debug automation from an external agent
Kelpie does not depend on AppReveal for:
- browser control over the product HTTP API
- end-user features
- release functionality
The iOS integration lives in:
Current model:
- import AppReveal only behind debug-only compilation conditions
- call
AppReveal.start()only in debug - use a no-op fallback when AppReveal is not linked
Operationally, there are two separate update surfaces:
- the AppReveal CLI helper on the machine
- the Swift package used by the iOS app
Updating one does not update the other.
The Android debug integration entry point lives in:
The intended model is:
- include AppReveal only in debug dependencies
- start it only from debug code
- keep release builds free of the library
When AppReveal behavior is wrong, first identify which layer is wrong:
- CLI/helper problem
- in-app SDK/library problem
- Kelpie integration problem
Do not treat "update AppReveal" as a single action until that distinction is clear.