@craft-native/ios 0.0.368 → 0.0.374

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -7,6 +7,22 @@ services as well as new advertisements. A watch connected through another app ca
7
7
  therefore appear without changing its system pairing. Discovery still requires
8
8
  Bluetooth permission and does not prove that the device accepts the app's protocol.
9
9
 
10
+ ## Compact tab accessories
11
+
12
+ Native and hybrid tab bars stay expanded while scrolling. An accessory can use
13
+ `iconOnly: true` for a 48-point trailing button above the tabs:
14
+
15
+ ```ts
16
+ craft.navigation.setOptions({
17
+ tabAccessory: { path: '/messages', title: 'Messages', symbol: 'message', iconOnly: true, badge: '3' },
18
+ })
19
+ ```
20
+
21
+ The title remains its accessible name, the badge announces the unread count,
22
+ and the screen's bottom safe area reserves room for the button. Set
23
+ `tabAccessory: null` to remove it. Accessories without `iconOnly` keep the
24
+ system's standard presentation. Removing an accessory keeps all tabs expanded.
25
+
10
26
  ## Native celebration
11
27
 
12
28
  Any native `View` may opt into a finite card entrance, light sweep and confetti
@@ -384,8 +400,15 @@ the screen locked; a sleep timer then fades it out on the audio clock. Turn it
384
400
  on only for an app that plays sound people listen to: App Review checks.
385
401
 
386
402
  Purpose strings in your own words, by Info.plist key (each replaces Craft's
387
- generic sentence; the keys for frameworks the shell links are always written,
388
- since App Store Connect checks the binary):
403
+ generic sentence). Permission-bearing implementations and their purpose strings
404
+ are compiled in only when their corresponding `enable*` flags require them;
405
+ a nonblank custom purpose string is still
406
+ honored even when that feature is disabled. A custom string does not enable the
407
+ implementation. Regenerate the Xcode project after changing build-time feature
408
+ flags. Speech also needs the microphone; video recording needs camera,
409
+ microphone and photos; heart-rate uses Bluetooth; background location needs
410
+ location. File selection through the system photo picker does not enable
411
+ full photo-library access. App Store Connect checks the binary, not just config:
389
412
 
390
413
  ```json
391
414
  {
@@ -395,6 +418,29 @@ since App Store Connect checks the binary):
395
418
  }
396
419
  ```
397
420
 
421
+ With recognition compiled out, `stopListening` still acknowledges the stop and
422
+ emits `craftSpeechEnd`. The Zig runtime handles that idempotent cleanup without
423
+ linking Speech or microphone APIs; starting recognition remains disabled.
424
+
425
+ For an opt-in Zig runtime built specifically for the app, set
426
+ `CRAFT_IOS_RUNTIME_SOURCE` to an explicit Craft Zig source-package directory
427
+ (the directory containing `build.zig` and `build.zig.zon`) and `CRAFT_ZIG` to
428
+ the pinned compiler executable. `init` and subsequent `build` calls compile
429
+ device and both simulator archives from the app's `enable*` flags. The
430
+ programmatic equivalent is `runtimeSource` on `init`/`build`; do not combine it
431
+ with `runtimeDir`. Ordinary apps still require no Zig runtime or compiler.
432
+ Per-app builds check the compiler version, permission mask, and archive hashes
433
+ before installation. A failed compile leaves the installed runtime in place.
434
+ The source location is retained under `Runtime/`, not bundled as app config.
435
+ Changing permission flags requires rebuilding the runtime. Builds and shell
436
+ restoration bake permission gates into generated Swift and synchronize managed
437
+ usage descriptions, including in existing Xcode projects. Restoration refuses
438
+ a mismatched runtime instead of removing purpose strings from an unsafe binary.
439
+ Legacy unprofiled archives must be rebuilt through `runtimeSource`; manual
440
+ `runtimeDir` installs require a matching `ios-permissions.json` with SHA-256
441
+ identities for every supplied archive. No compiler, source checkout, or runtime
442
+ directory is guessed. These checks do not replace signed App Store validation.
443
+
398
444
  Appearance and navigation:
399
445
 
400
446
  ```json
@@ -1347,7 +1393,6 @@ without an extra dependency. Omitting presentationStyle keeps the existing
1347
1393
  full-screen overlay. A native sheet's close request still belongs to its
1348
1394
  owner, which sets visible to false.
1349
1395
 
1350
-
1351
1396
  ### Controlled native paging and font families
1352
1397
 
1353
1398
  A horizontal `ScrollView` with `pagingEnabled: true` and a numeric `pageIndex`