Інтеграція MobileIron для управління мобільним додатком
MobileIron—EMM-платформа, з 2020 року у складі Ivanti як Ivanti Mobile@Work та Ivanti Neurons for MDM. Зустрічається в enterprise-організаціях з довгою історією MDM-розгортання: банки, державні структури,크крупний retail. Якщо замовник уже використовує MobileIron/Ivanti—інтеграція додатка будується на MobileIron AppConnect SDK або через стандартний Managed App Configuration протокол Apple/Android Enterprise.
Два шляхи інтеграції: AppConnect SDK vs Managed Config
Шлях 1: MobileIron AppConnect SDK. Проприетарний SDK, який створює ізольований контейнер навколо додатка. Дані додатка шифруються незалежним ключем, керованим MobileIron сервером. Контейнер відкривається лише при наявності активної MobileIron-реєстрації.
Шлях 2: Managed App Configuration (Apple) / Android Managed Configurations. Стандартний механізм без проприетарного SDK. MobileIron як MDM-сервер підтримує обидва протоколи. Додаток не залежить від вендора EMM—працює з Intune, Workspace ONE, MobileIron.
Для нових проектів переважіємо Managed App Configuration—менше vendor lock-in. AppConnect SDK виправданий, якщо потрібні специфічні функції: AppConnect Tunnel (per-app VPN), шифрування AppConnect Keychain, або інфраструктура вже на MobileIron і переходу не планується.
AppConnect SDK: інтеграція на iOS
Додавання через CocoaPods:
pod 'AppConnectLib'
Ініціалізація:
import AppConnectLib
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, ACManagerDelegate {
func application(_ app: UIApplication, didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
ACManager.shared().delegate = self
ACManager.shared().startUp(with: self.window)
return true
}
// Отримуємо конфігурацію від MobileIron сервера
func appConnectConfigReceived(_ config: [AnyHashable: Any]?) {
guard let config = config else { return }
let serverURL = config["server_url"] as? String
let orgID = config["org_id"] as? String
AppSettings.shared.configure(serverURL: serverURL, orgID: orgID)
}
// Політика DLP змінилась
func appConnectPolicyReceived(_ policy: [AnyHashable: Any]?) {
let copyPasteAllowed = policy?["copy_paste_out"] as? Bool ?? false
DLPEnforcer.shared.setCopyPasteEnabled(copyPasteAllowed)
}
}
AppConnect Keychain: ізольоване сховище секретів
AppConnect надає власний Keychain, зашифрований ключем контейнера. Якщо MDM-реєстрація відзивається—ключі недоступні без повторної авторизації.
// Зберігання через AppConnect Keychain
let acKeychain = ACKeychain()
acKeychain.setData(tokenData, forKey: "auth_token", inGroup: "corporate")
// Читання
let tokenData = acKeychain.data(forKey: "auth_token", inGroup: "corporate")
Відмінність від стандартного iOS Keychain: при remote wipe через MobileIron AppConnect Keychain очищується незалежно. Особисті ключи користувача не торкаються.
Android: MobileIron Android AppConnect
На Android AppConnect працює аналогічно, реалізований через AppConnect wrapper навколо Application:
class MyApplication : AppConnectApplication() {
override fun onCreate() {
super.onCreate()
// AppConnect перехватує ContentProvider, ClipboardManager, FileProvider
}
}
Важливо: AppConnectApplication вимагає, щоб усі Activity наслідувалися від AppConnectActivity. Серйозне обмеження для legacy-додатків на Fragment + ViewPager архітектурі. Частковий вихід—AppConnectFragmentActivity як проміжний базовий клас.
Ivanti Neurons for MDM: сучасний API
Після ребрендінгу в Ivanti з'явився новий cloud-native MDM з REST API: GET /api/v1/devices, POST /api/v1/policies, DELETE /api/v1/apps/{appId}. Дозволяє автоматизувати управління додатком з CI/CD без ручних дій в UI консолі.
Приклад: автоматичний push нового IPA при релізі через GitHub Actions:
# Ivanti Neurons REST API
curl -X POST "https://tenant.mobileiron.com/api/v1/apps" \
-H "Authorization: Bearer $IVANTI_TOKEN" \
-H "Content-Type: multipart/form-data" \
-F "file=@build/app.ipa" \
-F "metadata={\"bundleId\":\"com.company.app\",\"appStoreId\":\"enterprise\"}"
Типові проблеми при інтеграції
AppConnect не ініціалізується при першому запуску. Причина: MobileIron Go (клієнтське додаток) не встановлено або не залогінено. AppConnect SDK потребує MobileIron Go як «сторожа контейнера». У production enrollment workflow—MobileIron Go встановлюється першим через MDM.
Конфігурація не приходить після смени політики на сервері. AppConnect polling interval за замовчуванням—15 хвилин. Для force-sync: ACManager.shared().checkIn(). У production додаємо checkin при кожному applicationWillEnterForeground.
Етапи інтеграції
Аналіз інфраструктури MobileIron/Ivanti → вибір AppConnect SDK або Managed App Configuration → інтеграція SDK → реалізація config/policy callbacks → AppConnect Keychain → тестування enrollment та wipe → деплой через MobileIron App Catalog.
Терміни: Managed App Configuration (без SDK)—2–3 тижні. Повна інтеграція AppConnect SDK—4–7 тижнів. Вартість розраховується індивідуально.







