iOS и eSIM
Данная статься является четвертой в цикле лекций по изучению процесса перепродажи тарифов eSIM и в ней мы поговорим более подробнее из чего состоит процесс установки eSIM на телефоны с операционной системой iOS. Первая статья была обзорной и рассказывала об общей актуальности данной темы, вторая статья погружала нас в различные части экосистемы eSIM, а в третьей мы говорили о процессе установки eSIM на телефоны с операционной системой Android. В дальнейшем мы будем рассматривать предлагаемое решение для перепродажи тарифов eSIM.
iOS - это операционная система, разработанная Apple на базе Mac OS и работающая на их мобильных телефонах и планшетах, но в отличие от Android, iOS не имеет открытого исходного кода. С момента выпуска iOS 12.1 iOS поддерживает создание профилей eSIM, многие iPhone, поступающие в продажу сегодня, оснащены возможностями eSIM. В этой главе рассказывается о том, как структурированы и работают приложения для iOS, а также о том, как приложение для iOS может реализовать некоторые функциональные возможности.
1. SDK
iOS SDK - это набор, содержащий инструменты и фреймворки, необходимые для создания приложений для устройств под управлением iOS. Архитектуру iOS и SDK можно разделить на четыре набора, которые можно рассматривать как слои, как показано на рисунке 1. Нижние уровни содержат фундаментальные технологии и сервисы, в то время как более высокие уровни построены на нижних уровнях для создания более сложных и изощренных сервисов.
Слой Cocoa touch содержит основные фреймворки, необходимые при создании приложения для iOS, такие как фреймворк UIKit, который, например, предлагает поддержку для создания пользовательского интерфейса и управления им и предоставления пользовательского ввода, а также других типов ввода в приложение. Медиауровень и его фреймворки используются, когда в приложении используются изображения, анимация, аудио или видео. Основные сервисы содержат некоторые фреймворки, которые предоставляют основные сервисы, необходимые для создания полезных приложений, такие как Core Telephony framework, который будет обсуждаться позже в разделе 5. Базовый уровень ОС содержит фреймворки, которые используются для предоставления низкоуровневых служб, связанных с сетями и оборудованием, таких как доступ к файловой системе или доступ к Bluetooth. Эти фреймворки очень ограничены разработчиками, но вместо этого используются фреймворками более высокого уровня для предоставления сервиса, который может использовать разработчик [32].
2. Xcode
Xcode - это IDE от Apple (интегрированная среда разработки), которая используется для создания и тестирования программного обеспечения для продуктов Apple, таких как iPhone, iPad и Mac [33]. Он включает в себя новейшие SDK для различных платформ и поддерживает официально поддерживаемые языки программирования, которые включают Objective-C и Swift. Xcode доступен только для macOS и не может быть запущен, например, в Windows.
3. UIKit
Платформа UIKit содержит все основные объекты и инфраструктуру, необходимые для создания приложения для iOS. Он предоставляет приложению способы взаимодействия с системой, отображения содержимого на экране, а затем позволяет пользователю взаимодействовать с отображаемым содержимым с помощью различных методов ввода. Он также обеспечивает основной цикл событий, с помощью которого можно управлять всеми различными взаимодействиями между приложением, пользователем и системой [34]. Приложения, созданные с помощью UIKit, структурированы на основе шаблона проектирования MVC (Model-View-Controller), где модель отвечает за все данные и логику, представление визуально представляет данные пользователю, а контроллер соединяет модель и представление, перемещая данные между ними при необходимости [35]. Это можно увидеть на рисунке 2, где также показаны некоторые основные компоненты приложения, такие как объект UIApplication, который запускает основной цикл событий приложения и отвечает за жизненный цикл приложения и управляет им.
3.1 Жизненный цикл приложения
В течение своего жизненного цикла приложение iOS проходит через набор из нескольких состояний, как показано на рисунке 3. При запуске система переведет приложение либо в фоновое состояние, либо в неактивное, если пользовательский интерфейс вот-вот будет отображен. Как только пользовательский интерфейс появляется на экране на переднем плане, система автоматически переводит приложение в активное состояние. Теперь приложение будет переключаться между активным и фоновым состояниями вплоть до момента закрытия приложения, когда оно переходит в приостановленное состояние, а затем обратно в не запущенное [36]. При каждом из этих переходов приложение может выполнять некоторые задачи, такие как сохранение данных и освобождение любых общих ресурсов при переходе в приостановленное состояние и освобождение памяти при переходе в фоновое состояние.
Начиная с iOS 13, можно создавать несколько так называемых сцен. Сцена содержит один экземпляр пользовательского интерфейса приложения и выполняется одновременно с другими сценами в том же приложении, разделяя такие вещи, как память и пространство процесса [37]. Все сцены в приложении обрабатываются отдельно и имеют свои собственные события жизненного цикла, независимые друг от друга, и даже независимы от самого приложения. Это означает, что каждая сцена может находиться в разных состояниях в данный момент времени [36].
4. Права
Права в iOS - это права или привилегии, которые используются для предоставления приложениям определенных возможностей, таких как использование специального сервиса. Они настраиваются в Xcode как пары ключ-значение и хранятся в файле списка с расширением .entitlements [38].
Тип значения, связанного с ключом права доступа, зависит от ключа. Многие ключи принимают логические значения, т.е. true или false, но могут также принимать в качестве значения строку или массивы строк [39].
Права, определенные в файле прав доступа для приложения, затем в процессе подписи кода приложения объединяются с информацией из учетной записи разработчика вместе с другой соответствующей информацией о проекте, чтобы определить и применить окончательный набор прав, предоставленных приложению. Эти права затем встраиваются в подпись кода приложения [38][39].
5. eSIM в iOS
Базовая платформа телефонии, расположенная на уровне основных служб, предоставляет услуги для управления, например, информацией об абоненте и получения информации о поставщике услуг сотовой связи пользователя. Начиная с iOS 12.1, он также поддерживает управление eSIM с помощью классов CTCellularPlanProvisioning и CTCellularPlanProvision- ingRequest [40].
Класс CTCellularPlanProvisioning содержит два метода, supportsCellularPlan() и addPlan() [41]. В отличие от Android, здесь нет методов, которые можно использовать для включения, отключения или удаления профиля из приложения. Ниже описаны только два существующих метода:
- Метод supportsCellularPlan() проверяет, есть ли у устройства порт поддержки eSIM.
- Метод addPlan() запускает процесс подготовки нового файла eSIM pro. В качестве входных данных addPlan() принимает обработчик завершения, который выполняется после завершения процесса подготовки, указывающий, был ли он успешным, неудачным или оказался в неизвестном состоянии, и CTCellularPlanProvisioningRequest, используемый для идентификации профиля eSIM для загрузки. Когда приложение вызывает этот метод, запускается мастер iOS, который проведет пользователя через процесс установки и настройки [42].
CTCellularPlanProvisioningRequest, в свою очередь, содержит адрес SM-DP+ и необязательно маркер кода активации, код подтверждения, EID, ICCID и OID, который является идентификатором объекта запроса на предоставление и используется в качестве входных данных для метода addPlan() в CTCellularPlanProvisioning [43].
Чтобы иметь возможность использовать любой из этих классов и методов, вызывающее приложение должно иметь соответствующие права. Право на доступ к eSIM в iOS можно запросить у Apple, отправив форму по адресу https://developer.apple.com/contact/request/esim-access-permission , но это право предоставляется не для всех, поскольку оно предназначено исключительно для приложений операторов беспроводной связи и может быть запрошено только владельцем учетной записи команды разработчиков в Apple developer program.
Литература
[1] D. Gleeson, eSIM Device Sales Forecast: Smartphones, Tablets, and Wearables, 2019–24, 2019.
https://ovum.informa.com/resources/product-content/esim-device-sales-forecast-smartphones-tablets-and-wearables-201924-ces004-000118
[2] E. Vahidian, Evolution of the SIM to eSIM, Norwegian University of Science and Technology, Department of Telematics, 2013.
[3] D. G. Koshy, S. N. Rao, Evolution of SIM Cards – What’s Next?, Interna- tional Conference on Advances in Computing, Communications and Infor- matics (ICACCI), Bangalore, 2018, pp. 1963-1967.
[4] B. A. Abdou, Commercializing eSIM for Network Operators, 2019 IEEE 5th World Forum on Internet of Things (WF-IoT), Limerick, Ireland, 2019, pp. 616-621.
[5] T. J. Gerpott, S. May, Embedded Subscriber Identity Module eSIM, Business
& Information Systems Engineering 59, 2017, pp. 293–296. https://doi.org/10.1007/s12599-017-0474-4
[6] P. Hristova and J. Bryan, eSIM For The Roaming Consumer, Roaming Con- sultancy Company Limited, 2018.
http://marketing.uros.com/ROCCO Roaming Consumer eSIM%20Strategy%20Report%202018.pdf
[7] GSMA, eSIM Whitepaper, The what and how of Remote SIM Provisioning, 2018.
https://www.gsma.com/esim/wp-content/uploads/2018/12/esim-whitepaper.pdf
[8] M. Meyer, E. A. Quaglia and B. Smyth, An Overview of GSMA’s M2M Remote Provisioning Specification, 2019.
[9] A. Vesselkov, H. Hammainen and P. Ikalainen, Value networks of embedded SIM-based remote subscription management, 2015 Conference of Telecommu- nication, Media and Internet Techno-Economics (CTTE), Munich, 2015, pp. 1-7.
[10] M. Tsurusawa, Latest Trends in Remote SIM Provisioning Technology, Special Feature - The future of cellular networks, New Breeze Vol. 29 No.3 Summer, 2017, pp. 1-10.
[11] J. Park, K. Baek and C. Kang, Secure Profile Provisioning Architecture for Embedded UICC, 2013 International Conference on Availability, Reliability and Security, Regensburg, 2013, pp. 297-303.
[12] S. Chitroub, N. Zidouni, H. Aouadia, D. Blaid and R. Laouar, SIM Card of the Next-Generation Wireless Networks: Security, Potential Vulnerabilities and Solutions, 2018 2nd European Conference on Electrical Engineering and Computer Science (EECS), Bern, Switzerland, 2018, pp. 502-509.
[13] M. Meyer, E. A. Quaglia and B. Smyth, Attacks against GSMA’s M2M Re- mote Provisioning, Financial Cryptography and Data Security, 2018, pp. 243- 252.
https://www.blackhat.com/docs/eu-17/materials/eu-17-Meyer-Attacks-Against-GSMAS-M2M-Remote-Provisioning-wp.pdf
[14] Ernst & Young Mobile network operator on-demand subscription management study, 2015.
https://www.ey.com/Publication/vwLUAssets/EY-mobile-network-operator-on-demand-subscription-management/%24FILE/EY-mobile-network-operator-on-demand-subscription-management.pdf
[15] GSMA, RSP Technical Specification Version 2.2.1, 2018. https://www.gsma.com/newsroom/wp-content/uploads//SGP.22-v2.2.1-2.pdf
[16] GSMA, RSP Architecture Version 2.2, 2017. https://www.gsma.com/newsroom/wp-content/uploads//SGP.21_v2.2.pdf
[17] T. Chang, eSIMS: Everything You Need to Know, WhistleOut, September 2019. https://www.whistleout.com/CellPhones/Guides/esims
[18] Huawei, HUAWEI P40 Specifications. https://consumer.huawei.com/en/phones/p40/specs/
[19] Apple, Find wireless carriers that offer eSIM service. https://support.apple.com/en-us/HT209096
[20] T-Mobile T-Mobile Prepaid eSIM app.
https://www.t-mobile.com/support/plans-features/t-mobile-esim-app
[21] Android, Application Fundamentals. https://developer.android.com/guide/components/fundamentals
[22] Android, Introduction to Activities. https://developer.android.com/guide/components/activities/intro-activities
[23] Android, Understand the Activity Lifecycle. https://developer.android.com/guide/components/activities/activity-lifecycle
[24] Android, Content providers. https://developer.android.com/guide/topics/providers/content-providers
[25] Android, Intents and Intent Filters. https://developer.android.com/guide/components/intents-filters
[26] Android, App Manifest Overview. https://developer.android.com/guide/topics/manifest/manifest-intro
[27] Android, Secure an Android Device.
https://source.android.com/security
[28] Android, Application Sandbox.
https://source.android.com/security/app-sandbox
[29] Android, Permissions overview. https://developer.android.com/guide/topics/permissions/overview
[30] Android, Implementing eSIM. https://source.android.com/devices/tech/connect/esim-overview
[31] Android, UICC Carrier Privileges. https://source.android.com/devices/tech/config/uicc
[32] Naveen, iOS Architecture, IntelliPaat, December 2019.
[33] Apple, Xcode.
[34] Apple, UIKit.
[35] Apple, About App Development with UIKit. https://developer.apple.com/documentation/uikit/about_app_development_with_uikit
[36] Apple, Managing Your App’s Life Cycle.
[37] Apple, Scenes. https://developer.apple.com/documentation/uikit/app_and_environment/scenes
[38] Apple, Entitlements.
[39] Apple, About Entitlements.
[40] Apple, Core Telephony. https://developer.apple.com/documentation/coretelephony
[41] Apple, CTCellularPlanProvisioning.
https://developer.apple.com/documentation/coretelephony/ ctcellularplanprovisioning
[42] Apple, addPlan(with:completionHandler:). https://developer.apple.com/documentation/coretelephony/ctcellularplanprovisioning/2981838-addplan
[43] Apple, CTCellularPlanProvisioningRequest.