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.
62 lines
2.3 KiB
Bash
Executable File
62 lines
2.3 KiB
Bash
Executable File
#!/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
|