Add IndieAbout + IndieBackup, TestFlight release pipeline
IndieAbout: About section in iOS Settings and macOS About window; LICENSE
switched to the portfolio-standard ISC text (reflowed for in-app rendering).
IndieBackup: files-only backup/restore of the iCloud container documents
('.notesbackup' document type on both platforms), SwiftData cache rebuilt
via SyncEngine.rebuildCache() after restore, monitors suspended during the
file swap, onOpenURL import with pre-launch queueing.
Release pipeline: Scripts/release.sh (ios|mac|all) archives and uploads via
xcodebuild + ASC API key; platform-partitioned build numbers (iOS even,
macOS odd) since both targets share one bundle ID and build sequence.
This commit is contained in:
Executable
+61
@@ -0,0 +1,61 @@
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
## Notes: platform-aware build info (post-build phase).
|
||||
##
|
||||
## Sets, on every build:
|
||||
## - CFBundleVersion = git commit count, platform-partitioned (see below)
|
||||
## - BuildDate = today's date, e.g. 2026-07-14
|
||||
## - BuildHash = short git commit hash
|
||||
## in both the target Info.plist and its dSYM Info.plist, so IndieAbout's
|
||||
## version line has something to read.
|
||||
##
|
||||
## Platform partitioning: the iOS and macOS targets share one bundle ID and
|
||||
## therefore one App Store Connect build-number sequence, so stamping both
|
||||
## with the raw commit count makes the second upload collide ("bundle version
|
||||
## already used"). iOS gets even numbers, macOS odd — both strictly increase
|
||||
## with every commit and can never equal each other. (Same scheme as
|
||||
## QuickRabbit's update_build_number.sh.)
|
||||
|
||||
git=$(sh /etc/profile; which git || true)
|
||||
if [ -z "$git" ] || [ ! -x "$git" ]; then
|
||||
echo "error: update_build_number.sh: could not resolve a 'git' executable — refusing to stamp a build number." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
number_of_commits=$("$git" rev-list HEAD --count)
|
||||
case "$number_of_commits" in
|
||||
''|*[!0-9]*)
|
||||
echo "error: update_build_number.sh: 'git rev-list HEAD --count' returned '$number_of_commits', not a positive integer." >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
case "${PLATFORM_NAME:-}" in
|
||||
macosx*) build_number=$((number_of_commits * 2 + 1)) ;;
|
||||
*) build_number=$((number_of_commits * 2)) ;;
|
||||
esac
|
||||
|
||||
git_commit=$("$git" rev-parse --short HEAD)
|
||||
build_date=$(date +%F)
|
||||
|
||||
target_plist="$TARGET_BUILD_DIR/$INFOPLIST_PATH"
|
||||
dsym_plist="$DWARF_DSYM_FOLDER_PATH/$DWARF_DSYM_FILE_NAME/Contents/Info.plist"
|
||||
|
||||
if [ ! -f "$target_plist" ] && [ ! -f "$dsym_plist" ]; then
|
||||
echo "warning: update_build_number.sh: neither $target_plist nor $dsym_plist exists — check the phase's Input Files"
|
||||
fi
|
||||
|
||||
echo "update_build_number: b$build_number ($PLATFORM_NAME) $git_commit $build_date"
|
||||
|
||||
for plist in "$target_plist" "$dsym_plist"; do
|
||||
if [ -f "$plist" ]; then
|
||||
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $build_number" "$plist"
|
||||
|
||||
/usr/libexec/PlistBuddy -c "Set :BuildDate $build_date" "$plist" 2>/dev/null || \
|
||||
/usr/libexec/PlistBuddy -c "Add :BuildDate string $build_date" "$plist"
|
||||
|
||||
/usr/libexec/PlistBuddy -c "Set :BuildHash $git_commit" "$plist" 2>/dev/null || \
|
||||
/usr/libexec/PlistBuddy -c "Add :BuildHash string $git_commit" "$plist"
|
||||
fi
|
||||
done
|
||||
Reference in New Issue
Block a user