Реалізація App Wrapping для корпоративного мобільного додатка
App Wrapping—це post-build операція: беремо готовий IPA або APK, оборачиваємо в MAM-оболонку без змін вихідного коду та отримуємо додаток з корпоративними політиками безпеки. Користний для legacy-додатків, сторонніх вендорських продуктів та ситуацій без доступу до вихідного коду.
Коли App Wrapping—правильний вибір
Інтеграція MAM SDK—більш надійний шлях, але потребує доступу до коду та рефакторингу. App Wrapping підходить, коли:
- Вихідний код додатка недоступний (вендорське ПО, старий додаток з командою, що пішла).
- Додаток написаний на сторонньому фреймворку, несумісному з MAM SDK (деякі версії Xamarin, Cordova).
- Потрібно швидко додати базові політики без повного циклу розробки.
- Додаток користується малим числом сотрудників; повний SDK-рефакторинг економічно недоцільний.
Як працює Intune App Wrapping Tool на iOS
Microsoft надає IntuneMAMPackager—command-line інструмент для macOS:
./IntuneMAMPackager/Contents/MacOS/IntuneMAMPackager \
-i /path/to/app.ipa \
-o /path/to/wrapped-app.ipa \
-p /path/to/provisioning-profile.mobileprovision \
-c "Apple Distribution: Company Name (TEAMID)" \
-e /path/to/entitlements.plist \
--use-secondary-ipa-keychain-group true
Упаковщик переподписує додаток, вбудовує MAM-фреймворки в бандл та оновлює Info.plist з MAM-ключами. Результуючий IPA містить IntuneMAMConfigurations.plist та вбудовані фреймворки в Frameworks/.
Що вбудовується автоматично:
- Перехват
UIPasteboard—обмеження copy-paste по MAM-політиці. - Перехват
UIDocumentInteractionController/UIActivityViewController—обмеження «Відкрити в...». - PIN/біометрія при запуску за політикою.
- Selective wipe при відзиві доступу.
- Шифрування файлів у
Documents/таLibrary/каталогах додатка.
Обмеження App Wrapping на iOS
Wrapping не магія. Ряд функцій SDK при wrapping недоступні:
- Multi-identity—управління кількома корпоративними акаунтами в одному додатку. Потребує явної SDK-інтеграції.
- Intune-targeted conditional launch checks—кастомна логіка перевірки compliance. Без коду недоступна.
- Кастомний wipe handler—wrapping видаляє файли додатка, але не може викликати бізнес-логіку очистки (напр., деавторизацію на сервері).
Якщо додаток використовує WKWebView для основного UI—wrapping працює гірше: JavaScript-контент у webview не перехватується. Потрібна SDK-інтеграція або обмеження через WKUserContentController вручну.
App Wrapping на Android
Intune App Wrapping Tool для Android:
java -jar IntuneMAMPackager.jar \
-i app-release.apk \
-o app-wrapped.apk \
-c RSA_KEY_ALIAS \
-ks keystore.jks \
-ksPass keystorePassword \
-alias keyAlias \
-aliasPass aliasPassword
Android wrapping працює через bytecode instrumentation: інструмент переписує Dalvik/ART байткод, замінюючи вызовы системних класів (android.content.ClipboardManager, android.app.Activity) на MAM-обгортки. Менш стабільно, ніж iOS-підхід, може ламатися при агресивних ProGuard/R8-оптимізаціях.
Проблема з Android wrapping: якщо додаток використовує minifyEnabled true з кастомними правилами ProGuard, wrapping tool може не розпізнати переіменовані класи. Рішення—додати -keep правила для системних класів, які wrapping повинен перехватити.
Тестування wrapped-додатка
Після wrapping обов'язково перевіряємо:
- Додаток запускається без краху (частої причини—конфлікт Frameworks при переподписі).
- Політики застосовуються: тестуємо copy-paste у інший додаток—повинно бути заблоковано.
- Selective wipe працює: ініціюємо через Intune Portal, перевіряємо видалення даних.
- Версіонування: при кожному оновленні базового додатка wrapping повторюється. Потрібен CI/CD pipeline.
CI/CD для wrapping (GitHub Actions):
- name: Wrap IPA with Intune
run: |
./IntuneMAMPackager/Contents/MacOS/IntuneMAMPackager \
-i build/app.ipa \
-o build/app-wrapped.ipa \
-p $PROVISIONING_PROFILE \
-c "$SIGNING_CERT"
Етапи проекту
Аналіз додатка на сумісність з wrapping → настройка Intune Portal та App Protection Policy → wrapping + переподпись → тестування політик → інтеграція в CI/CD → rollout через Intune / MDM.
Терміни: однократний wrapping готового додатка—1–2 тижні. Настройка повного pipeline з CI/CD та тестуванням політик—3–5 тижнів. Вартість розраховується індивідуально.







