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:
44
apple/scripts/generate-appconfig.sh
Executable file
44
apple/scripts/generate-appconfig.sh
Executable file
@@ -0,0 +1,44 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Generates apple/VniDrop/Generated/AppConfig.swift from the shared app.properties
|
||||
# so app-wide constants (privacy policy URL, …) have a single source of truth
|
||||
# across Apple and KMP. Regenerate instead of editing the output.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
repo_root="$(cd "$script_dir/../.." && pwd)"
|
||||
config_file="${VNIDROP_APP_PROPERTIES:-$repo_root/app.properties}"
|
||||
output_dir="${VNIDROP_APPLE_GENERATED_DIR:-$repo_root/apple/VniDrop/Generated}"
|
||||
|
||||
read_property() {
|
||||
local key=$1
|
||||
local value
|
||||
value="$(sed -n "s/^${key}=//p" "$config_file")"
|
||||
[[ -n "$value" ]] || { printf 'Missing %s in %s\n' "$key" "$config_file" >&2; exit 1; }
|
||||
[[ $(printf '%s\n' "$value" | wc -l | tr -d ' ') == 1 ]] ||
|
||||
{ printf 'Duplicate %s in %s\n' "$key" "$config_file" >&2; exit 1; }
|
||||
printf '%s' "$value"
|
||||
}
|
||||
|
||||
# Escape for a Swift string literal.
|
||||
swift_escape() {
|
||||
printf '%s' "$1" | sed -e 's/\\/\\\\/g' -e 's/"/\\"/g'
|
||||
}
|
||||
|
||||
privacy_url="$(read_property PRIVACY_POLICY_URL)"
|
||||
|
||||
mkdir -p "$output_dir"
|
||||
tmp="$(mktemp "$output_dir/.AppConfig.swift.XXXXXX")"
|
||||
cat > "$tmp" <<EOF
|
||||
// Generated by apple/scripts/generate-appconfig.sh from app.properties.
|
||||
// Regenerate this file instead of editing it.
|
||||
|
||||
import Foundation
|
||||
|
||||
/// App-wide constants injected at build time from the shared \`app.properties\`.
|
||||
enum AppConfig {
|
||||
static let privacyPolicyURL = URL(string: "$(swift_escape "$privacy_url")")!
|
||||
}
|
||||
EOF
|
||||
mv "$tmp" "$output_dir/AppConfig.swift"
|
||||
Reference in New Issue
Block a user