Інтеграція VMware Workspace ONE для управління мобільним додатком
Workspace ONE (колишній AirWatch)—EMM-платформа VMware, яка об'єднує MDM, MAM, Identity та Zero Trust Access в одному продукті. Відрізняється від Intune більш глибокими можливостями MDM для Android-пристроїв та історично сильною підтримкою Rugged-девайсів (Zebra, Honeywell). Для мобільного додатка інтеграція будується на Workspace ONE SDK—аналог Intune MAM SDK, але з власними API та lifecycle.
Workspace ONE SDK: архітектура
SDK складається з компонентів:
- AWSDKCore — базовий SDK, обробка політик, аутентифікація через Workspace ONE Intelligent Hub.
- AWContentLocker — захищене файлове сховище.
- AWNetworkKit — керована мережа через Workspace ONE Tunnel (per-app VPN).
- AWDataLoss — перехват clipboard, file sharing, screenshot.
На iOS через CocoaPods або SPM:
pod 'AWSDK', '~> 25.0'
На Android через Maven:
implementation 'com.vmware.ws1.android:airwatchsdk:25.0.0'
Ініціалізація та enrollment на iOS
Workspace ONE SDK потребує наявності Workspace ONE Intelligent Hub на пристрої. Hub виступає брокером між SDK вашого додатка та WS1 сервером. Без Hub SDK не отримає політики.
import AWSDK
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication,
didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
AWController.clientInstance().start { error in
if let error = error {
print("WS1 SDK error: \(error.localizedDescription)")
} else {
self.applyManagedConfiguration()
}
}
return true
}
private func applyManagedConfiguration() {
let profile = AWController.clientInstance().sdkProfile()
let serverURL = profile?.customPayloadProfile?.payload?["BackendURL"] as? String
AppConfig.shared.backendURL = serverURL ?? AppConfig.defaultBackendURL
}
}
AWController.clientInstance().start—асинхронний виклик. Додаток показує splash screen доки SDK ініціалізується та отримує політики. Якщо пристрій не зареєстрований у WS1, Hub запускає enrollment flow.
Custom Payload: передача конфігурації в додаток
Workspace ONE передає конфігурацію через Custom Payload у SDK Profile. Це аналог Managed App Configuration в Apple MDM, але управляється через WS1 Console:
let sdkProfile = AWController.clientInstance().sdkProfile()
guard let customPayload = sdkProfile?.customPayloadProfile?.payload else { return }
let backendURL = customPayload["BackendURL"] as? String
let featureFlags = customPayload["FeatureFlags"] as? [String: Bool]
let sessionTimeout = customPayload["SessionTimeoutMinutes"] as? Int ?? 30
У WS1 Console Custom Payload задається в XML або JSON у розділі Apps → SDK Profiles → Custom Settings. Зміна у консолі застосовується на пристрій при наступному checkin (зазвичай кожні 4 години або при foreground-переході додатка).
Per-app Tunnel: керована мережа
Workspace ONE Tunnel—це per-app VPN без необхідності реєструвати MDM-профіль на пристрій (для MAM-only сценаріїв). Трафік конкретного додатка туннелюється через корпоративний шлюз.
Для включення Tunnel у додатку—додати AWNetworkKit та налаштувати URL-сесії:
import AWNetwork
// Замінюємо стандартний URLSession на Tunnel-aware
let tunnelConfig = URLSessionConfiguration.default
AWNetworkKit.shared.configureTunnel(for: tunnelConfig)
let session = URLSession(configuration: tunnelConfig)
Tunnel працює прозоро—додаток робить звичайні URLSession-запити, SDK перенаправляє їх через VPN. Не потрібно змінювати URLRequest або додавати заголовки.
Порівняння з Microsoft Intune
| Workspace ONE | Microsoft Intune | |
|---|---|---|
| Android MDM | Відмінна підтримка Rugged | Стандартна Android Enterprise |
| iOS MDM | Повний набір MDM | Повний набір MDM |
| MAM без MDM | Workspace ONE SDK | Intune MAM SDK |
| Identity | VMware Identity Manager | Azure AD / Entra |
| Краще підходить | Mixed OS fleet, Rugged | Microsoft 365 організації |
| On-premise | Workspace ONE On-Premises | Лише хмара |
Для організацій з парком Android-пристроїв Zebra або Honeywell—Workspace ONE переважніша через нативну підтримку OEMConfig та Staging-профілів.
Обробка політик DLP
let dlpPolicy = AWController.clientInstance().sdkProfile()?.dataLossPreventionProfile
if dlpPolicy?.copyPasteOut == false {
// Запрещуємо копіювання у інші додатки
UIPasteboard.general.items = []
}
if dlpPolicy?.enableScreenCapture == false {
// Показуємо пустий екран при capture
NotificationCenter.default.addObserver(
forName: UIScreen.capturedDidChangeNotification,
object: nil,
queue: .main
) { _ in
self.sensitiveContentView.alpha = UIScreen.main.isCaptured ? 0 : 1
}
}
Етапи інтеграції
Настройка WS1 UEM Console → створення SDK Profile з Custom Payload → додавання AWSDK у додаток → реалізація enrollment lifecycle → Custom Payload mapping → настройка Tunnel (якщо потрібен) → DLP політики → тестування на managed-пристроях → rollout.
Терміни: базова інтеграція SDK з Custom Payload—3–4 тижні. Повний проект з Tunnel, DLP, політиками та тестуванням—6–10 тижнів. Вартість розраховується індивідуально.







