mirror of
https://github.com/sudosylabs/vnidrop.git
synced 2026-08-05 02:29:55 +02:00
feat(config): shared app.properties for app-wide constants
Add a single source of truth (root app.properties) for public app-wide constants, injected at build time on both platforms instead of hardcoding. - Apple: generate-appconfig.sh -> Generated/AppConfig.swift (wired into `make apple-app-config`), consumed as AppConfig.privacyPolicyURL. - KMP: generateAppConfig task -> AppConfig.kt (mirrors DiagnosticsBuildConfig), consumed as AppConfig.PRIVACY_POLICY_URL. Replaces the stale hardcoded privacy-policy URL on both sides with https://vnidrop.sudosy.fr/privacy/. Also fix the Apple release core build: disable release LTO in build-core.sh (Cargo forbids lto in a build-override) to avoid the proc-macro "mis-aligned LINKEDIT string pool" corruption, so release archives are compact instead of shipping the debug core. Update the app icon. Tests: shell test for the generator (escaping, missing/duplicate key), plus XCTest and jvmTest asserting the generated value matches app.properties.
This commit is contained in:
59
apple/scripts/tests/test-generate-appconfig.sh
Executable file
59
apple/scripts/tests/test-generate-appconfig.sh
Executable file
@@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Tests apple/scripts/generate-appconfig.sh: the shared app.properties is read
|
||||
# correctly, values are emitted as valid escaped Swift, and a missing key fails.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
generator="$script_dir/../generate-appconfig.sh"
|
||||
repo_root="$(cd "$script_dir/../../.." && pwd)"
|
||||
scratch="$(mktemp -d)"
|
||||
trap 'rm -rf "$scratch"' EXIT
|
||||
|
||||
# Run the generator against a fixture app.properties, emitting into a temp dir.
|
||||
generate() {
|
||||
VNIDROP_APP_PROPERTIES="$scratch/app.properties" \
|
||||
VNIDROP_APPLE_GENERATED_DIR="$scratch/out" \
|
||||
"$generator"
|
||||
}
|
||||
|
||||
expect_failure() {
|
||||
if "$@" >/dev/null 2>&1; then
|
||||
printf 'Expected command to fail: %s\n' "$*" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
assert_contains() {
|
||||
local file=$1 needle=$2
|
||||
grep -qF "$needle" "$file" ||
|
||||
{ printf 'Expected %s to contain: %s\n' "$file" "$needle" >&2; exit 1; }
|
||||
}
|
||||
|
||||
out="$scratch/out/AppConfig.swift"
|
||||
|
||||
# 1. Nominal value is emitted verbatim as a Swift URL literal.
|
||||
printf 'PRIVACY_POLICY_URL=%s\n' 'https://example.test/privacy/' > "$scratch/app.properties"
|
||||
generate
|
||||
assert_contains "$out" 'URL(string: "https://example.test/privacy/")!'
|
||||
assert_contains "$out" 'enum AppConfig'
|
||||
|
||||
# 2. Characters special to a Swift string literal are escaped.
|
||||
printf 'PRIVACY_POLICY_URL=%s\n' 'https://a.test/"q"\z' > "$scratch/app.properties"
|
||||
generate
|
||||
assert_contains "$out" 'URL(string: "https://a.test/\"q\"\\z")!'
|
||||
|
||||
# 3. A missing key fails instead of emitting an empty value.
|
||||
printf 'OTHER_KEY=value\n' > "$scratch/app.properties"
|
||||
expect_failure generate
|
||||
|
||||
# 4. A duplicated key fails.
|
||||
printf 'PRIVACY_POLICY_URL=a\nPRIVACY_POLICY_URL=b\n' > "$scratch/app.properties"
|
||||
expect_failure generate
|
||||
|
||||
# 5. The real committed app.properties produces an https URL.
|
||||
VNIDROP_APPLE_GENERATED_DIR="$scratch/real" "$generator"
|
||||
assert_contains "$scratch/real/AppConfig.swift" 'URL(string: "https://'
|
||||
|
||||
printf 'generate-appconfig tests passed.\n'
|
||||
Reference in New Issue
Block a user