- iOS приложение компилируется без ошибок
- Share Extension интегрирован и настроен
- Backend сервер развернут на Railway:
https://yeet-production-dddc.up.railway.app - Аутентификация через WebView готова (LoginView.swift)
- Keychain Service для безопасного хранения cookies
- Background downloads с уведомлениями
- Анимации и тактильная обратная связь в UI
Sources/
├── YeetApp/ # Основное приложение
│ ├── YeetApp.swift # Entry point
│ ├── ContentView.swift # Главный экран с управлением аккаунтами
│ ├── AppDelegate.swift # Background downloads delegate
│ ├── Info.plist
│ └── Yeet.entitlements # ⚠️ Сейчас пустой, нужно восстановить
│
├── YeetShareExtension/ # Расширение для Share Sheet
│ ├── ShareViewController.swift # UIKit контроллер
│ ├── ShareView.swift # SwiftUI интерфейс с анимациями
│ ├── DownloaderViewModel.swift # Бизнес-логика, обработка состояний
│ ├── Info.plist
│ └── YeetShareExtension.entitlements # ⚠️ Сейчас пустой
│
└── Shared/ # Общий код
├── AppConfig.swift # Конфигурация (читает Config.plist)
├── AppContext.swift # Синглтон для App Groups
├── VideoDownloader.swift # API клиент для backend
├── BackgroundDownloadManager.swift # Менеджер фоновых загрузок
├── NotificationManager.swift # Уведомления о завершении
├── KeychainService.swift # Безопасное хранение cookies
├── ServiceRegistry.swift # DI контейнер
├── LoginView.swift # WebView для аутентификации
└── Config.plist # ⚠️ Был удален, нужно восстановить!
Server/
├── server.js # Express сервер с yt-dlp интеграцией
├── package.json # Node.js зависимости
├── README.md # API документация
└── simple-server.js # Упрощенный сервер для тестов
Bundle Identifiers:
- Main App:
com.atticdm.Yeet - Share Extension:
com.atticdm.Yeet.share
App Group: group.com.atticdm.Yeet
Keychain Access Groups:
- Main App:
$(AppIdentifierPrefix)com.atticdm.Yeet - Extension:
$(AppIdentifierPrefix)com.atticdm.Yeet.share
Development Team: 85K3KJ45T3
Backend URL: https://yeet-production-dddc.up.railway.app
Локация: Sources/Shared/Config.plist
Статус: Файл был удален
Проблема: AppConfig.swift не может загрузить конфигурацию
Решение: Создать файл со следующим содержимым:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>backendBaseURL</key>
<string>https://yeet-production-dddc.up.railway.app</string>
<key>metadataPath</key>
<string>/get-video-link</string>
<key>appGroupIdentifier</key>
<string>group.com.atticdm.Yeet</string>
<key>keychainService</key>
<string>com.atticdm.Yeet.cookies</string>
<key>keychainAccessGroup</key>
<string>com.atticdm.Yeet</string>
<key>backgroundSessionIdentifier</key>
<string>com.atticdm.Yeet.background</string>
<key>assumedAverageThroughput</key>
<real>1572864.0</real>
<key>longDownloadThreshold</key>
<real>15.0</real>
<key>supportedServices</key>
<array>
<string>instagram</string>
<string>youtube</string>
<string>tiktok</string>
</array>
</dict>
</plist>Проблема: Пользователь очистил entitlements, что сломает App Groups и Keychain Решение: Восстановить содержимое:
Yeet.entitlements:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.atticdm.Yeet</string>
</array>
<key>keychain-access-groups</key>
<array>
<string>$(AppIdentifierPrefix)com.atticdm.Yeet</string>
</array>
</dict>
</plist>YeetShareExtension.entitlements:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.atticdm.Yeet</string>
</array>
<key>keychain-access-groups</key>
<array>
<string>$(AppIdentifierPrefix)com.atticdm.Yeet.share</string>
</array>
</dict>
</plist>Проблема: Нет быстрого способа восстановить конфигурацию Решение: Создать скрипт для автоматического восстановления
-
yt-dlp --get-filesize не работает
- Ошибка уже исправлена в коде (убрали флаг)
- Нужно передеплоить на Railway
-
Instagram требует аутентификацию
- Это ожидаемое поведение
- Приложение готово к работе с cookies
- Пользователю нужно залогиниться через LoginView
-
Локальный сервер порт 3000 занят
- Не критично, можно использовать Railway URL
- Или убить процесс:
lsof -ti:3000 | xargs kill -9
- ✅ Убрали
hasStarted = falseиз retry() функций - ✅ Восстановили entitlements файлы
- ✅ Восстановили полную конфигурацию project.yml
⚠️ Пользователь затем очистил entitlements обратно
- ✅ Изменили
.taskна.onAppearв ShareView - ✅ Упростили DownloaderViewModel (убрали attach())
- ✅ Передаем extensionContext напрямую в init
- ✅ Добавили
transitivelyLinkDependencies: true
- Восстановить Config.plist в
Sources/Shared/ - Восстановить entitlements для обоих таргетов
- Создать fix-entitlements.sh для быстрого восстановления
- Перегенерировать проект:
rm -rf Yeet.xcodeproj && xcodegen generate - Проверить в Xcode "Signing & Capabilities" для обоих таргетов
- Протестировать Share Extension с реальной ссылкой
- Проверить работу Keychain (Login Error -34018 был раньше)
- Проверить App Groups (ошибки "client is not entitled" были раньше)
- Протестировать LoginView - аутентификацию через WebView
- Проверить background downloads и уведомления
- Передеплоить backend на Railway (если нужны изменения)
- Добавить больше обработки ошибок в UI
- Улучшить UX для длительных загрузок
- Добавить тесты для ключевой логики
cd /Users/attic/Yeet
# Создать Config.plist
cat > Sources/Shared/Config.plist << 'EOF'
# (содержимое из секции "Config.plist отсутствует" выше)
EOF
# Восстановить Yeet.entitlements
cat > Sources/YeetApp/Yeet.entitlements << 'EOF'
# (содержимое из секции "Entitlements файлы пустые" выше)
EOF
# Восстановить YeetShareExtension.entitlements
cat > Sources/YeetShareExtension/YeetShareExtension.entitlements << 'EOF'
# (содержимое из секции "Entitlements файлы пустые" выше)
EOFrm -rf Yeet.xcodeproj
xcodegen generate- Открыть
Yeet.xcodeproj - Проверить "Signing & Capabilities":
- ✅ App Groups включен:
group.com.atticdm.Yeet - ✅ Keychain Sharing включен
- ✅ App Groups включен:
- Clean Build Folder (⌘+Shift+K)
- Build (⌘+B)
- Run (⌘+R)
- Запустить приложение
- Проверить раздел "Manage Accounts"
- Попробовать залогиниться в Instagram
- Поделиться ссылкой на Instagram reel через Share Extension
- Проверить скачивание и уведомления
⚠️ Config.plist not found in any bundle. Using default values.
Решение: Создать файл и перегенерировать проект
container_create_or_lookup_app_group_path_by_app_group_identifier: client is not entitled
Решение: Восстановить entitlements и включить в Apple Developer Console
Login Error: The operation couldn't be completed. (OSStatus error -34018.)
Решение:
- Проверить entitlements
- Упростить keychainAccessGroup (убрать AppIdentifierPrefix)
- Проверить на реальном устройстве (симулятор может глючить)
RBSAssertionErrorDomain Code=2
Решение: Уже исправлено через .onAppear и упрощение lifecycle
# Перегенерировать проект
rm -rf Yeet.xcodeproj && xcodegen generate
# Убить локальный сервер
lsof -ti:3000 | xargs kill -9
# Запустить локальный backend
cd Server && node server.js
# Проверить Railway deployment
curl https://yeet-production-dddc.up.railway.app/health
# Проверить git статус
git status
# Коммитить изменения
git add .
git commit -m "Your message"
git push origin main- GitHub: https://github.com/Atticdm/Yeet
- Railway Project ID:
9d56f497-921a-4f79-ac92-1a217665d506 - Railway URL: https://yeet-production-dddc.up.railway.app
- Team ID:
85K3KJ45T3
- ✅ iOS Share Extensions
- ✅ SwiftUI lifecycle и animations
- ✅ App Groups для shared storage
- ✅ Keychain для безопасного хранения
- ✅ Background URLSessions
- ✅ WKWebView для аутентификации
- ✅ XcodeGen для управления проектом
- ✅ Railway для deployment
- ✅ yt-dlp для скачивания видео
- ✅ Cookie-based authentication
Проект в хорошем состоянии, но требует восстановления нескольких критичных файлов перед запуском:
- Config.plist
- Entitlements файлы
После восстановления этих файлов приложение должно работать полностью!
Дата обновления: 1 октября 2025 Автор: Claude (AI Assistant) Статус проекта: 🟡 Требует восстановления конфигурации перед запуском