Airlock

main

Airlock — Adobe Launch (Tags) extension for AEP Mobile SDK. JavaScript rules engine for iOS event payloads.
WaffledogHQ/airlock-ios

Airlock for iOS

Status Build Swift Versions Platforms License

JavaScript rules engine for Adobe Experience Platform Mobile SDK events. Drop-in extension that lets Adobe Launch (Tags) authors enrich, mutate, suppress, or pass through trackState / trackAction payloads with on-device JavaScript — no app rebuild required.

Part of the Mission Control suite, developed by Aerobee.

What "Public Beta" means

The cross-platform behavioural contract is stable — iOS and Android parity is tested with shared fixtures, and the API surface is small. We're using a Beta tag because:

  • Pre-1.0 SemVer: minor-version bumps may include breaking changes. Each release's breaking changes are listed in CHANGELOG.md.
  • Schema may still move: the rules.json format and Launch UI surface are settled but not frozen.
  • Production use is at your own risk — we recommend pinning to an exact version and testing in non-production first.

Once we cut 1.0, breaking changes will be reserved for major version bumps.

Install (Swift Package Manager)

In Xcode → File → Add Packages…:

https://github.com/AerobeeHQ/airlock-ios

Or in Package.swift:

.package(url: "https://github.com/AerobeeHQ/airlock-ios", from: "0.3.17")

Add Airlock to the dependencies of any target that needs it.

Register at app launch

import AEPCore
import AEPIdentity
import AEPLifecycle
import AEPAnalytics
import AEPAssurance
import Airlock

MobileCore.registerExtensions([
    Identity.self,
    Lifecycle.self,
    Analytics.self,
    Assurance.self,
    Airlock.self,
]) {
    MobileCore.configureWith(appId: "<your-launch-app-id>")
    MobileCore.lifecycleStart(additionalContextData: nil)
}

That's it. Authoring of rules, macros, lookup tables, accumulators, and derived metrics happens entirely in the Adobe Launch UI.

Sample app

TestApp/ is a runnable SwiftUI harness with Assurance pre-wired. Copy TestApp/config.example.json to TestApp/config.json, fill in your Launch environment file ID, open the Xcode project, and run.

Documentation

Architecture in 30 seconds

  1. App calls MobileCore.track(action:data:) or MobileCore.track(state:data:).
  2. AEP EventHub routes the event; Airlock caches it.
  3. An Adobe Launch rule with the Evaluate JavaScript Rules action fires; Airlock runs the script in a sandboxed JavaScriptCore context with event and sharedState available.
  4. Script return value → enriched event dispatched as Airlock Processed Track (or suppressed if null/undefined).
  5. A downstream Launch rule picks up the enriched event and sends it to Analytics.

See How It Works for the full mechanism and the two-rule pattern.

Contributing

We develop on a private GitLab instance and mirror releases here. Bug reports and discussions are very welcome via Issues and Discussions.

Pull requests opened on GitHub will be closed with a polite redirect. If you'd like to contribute code, contact airlock@aerobee.com.au and we'll add you as a user on the GitLab instance.

Licence

Apache 2.0. See LICENSE.

Description

  • Swift Tools 5.9.0
View More Packages from this Author

Dependencies

Last updated: Thu Jul 16 2026 07:03:37 GMT-0900 (Hawaii-Aleutian Daylight Time)