Проєкт є. Підписаний iOS-випуск ще потрібно підготувати.
Що всередині
- LegionZakhyst.xcodeproj — проєкт і ціль iPhone/iPad, мінімальна iOS 17.
- LegionZakhystApp.swift — SwiftUI, кнопки назад/оновлення, інструкція й налаштування сервера.
- BrowserModel.swift — WKWebView, системні підтвердження JavaScript, завантаження документа й меню «Поділитися».
- ServerPolicy.swift — перевірка адреси та origin.
- Info.plist — дані застосунку, мережеві налаштування й пояснення доступу до локальної мережі.
Залежностей Swift Package/CocoaPods немає. Приватні ключі, Team ID, паролі та робочі дані в архів не включені. Початкова адреса — https://legion-zakhyst.servebeer.com; її можна змінити в меню «Адреса сервера». Після перенесення на Proxmox домен залишиться тим самим. При першому запуску цієї версії відомі старі адреси компанії одноразово переводяться на HTTPS: http://192.168.0.35:8080, http://91.215.71.102:8080, http://127.0.0.1:8088 та http://localhost:8088. Власна інша адреса та пізніший ручний вибір зберігаються. Після зміни origin потрібен новий вхід.
Як підготувати на Mac
- Розпакуйте архів, відкрийте
LegionZakhyst.xcodeprojу Xcode з SDK iOS 17 або новішим. Перевірте вибрану цільLegionZakhyst. - Спочатку зберіть і запустіть у Simulator. Приклад перевірки в Terminal на Mac:
xcodebuild -project LegionZakhyst.xcodeproj -target LegionZakhyst \
-configuration Debug -sdk iphonesimulator CODE_SIGNING_ALLOWED=NO build
- У «Signing & Capabilities» оберіть свій Apple Team, погодьте bundle identifier
ua.legion.zakhystі автоматичний підпис. Реальний пристрій потребує підпису й належного профілю. Не вставляйте сертифікат чи пароль у вихідний код. - Підключіть iPhone та iPad для перевірок нижче. Для локального сервера пристрій повинен мати мережевий доступ до ВМ. Підтвердьте запит iOS на локальну мережу; при відмові змініть дозвіл у налаштуваннях iOS.
- Перед розповсюдженням додайте справжній AppIcon у asset catalog і налаштуйте його для цілі. У цьому мінімальному проєкті AppIcon не включений. Перевірте назву, номер збірки, локалізацію, відомості про конфіденційність і вимоги обраного каналу Apple.
- Лише після успішних перевірок створіть Archive у Xcode та оберіть погоджений канал: TestFlight, App Store або інший дозволений Apple спосіб. Посилання на такий випуск зараз відсутнє.
Підписання описане в документації Xcode. Вимоги й доступність каналу перевіряє власник Apple-акаунта під час випуску.
Мережа та права
Основна адреса приймає HTTPS або HTTP з IPv4 у діапазонах RFC1918: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16. Адреси з паролем, шляхом, query або fragment відхиляються. Вбудована навігація обмежена origin сервера. Зовнішні http/https/mailto/tel-посилання відкриваються окремо лише після натискання користувача. Скрипт чи redirect не можуть самостійно відкрити зовнішній застосунок.
Перевірка TLS використовує системну довіру; винятків для недовіреного сертифіката немає. Вхід і ролі перевіряє вебсервер; нативний застосунок не перетворює клієнта на співробітника або адміністратора. Власна база, паролі й автономні копії особових справ у код застосунку не вбудовуються.
NSAllowsArbitraryLoadsInWebContent дозволяє поточний LAN HTTP у WKWebView, не вимикаючи загальну ATS-політику для URLSession. Доступ до локальної мережі пояснює NSLocalNetworkUsageDescription. Перед магазинним випуском обґрунтуйте необхідні ATS-виключення або перейдіть на HTTPS. Джерела Apple: ATS для WebContent, локальна мережа.
Що обов’язково перевірити
| Сценарій | Очікуваний результат |
|---|---|
| LAN, відмова в дозволі, інша мережа | Робота за доступної мережі; зрозуміле повідомлення при недоступності. 127.0.0.1 не використовується як адреса ВМ. |
| Зміна сервера, недовірений HTTPS | Одноразова міграція тільки відомих адрес компанії, власна інша адреса та пізніший ручний вибір зберігаються. Нова навігація й вхід на новому origin; чужі переходи заблоковані; недовірений TLS не обходиться. |
| Клієнт, pending, employee, admin, superadmin | Ті самі серверні права, що в браузері; чужа папка не відкривається співробітнику, клієнт не отримує внутрішній доступ. |
| Документ і заміна | HTML file input відкриває системний picker. PDF/DOCX/XLSX/JPG/PNG до 8 МБ проходять серверну перевірку; стара версія зберігається до підтвердження. «Скасувати» не замінює файл. |
| Завантаження документа | WKDownload використовує чинний сеанс. Файл з origin сервера відкриває системне меню «Поділитися», його можна зберегти у Files. Redirect на чужий origin скасовується. Тимчасовий файл видаляється після завершення меню. |
| iPhone/iPad, поворот екрана | Кнопки, нижня навігація, меню «Ще», вибір файла й лист «Поділитися» доступні у підтримуваних орієнтаціях. Немає перекриття safe area, клавіатурою чи нижньою панеллю. Усі дозволені роллю розділи відкриваються; недоступні не з’являються. |
| Калькулятор, чат, вихід | Ціни й права перевіряє сервер; зміна кількості оновлює результат; вихід закриває доступ. |
Нативне завантаження підтримує PDF, DOCX, XLSX, JPG/JPEG, PNG та ZIP з обмеженням 20 МБ; HTML завантаження та APK не передаються як документи. Спільну папку всіх файлів застосунок не відкриває. Після явного збереження у Files копію контролює власник пристрою. API завантаження описане в WKDownloadDelegate.
Випуск 1.1.3: інтерфейс застосунку
Проєкт має MARKETING_VERSION=1.1.3 і CURRENT_PROJECT_VERSION=5. WKWebView позначає мобільний застосунок, щоб кабінет відображав нижню навігацію «Огляд / Товари / Чат / Ще» після підтвердженого службового входу. «Ще» збирає інші розділи й налаштування за поточними серверними правами. Позначка інтерфейсу не надає доступу. Цей режим потребує запуску й перевірки на iPhone/iPad перед випуском. Автоматичне пропонування APK стосується Android; це не канал оновлення iOS. Нове встановлення використовує домен HTTPS. Перевірте системну довіру сертифікату, Secure-сеанс, вхід, CSRF та приватне завантаження файла. Сертифікат не можна обходити або замінювати недовіреним винятком. Головна сторінка зберігає 3D-модель будинку зі сценаріями проникнення, пожежі й відеоспостереження та локальні ресурси без CDN.
Команда й особисті вкладення
Поточний проєкт зберігає посади, картки вибору, ручні статуси й чат із файлами попереднього випуску. Для особистого вкладення HTML file input використовує системний вибір файла; сервер обмежує п’ять файлів і 10 МБ разом, у загальному чаті прикріплення заборонене. Завантаження приватного файла проходить з чинним cookie лише для учасника розмови. Системні Windows-сповіщення не є нативними push-сповіщеннями iPhone; закритий застосунок їх не отримує.
Оновлення iOS
Прямого встановлення оновлення з довільного ZIP/IPA немає. Після підписаного випуску слід налаштувати App Store/TestFlight або інший обраний канал Apple і лише тоді додати реальне посилання. Наразі меню пояснює стан проєкту; фіктивне посилання чи готовий IPA не створювалися. Оновлення вебсайта на сервері доступне в WKWebView після перезавантаження сторінки.