Sanitize Ios Project Task
Ensures a source iOS Info.plist holds the references that this task's propagation inputs enable. Each enabled entry points at its build variable:
CFBundleDisplayName → $(PRODUCT_NAME)
CFBundleName → $(PRODUCT_NAME)
CFBundleShortVersionString → $(MARKETING_VERSION)
CFBundleVersion → $(CURRENT_PROJECT_VERSION)App-name propagation enables the first two entries. Marketing-version and build-number propagation independently enable the remaining entries. When no string entry or optional Boolean flag is enabled, the task is a no-op. Existing conflicts follow conflictPolicy, which defaults to fail-closed, so one conflict aborts the entire plan and leaves the plist byte-for-byte untouched.
It also propagates the Boolean feature flags from kiteConfig { ios { } }:
ITSAppUsesNonExemptEncryption ← ios.usesNonExemptEncryption
CADisableMinimumFrameDurationOnPhone ← ios.proMotion120HzThe plist is parsed with mandatory XML hardening (sanitizeInfoPlist). Binary, malformed, duplicate-key, unsafe-entity, and non-lossless inputs fail without writing. Generated plists are unsupported by this source-file migration task.
Safety rails on every source-writing task
| Rail | Behaviour |
|---|---|
| Explicit only | never runs as part of an ordinary build; you invoke it by name |
| Authorized | the matching DSL block must be configured, or the task is skipped |
-Pkiteconfig.dryRun=true | reports what it would write and remove, changes nothing |
-Pkiteconfig.backups=true | keeps a recovery copy before replacing anything (default) |
| Ownership | refuses to overwrite or delete a file it does not own |
| Atomic | staged then swapped, so an interrupted run leaves the tree intact |
Both -P switches accept exactly true or false; anything else fails the build rather than being read as false.