mirror of
https://github.com/p1neappleXpress/OpenFlux.git
synced 2026-10-02 05:04:39 +08:00
- UI: transport picker (Yandex Docs / MAX) with the right fields per backend (URL vs token + user id); previously only a Yandex URL was exposed even though the MAX (oneme) transport is supported. - UI: editable local SOCKS5 port with an uncommon default (10808) to avoid clashing with other local proxies; the running address is shown. - Fix crash on start when the SOCKS5 port is in use: the port is now bound synchronously and "address already in use" is reported to the UI (start code 4) instead of failing in a background goroutine. The start path and the serve goroutine are wrapped in recover() so no panic can unwind into the Swift caller and kill the app. - oneme: remove os.Exit(1) on receiver connection loss — a library must never terminate the host process; it now signals reconnect instead. - socks5: split Bind() from Start() to support the pre-bind check. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GqZJxeewiSYYTHLG4z5Fdt
5.1 KiB
5.1 KiB
OpenFlux iOS — распространение (TestFlight / App Store Connect)
Документ фиксирует, что вопрос сборки и распространения iOS-приложения OpenFlux был проработан: приложение собрано с нуля, подписано и загружено в App Store Connect.
Что сделано
- Go-ядро → статическая библиотека. Добавлен cgo-слой экспортов
(
../export_ios.go, сборка по тегуios):OpenFluxStartClient,OpenFluxStop,OpenFluxIsRunning,OpenFluxIsConnected,OpenFluxStatsJSON,OpenFluxReadLog,OpenFluxFreeString. Сборка:../build_ios.sh→../output/ios/liboflux.a(+ авто-заголовокliboflux.h). - iOS-приложение (SwiftUI, XcodeGen). Экран с полем Yandex.Docs URL,
Start/Stop, индикатор состояния, живой лог и кнопка Test (проверяет тоннель
запросом через локальный SOCKS5
127.0.0.1:1080). Линкуетliboflux.a. - Иконка 1024×1024 в asset-каталоге (обязательна для загрузки).
- Подпись и архив. Automatic signing, team
8GQH8GQ252, Cloud Managed Apple Distribution. Экспортирован App Store.ipa. - Загрузка в App Store Connect через ASC API-ключ (см. ниже).
Флаг
ITSAppUsesNonExemptEncryption = false— экспортная документация по шифрованию не требуется (используется только стандартный HTTPS/TLS).
Параметры
| Параметр | Значение |
|---|---|
| Bundle ID | com.p1neapplexpress-saharev.openflux |
| Team ID | 8GQH8GQ252 (Alexandr Revin, Individual) |
| Marketing version | 1.0.0 |
| Deployment target | iOS 15.0 |
| Architecture | arm64 (device) |
| ASC API Key ID | <KEY_ID> |
| ASC Issuer ID | <ISSUER_ID> |
| Приватный ключ | ~/.appstoreconnect/private_keys/AuthKey_<KEY_ID>.p8 (НЕ коммитить) |
Полная сборка одной командой
Из корня репозитория:
./build_ios_app.sh
Результат: ios-app/build/export/OpenFlux.ipa (подписан для App Store).
Загрузка в TestFlight
xcrun altool --upload-app -f ios-app/build/export/OpenFlux.ipa -t ios \
--apiKey <KEY_ID> --apiIssuer <ISSUER_ID>
Билд появляется в TestFlight через несколько минут после обработки Apple.
Новый билд
Перед каждой новой загрузкой поднять номер сборки в ios-app/project.yml:
settings:
base:
CURRENT_PROJECT_VERSION: "3" # +1
Apple не принимает повторно тот же номер сборки.
История загрузок
| Дата | Build | Delivery UUID | Примечание |
|---|---|---|---|
| 2026-09-10 | 1 | <uuid-1> |
первый билд |
| 2026-09-10 | 2 | <uuid-2> |
+ флаг шифрования, без экспортной документации |
| 2026-09-10 | 3 | <uuid-3> |
+ транспорт MAX в UI, настраиваемый порт, no-crash bind |
Ограничения и риски распространения
- Приложение — инструмент обхода блокировок. Для публичного распространения
в App Store действуют Guideline 5.4 (VPN): требуется
NetworkExtensionи аккаунт-организация (не Individual); текущий вид почти наверняка получит reject на ревью. - TestFlight Internal Testing (разработчик + внутренние пользователи) Beta App Review не проходит — работает уже сейчас. External Testing и релиз — проходят.
- Возможно региональное снятие (Apple удаляла обходные приложения из ряда сторов по требованию регуляторов).
- Тоннелирование через Яндекс.Документы / MAX вероятно нарушает их ToS.
- Приложение поднимает локальный SOCKS5; системное туннелирование всего
устройства потребует отдельного таргета
NEPacketTunnelProvider— в этот билд не входит.
Безопасность
AuthKey_*.p8— секрет, даёт доступ к App Store Connect. Не коммитить в git, хранить только в~/.appstoreconnect/private_keys/. Компрометацию — отзывать в App Store Connect → Users and Access → Integrations.- Key ID и Issuer ID сами по себе не секретны, но без
.p8бесполезны.