/**
 * Top-level `<key>K</key><string>V</string>` value, or null when absent.
 * V is returned verbatim, including an unresolved `$(VAR)` build-variable
 * reference — callers run it through resolvePlistValue before validating.
 */
export declare function plistString(raw: string, key: string): string | null;
/**
 * Boolean for `<key>K</key>\s*<true/>|<false/>`. Returns null when the key is
 * absent OR maps to a non-bool value — null is meaningfully distinct from false
 * (e.g. UIRequiresFullScreen absent vs. explicitly false).
 */
export declare function plistBool(raw: string, key: string): boolean | null;
/** Presence-only check for a `<key>K</key>` element. */
export declare function plistHasKey(raw: string, key: string): boolean;
/**
 * The `<string>` children of `<key>K</key>\s*<array>...</array>`, or [] when the
 * key is absent / not an array. Non-greedy so the first `</array>` wins. Note
 * that the key match is anchored on `</key>`, so a suffixed key such as
 * `K~ipad` is NOT matched by a request for the plain `K` (and vice-versa).
 */
export declare function plistArrayStrings(raw: string, key: string): string[];
/**
 * Inner text of `<key>K</key>\s*<dict>...</dict>`, or null when the key is
 * absent. Returns the FULL balanced dict: it scans `<dict>` / `</dict>` depth
 * from the opening dict to its matching close, so arbitrarily nested dicts are
 * captured intact. This matters for keys like NSAppTransportSecurity, where a
 * nested NSExceptionDomains dict appearing BEFORE a sibling such as
 * NSAllowsArbitraryLoads would otherwise truncate the block at the first
 * `</dict>` and hide the sibling. Used to scope reads such as
 * NSAppTransportSecurity. Pure; returns null on a missing key or an unbalanced
 * (malformed) dict.
 */
export declare function plistDictBlock(raw: string, key: string): string | null;
