Background
The LSWF app (Linksys/Velop mobile app) is a Cordova-based hybrid iOS app that had not been built for a long time. It needs to be brought back to a buildable state on a modern toolchain (Xcode 26 / Node 25 / macOS on Apple Silicon) so we can resume development and ship new requirements.
The app spans two repos:
- Native iOS shell "Spruce" —
github.com/linksys/Linksys
- Web/hybrid layer "Symmetry" (git submodule
Hybrid) — git.lswf.net/.../linksys-symmetry-mobile
Note: this tracking issue is filed here for visibility; the actual code lives in the two repos above (the hybrid layer is on Bitbucket, so it cannot be linked as GitHub PRs).
Goal
A developer can go from git clone to a signed build installed on a physical iPhone, by following a single reproducible SOP — without having to re-discover any of the environment/compatibility fixes.
Task breakdown
1. Build-environment compatibility (local machine setup)
2. Fix broken dependency sources (migration) — Symmetry repo
3. Cordova script / hook compatibility fixes (dual-platform safe) — Symmetry repo
4. Native compile fixes on Xcode 26 — main repo (github.com/linksys/Linksys)
5. Documentation
6. Device deployment
7. Version bump to 4.0.0
⚠️ Do not build on the iOS Simulator (Apple Silicon): the bundled SplunkMint.framework lacks an arm64-simulator slice. Use a physical device (arm64) instead.
Background
The LSWF app (Linksys/Velop mobile app) is a Cordova-based hybrid iOS app that had not been built for a long time. It needs to be brought back to a buildable state on a modern toolchain (Xcode 26 / Node 25 / macOS on Apple Silicon) so we can resume development and ship new requirements.
The app spans two repos:
github.com/linksys/LinksysHybrid) —git.lswf.net/.../linksys-symmetry-mobileGoal
A developer can go from
git cloneto a signed build installed on a physical iPhone, by following a single reproducible SOP — without having to re-discover any of the environment/compatibility fixes.Task breakdown
1. Build-environment compatibility (local machine setup)
npm/gemtraffic (SELF_SIGNED_CERT_IN_CHAIN) — trust the CA vianpm cafile+NODE_EXTRA_CA_CERTS+~/.gemrc2. Fix broken dependency sources (migration) — Symmetry repo
plugins.json: private Cordova plugins pointed at the now-defunctgit.belkin.com→ migrate togit.lswf.netSFW/package.json: 3@linksys/*scoped packages (jnap-js, symmetry-lib, grunt-localize) were served by a dead private npm registry → point to git URLs ongit.lswf.net3. Cordova script / hook compatibility fixes (dual-platform safe) — Symmetry repo
hooks/install_plugins.js: guard trailing file writes withfs.existsSyncso an iOS-only run doesn't crash on missing Android filesupdate_references_before/after.js: skip the Android-only hook only when AndroidManifest is absent (so Android builds are unaffected)4. Native compile fixes on Xcode 26 — main repo (
github.com/linksys/Linksys)linksys-bridgeframework: remove redundant#import <netinet6/in6.h>from 3 Cordova plugin files (Xcode 26 explicit-modules rejects private system headers inside a framework module)System.swift: replace the CTARGET_OS_SIMULATORmacro (no longer imported into Swift scope on modern SDKs) with Swift's native#if targetEnvironment(simulator)5. Documentation
6. Device deployment
7. Version bump to 4.0.0
release-4.0.0branch offrelease-3.6.0with the version bump (MARKETING_VERSION/CFBundleShortVersionString3.6.0 → 4.0.0; build number unchanged). Xcode 26 fixes above (PR #1412) target this branch.