ai/at
1
0

add ios social-app

This commit is contained in:
2025-12-06 21:14:08 +09:00
parent 948551c185
commit ea589afe41
67 changed files with 3966 additions and 640 deletions

223
ios/setup.zsh Executable file
View File

@@ -0,0 +1,223 @@
#!/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"
"026-social-app-ios-serverinput-label.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 is already applied (reverse dry-run succeeds)
if patch -f --dry-run -p1 -R < ${patch_file} > /dev/null 2>&1; then
echo "✅ Already applied - skipping"
popd > /dev/null
echo ""
return 0
fi
# 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
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"
}
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
show-failed-patches
exit
;;
reset)
ios-setup-reset
exit
;;
*)
ios-setup-clone
ios-generate-build-number
ios-patch-apply-all
ios-restore-build-placeholder
ios-copy-new-files
show-failed-patches
;;
esac