montana/iOS/Distribution/DISTRIBUTION.md

6.4 KiB
Raw Permalink Blame History

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 не контролирует. Время — единственная реальная валюта. Ɉ