Skip to content

NOOP AI 9.3.3 DX Beta

Choose a tag to compare

@github-actions github-actions released this 06 Aug 14:37

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.appex together with the host app. The packaging step now removes only Watch/, 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 StrandTests for 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 by xcodebuild … test:
    • AICoachEmptyReplyAndUrlTests (which arrived with upstream ryanbr#1087) called parseChatContent with
      one argument, while this fork keeps the richer parseChatContent(_:isLocalServer:) that tailors
      the truncation notice to local servers versus hosted gateways. Adapted to the fork's signature.
    • project.yml had lost StrandiOSShared/WidgetSnapshot.swift from the StrandTests sources
      during the 9.3.1 merge, so WidgetSnapshotTests could 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 of NOOPiOS, 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.appex and no Watch/; the Full IPA contains both.
  • codesign -d --entitlements reports the same application-groups value on the app and on the
    widget after the zip round-trip, and codesign --verify --deep --strict passes 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.
  • xcodebuild of NOOPiOS (iOS) and Strand (macOS): both BUILD SUCCEEDED.
  • python3 Tools/i18n_audit.py --ci exits 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.ipa and
    sign it yourself with your own free Apple ID. This one includes the widgets. Want the Apple Watch
    app too? Take NOOP-ios-full-unsigned-v9.3.3-dx-beta.ipa instead — 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.