montana/iOS/Distribution/DISTRIBUTION.md

164 lines
6.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Montana iOS Distribution — Без App Store
## Модель LazyShop
```
┌─────────────────────────────────────────────────────────────┐
│ install.efir.org │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Wallet.ipa │ │ Junona.ipa │ │Contracts.ipa│ │
│ │ (unsigned) │ │ (unsigned) │ │ (unsigned) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ └──────────────────┼──────────────────┘ │
│ │ │
│ ┌───────▼───────┐ │
│ │ zsign │ │
│ │ (server-side) │ │
│ └───────┬───────┘ │
│ │ │
│ ┌───────▼───────┐ │
│ │ Signed .ipa │ │
│ │ per UDID │ │
│ └───────┬───────┘ │
│ │ │
└────────────────────────────┼────────────────────────────────┘
┌────────▼────────┐
│ iPhone │
│ (itms-services) │
└─────────────────┘
```
## Процесс установки
### 1. Пользователь заходит на install.efir.org
### 2. Получает свой UDID
- Настройки → Основные → Об этом устройстве
- Или через get.udid.io
### 3. Регистрирует устройство
```
POST /api/register
{ "udid": "00000000-0000000000000000" }
```
### 4. Выбирает приложение и нажимает "Установить"
```
itms-services://?action=download-manifest&url=.../manifest.plist
```
### 5. iOS скачивает подписанный IPA
```
GET /api/download/wallet?udid=00000000-...
```
### 6. Доверяет сертификату
Настройки → Основные → VPN и управление устройством → Доверять
---
## Типы сертификатов
| Тип | Лимит | Срок | Контроль Apple |
|-----|-------|------|----------------|
| **Ad-Hoc** | 100 UDID/год | 1 год | Да (dev portal) |
| **Enterprise** | Безлимит | 1 год | Да (могут отозвать) |
| **Sideload** | 1 устройство | 7 дней | Нет |
### Рекомендация для Montana:
**Уровень 1: Enterprise Certificate**
- Один сертификат для всех
- Не нужен UDID каждого
- Риск: Apple может отозвать
**Уровень 2: Ad-Hoc + Rotation**
- 100 устройств на сертификат
- Несколько dev accounts = больше слотов
- Ротация сертификатов
**Уровень 3: Self-sign Guide**
- Учим пользователей подписывать самим
- AltStore / Sideloadly
- Полная независимость
---
## Структура сервера
```
/var/montana/
├── ipa/ # Оригинальные .ipa (без подписи)
│ ├── MontanaWallet.ipa
│ ├── JunonaAI.ipa
│ └── MontanaContracts.ipa
├── signed/ # Подписанные (по UDID)
│ ├── 00000000-xxx/
│ │ ├── MontanaWallet.ipa
│ │ └── ...
│ └── 11111111-yyy/
│ └── ...
├── certs/ # Сертификаты
│ ├── montana.p12 # Enterprise/Dev cert
│ └── *.mobileprovision # Provisioning profiles
├── static/ # Иконки
│ └── icons/
├── server.py # Flask app
└── montanasign.db # SQLite
```
---
## API Endpoints
```
GET / # Landing page
POST /api/register # Регистрация UDID
GET /api/manifest/{app} # manifest.plist для установки
GET /api/download/{app} # Скачать подписанный IPA
GET /api/apps # Список приложений
GET /api/stats # Статистика
```
---
## Fallback при блокировке
1. **Домен заблокирован** → Новый домен + DNS over HTTPS
2. **IP заблокирован** → Cloudflare / CDN
3. **Сертификат отозван** → Новый Enterprise account
4. **Всё заблокировано** → PWA + Android + Sideload guide
---
## Безопасность
- HTTPS обязателен (itms-services требует)
- Rate limiting на регистрацию
- UDID валидация
- Логирование всех установок
- Backup сертификатов
---
## Сравнение с LazyShop
| Функция | LazyShop | Montana |
|---------|----------|---------|
| Регистрация UDID | ✅ | ✅ |
| Онлайн подпись | ✅ | ✅ |
| Каталог приложений | Много | 3 (наши) |
| Монетизация | Платно | Бесплатно |
| Цель | Пиратство | Независимость |
---
*Apple не контролирует. Время — единственная реальная валюта. Ɉ*