add ios social-app
This commit is contained in:
295
ios/setup.zsh
Executable file
295
ios/setup.zsh
Executable file
@@ -0,0 +1,295 @@
|
||||
#!/bin/zsh
|
||||
|
||||
cd ${0:a:h}
|
||||
|
||||
# iOS Social App Patch Setup Script
|
||||
# Usage: ./ios/setup.zsh [patch|reset]
|
||||
|
||||
# Cross-platform sed (macOS vs Linux)
|
||||
function sediment() {
|
||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
sed -i '' "$@"
|
||||
else
|
||||
sed -i "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
# Arrays for patch management
|
||||
typeset -a FAILED_PATCHES
|
||||
|
||||
# Patch file lists for iOS
|
||||
typeset -a PATCH_FILES_IOS
|
||||
PATCH_FILES_IOS=(
|
||||
"001-social-app-ios-config.patch"
|
||||
"002-social-app-ios-lib.patch"
|
||||
"003-social-app-ios-view.patch"
|
||||
"004-social-app-ios-core.patch"
|
||||
"005-social-app-ios-screens.patch"
|
||||
"006-social-app-ios-shell.patch"
|
||||
"007-social-app-ios-misc.patch"
|
||||
"009-social-app-ios-license.patch"
|
||||
"010-social-app-ios-remove-contact-support.patch"
|
||||
"011-social-app-ios-splash-license-footer.patch"
|
||||
"013-social-app-ios-settings-remove-help.patch"
|
||||
"019-social-app-ios-entitlements-plugin.patch"
|
||||
"020-social-app-ios-bypass-age-assurance.patch"
|
||||
"021-social-app-ios-clean-feed.patch"
|
||||
"022-social-app-ios-bskyweb-support-pages.patch"
|
||||
"023-social-app-ios-disable-dm.patch"
|
||||
"024-social-app-ios-disable-external-services.patch"
|
||||
"025-social-app-ios-bskyweb-title.patch"
|
||||
"027-social-app-ios-remove-birthdate.patch"
|
||||
"028-social-app-ios-remove-discover-feeds.patch"
|
||||
"029-social-app-ios-remove-feeds-discover.patch"
|
||||
"030-social-app-ios-appinfo.patch"
|
||||
"032-social-app-ios-feed-loggedout.patch"
|
||||
"033-social-app-ios-hide-profile-tabs.patch"
|
||||
"036-social-app-ios-homeheader-loggedout.patch"
|
||||
"037-social-app-ios-disable-contacts-nux.patch"
|
||||
)
|
||||
|
||||
function ios-env() {
|
||||
d=${0:a:h:h}
|
||||
patching_dir=${0:a:h}/patching
|
||||
target_dir=$d/repos/social-app
|
||||
}
|
||||
|
||||
# Common patch function with status detection
|
||||
function apply-patch() {
|
||||
local patch_name=$1
|
||||
local target_dir=$2
|
||||
local patch_file=$3
|
||||
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "📝 Patch: ${patch_name}"
|
||||
echo " Target: ${target_dir}"
|
||||
echo " File: ${patch_file}"
|
||||
|
||||
pushd ${target_dir} > /dev/null
|
||||
|
||||
# Check if patch can be applied (forward dry-run succeeds)
|
||||
if patch --dry-run -p1 < ${patch_file} > /dev/null 2>&1; then
|
||||
echo "🔧 Applying patch..."
|
||||
if patch -p1 < ${patch_file}; then
|
||||
echo "✅ Applied successfully"
|
||||
popd > /dev/null
|
||||
echo ""
|
||||
return 0
|
||||
else
|
||||
echo "❌ Failed to apply"
|
||||
FAILED_PATCHES+=("${patch_name} (${patch_file})")
|
||||
popd > /dev/null
|
||||
echo ""
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
echo "⚠️ Cannot apply - file may have been modified"
|
||||
echo " Please check manually"
|
||||
FAILED_PATCHES+=("${patch_name} (${patch_file}) - file modified")
|
||||
popd > /dev/null
|
||||
echo ""
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
function show-failed-patches() {
|
||||
if [ ${#FAILED_PATCHES[@]} -eq 0 ]; then
|
||||
echo ""
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "✅ All patches applied successfully!"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo ""
|
||||
return 0
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "⚠️ FAILED PATCHES SUMMARY"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo ""
|
||||
echo "The following patches could not be applied:"
|
||||
echo ""
|
||||
for failed_patch in "${FAILED_PATCHES[@]}"; do
|
||||
echo " ❌ ${failed_patch}"
|
||||
done
|
||||
echo ""
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# Helper function for applying patches
|
||||
function patch-apply() {
|
||||
local name=$1
|
||||
local patch_file=$2
|
||||
apply-patch "${name}" "$target_dir" "$patching_dir/${patch_file}"
|
||||
}
|
||||
|
||||
# Generate build number from timestamp (YYMMDDHHMMSS)
|
||||
function ios-generate-build-number() {
|
||||
local build_number=$(date +%y%m%d%H%M%S)
|
||||
local config_patch="$patching_dir/001-social-app-ios-config.patch"
|
||||
|
||||
if [ -f "$config_patch" ]; then
|
||||
# Replace placeholder with timestamp
|
||||
sediment "s/__BUILD_NUMBER__/${build_number}/" "$config_patch"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "🔢 Build number: ${build_number}"
|
||||
echo ""
|
||||
fi
|
||||
}
|
||||
|
||||
# Restore placeholder after patching (for git cleanliness)
|
||||
function ios-restore-build-placeholder() {
|
||||
local config_patch="$patching_dir/001-social-app-ios-config.patch"
|
||||
|
||||
if [ -f "$config_patch" ]; then
|
||||
# Restore placeholder for next build
|
||||
sediment "s/buildNumber: '[0-9]*'/buildNumber: '__BUILD_NUMBER__'/" "$config_patch"
|
||||
fi
|
||||
}
|
||||
|
||||
# Auto-apply patches from list
|
||||
function ios-patch-apply-all() {
|
||||
for filename in "${PATCH_FILES_IOS[@]}"; do
|
||||
local title="${filename%.*}"
|
||||
patch-apply "$title" "$filename"
|
||||
done
|
||||
}
|
||||
|
||||
# Copy new files that aren't in patches
|
||||
function ios-copy-new-files() {
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "📁 Copying new files..."
|
||||
|
||||
# Copy all assets from ios/assets/ to repos/social-app/assets/
|
||||
if [ -d "$d/ios/assets" ]; then
|
||||
cp -rf "$d/ios/assets/"* "$target_dir/assets/"
|
||||
echo "✅ Copied all assets (including logo.png, app-icons)"
|
||||
fi
|
||||
|
||||
# Copy License.tsx
|
||||
if [ -f "$patching_dir/License.tsx" ]; then
|
||||
mkdir -p "$target_dir/src/view/screens"
|
||||
cp "$patching_dir/License.tsx" "$target_dir/src/view/screens/License.tsx"
|
||||
echo "✅ Copied License.tsx"
|
||||
fi
|
||||
|
||||
# Copy AppInfo.tsx
|
||||
if [ -f "$patching_dir/AppInfo.tsx" ]; then
|
||||
mkdir -p "$target_dir/src/view/screens"
|
||||
cp "$patching_dir/AppInfo.tsx" "$target_dir/src/view/screens/AppInfo.tsx"
|
||||
echo "✅ Copied AppInfo.tsx"
|
||||
fi
|
||||
|
||||
# Copy pre-generated favicons for bskyweb
|
||||
local favicon_src="$d/ios/assets/favicons"
|
||||
local bskyweb_static="$target_dir/bskyweb/static"
|
||||
if [ -d "$favicon_src" ] && [ -d "$bskyweb_static" ]; then
|
||||
cp -f "$d/ios/assets/logo.png" "$bskyweb_static/app.png"
|
||||
cp -f "$favicon_src/favicon.png" "$bskyweb_static/favicon.png"
|
||||
cp -f "$favicon_src/favicon-16x16.png" "$bskyweb_static/favicon-16x16.png"
|
||||
cp -f "$favicon_src/favicon-32x32.png" "$bskyweb_static/favicon-32x32.png"
|
||||
cp -f "$favicon_src/apple-touch-icon.png" "$bskyweb_static/apple-touch-icon.png"
|
||||
echo "✅ Copied favicons to bskyweb/static"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
function ios-setup-clone() {
|
||||
if [ ! -d $target_dir ]; then
|
||||
echo "Error: social-app repository not found at $target_dir"
|
||||
echo "Please run install.zsh first to clone repositories"
|
||||
return 1
|
||||
fi
|
||||
echo "Repository found: $target_dir"
|
||||
}
|
||||
|
||||
# Generate bskyweb templates from html/ source
|
||||
# html/ is the source of truth, bskyweb templates are generated
|
||||
function ios-generate-bskyweb-templates() {
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo "🌐 Generating bskyweb templates from html/..."
|
||||
|
||||
local html_src="$d/html/about/support"
|
||||
local templates="$target_dir/bskyweb/templates"
|
||||
local static_src="$d/html/static"
|
||||
local static_out="$target_dir/bskyweb/static"
|
||||
|
||||
# Check if html source exists
|
||||
if [ ! -d "$html_src" ]; then
|
||||
echo "⚠️ html/about/support not found, skipping template generation"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Create output directory
|
||||
mkdir -p "$templates"
|
||||
mkdir -p "$static_out"
|
||||
|
||||
# Convert html/ to bskyweb templates
|
||||
# Add {{ staticCDNHost }} prefix to /static/ paths
|
||||
for html_file in privacy.html license.html tos.html help.html app.html; do
|
||||
if [ -f "$html_src/$html_file" ]; then
|
||||
local template_name="about-${html_file}"
|
||||
sed 's|href="/static/|href="{{ staticCDNHost }}/static/|g; s|src="/static/|src="{{ staticCDNHost }}/static/|g' \
|
||||
"$html_src/$html_file" > "$templates/$template_name"
|
||||
fi
|
||||
done
|
||||
|
||||
# Also generate about-app.html from index.html if exists
|
||||
if [ -f "$d/html/index.html" ]; then
|
||||
sed 's|href="/static/|href="{{ staticCDNHost }}/static/|g; s|src="/static/|src="{{ staticCDNHost }}/static/|g' \
|
||||
"$d/html/index.html" > "$templates/about-app.html"
|
||||
fi
|
||||
|
||||
# Copy static assets
|
||||
if [ -d "$static_src" ]; then
|
||||
cp -f "$static_src/"* "$static_out/" 2>/dev/null
|
||||
fi
|
||||
|
||||
echo "✅ Generated bskyweb templates"
|
||||
echo " - about-privacy.html, about-tos.html, etc."
|
||||
echo ""
|
||||
}
|
||||
|
||||
function ios-setup-reset() {
|
||||
echo "Resetting social-app repository..."
|
||||
cd $target_dir
|
||||
git stash
|
||||
git checkout .
|
||||
echo "Reset complete"
|
||||
}
|
||||
|
||||
# Main execution
|
||||
ios-env
|
||||
|
||||
case "$1" in
|
||||
patch)
|
||||
ios-setup-clone
|
||||
ios-generate-build-number
|
||||
ios-patch-apply-all
|
||||
ios-restore-build-placeholder
|
||||
ios-copy-new-files
|
||||
ios-generate-bskyweb-templates
|
||||
show-failed-patches
|
||||
exit
|
||||
;;
|
||||
reset)
|
||||
ios-setup-reset
|
||||
exit
|
||||
;;
|
||||
html)
|
||||
# Generate bskyweb templates only (requires patches to be applied first)
|
||||
ios-generate-bskyweb-templates
|
||||
exit
|
||||
;;
|
||||
*)
|
||||
ios-setup-clone
|
||||
ios-generate-build-number
|
||||
ios-patch-apply-all
|
||||
ios-restore-build-placeholder
|
||||
ios-copy-new-files
|
||||
ios-generate-bskyweb-templates
|
||||
show-failed-patches
|
||||
;;
|
||||
esac
|
||||
Reference in New Issue
Block a user