NOOP AI 9.3.3 DX Beta
NOOP AI 9.3.3 DX Beta
A packaging release: the sideload IPA carries the iOS widgets again, and — the half that actually
makes them useful — the App Group they read through is provisioned on the way out. No app code
changed.
Fixed
- The AltStore/SideStore IPA ships the widget extension again. It had been stripped alongside the
Watch app on the assumption that generic re-signing could not provision either. That is true of an
embedded watchOS bundle and not true of an app extension: AltStore and SideStore re-sign
NOOPWidgets.appextogether with the host app. The packaging step now removes onlyWatch/, and
the assertion that used to fail if the widget was present is inverted — it now fails if the widget
is missing, because what the bundle contains is the promise made to the person installing it. - The widget can actually read the app's data.
Tools/prepare-ios-sideload-app.sh— added
upstream with ryanbr#887 to embed the ad-hoc App Group + HealthKit capability template that AltSign needs
in order to provision and re-sign the shared container — existed in the tree with no caller in
this fork's release path. It is now invoked on the sideload bundle, after the Watch removal and
before zipping (it code-signs; any later change to the bundle would break that seal). Without it a
widget installs cleanly and then shows dashes forever, which is exactly the failure this avoids.
The resolver that picks the provisioned group at runtime (WidgetSnapshot.resolveSuiteName) was
already correct and is unchanged. - Two repairs in the macOS test target, found by running
StrandTestsfor the first time since
the 9.3.1 and 9.3.2 upstream merges — both were compile failures that no app build could reveal,
because the test target is built only byxcodebuild … test:AICoachEmptyReplyAndUrlTests(which arrived with upstream ryanbr#1087) calledparseChatContentwith
one argument, while this fork keeps the richerparseChatContent(_:isLocalServer:)that tailors
the truncation notice to local servers versus hosted gateways. Adapted to the fork's signature.project.ymlhad lostStrandiOSShared/WidgetSnapshot.swiftfrom theStrandTestssources
during the 9.3.1 merge, soWidgetSnapshotTestscould not see the type and the whole target
failed to build. Restored — and those four tests cover precisely the App Group resolver this
release now depends on.
Unchanged on purpose
- The Apple Watch app is still excluded from the sideload IPA. Sideloaders have installed embedded
watchOS bundles unreliably for years, and the failure mode is not a missing watch app but a failed
installation — the tester gets nothing. A free Apple ID's three-app limit (sideloader + NOOP +
watch app) is the second reason. Nothing about the project changed to achieve this:NOOPWatch
remains a dependency ofNOOPiOS, the canonical build stays complete, and only a staged copy is
thinned. An Xcode source build and the Full IPA are unaffected. Upstream's own release step makes
the same cut. - No analytics, protocol, storage or UI behaviour changed in this release.
Verification
- Packaging run against the real iOS build product: the sideload IPA contains
PlugIns/NOOPWidgets.appexand noWatch/; the Full IPA contains both. codesign -d --entitlementsreports the sameapplication-groupsvalue on the app and on the
widget after the zip round-trip, andcodesign --verify --deep --strictpasses on the extracted
bundle — so the capability template survives packaging rather than only existing on disk.StrandTests: 1815 tests, 0 failures (1 skipped), where the target previously did not compile.xcodebuildofNOOPiOS(iOS) andStrand(macOS): both BUILD SUCCEEDED.python3 Tools/i18n_audit.py --ciexits 0.- Not verified on a device. Whether AltStore/SideStore provision the two App IDs and the shared
group on a given iPhone is the one step that needs your own Apple ID: sideload this build and check
that the widget shows real values rather than dashes.
Thanks
To everyone who pushed back on the previous release's packaging — the widget removal was the wrong
call, and the correction plus the App Group point came directly out of that. The capability template
itself is @Quaii's work (ryanbr#887).
Install
- iOS: add the AltStore/SideStore source, or download
NOOP-ios-unsigned-v9.3.3-dx-beta.ipaand
sign it yourself with your own free Apple ID. This one includes the widgets. Want the Apple Watch
app too? TakeNOOP-ios-full-unsigned-v9.3.3-dx-beta.ipainstead — it needs a signer or paid
Developer team that can provision the watch bundle. - macOS: unzip
NOOP-macos-v9.3.3-dx-beta.zip, then right-click → Open the first time — the
bundle is ad-hoc signed, not notarised. macOS may ask you to re-approve Bluetooth after an update,
because the code identity changes with every build.