[ru]
# 1. Введение
SecureMessaging -- это проект, содержащий пример обмена данными с Рутокен в устройствах с операционной системой iOS по защищенному каналу с использованием криптопровайдера CryptoPro. Подробную информацию о технологии защищенного канала взаимодействия с токеном можно найти по адресу: http://dev.rutoken.ru/pages/viewpage.action?pageId=10059883
Пример демонстрирует обмен данными с Рутокен с использованием двух интерфейсов: PKCS#11 и CSP.

Пример оптимизирован для сборки в Xcode версии 8 и выше. Для сборки примера необходимо иметь действительный профиль разработчика (см. https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/Introduction/Introduction.html).

2. Сборка примера
	1. Для успешной сборки примера в проект необходимо установить дополнительные бинарные компоненты.
	Добавьте следующие фреймворки в директорию ~/SecureMessaging/Frameworks:
		- CPROCSP.framework (доступен для загрузки по адресу https://www.cryptopro.ru/products/csp/downloads#latest_csp40; настройка CPROCSP.framework производится в соответствии с CPROCSP.framework/ReadMe.txt)
		- rtpkcs11ecp.framework (доступен в составе комплекта разработчика Рутокен (rtSDK) по пути mobile/ios/pkcs11/lib/rtpkcs11ecp.framework)
		- RtPcsc.framework (доступен в составе комплекта разработчика Рутокен (rtSDK) по пути mobile/ios/pcsc/lib/RtPcsc.framework)
		- RDRRtSupCp.framework (доступен в составе комплекта разработчика Рутокен (rtSDK) по пути mobile/ios/CryptoPro/lib/RDRRtSupCp.framework)
	В случае сборки примера в составе комплекта разработчика Рутокен (rtSDK) при сохранении оригинальной структуры директорий копирование фреймворков rtpkcs11ecp.framework, RtPcsc.framework, RDRRtSupCp.framework в директорию ~/SecureMessaging/Frameworks не является обязательным -- при сборке проекта происходит автоматическое их обнаружение по предустановленным путям.
	2. Откройте проект ~/SecureMessaging/testiphoneappl.xcodeproj в Xcode.
	3. В левой панели выберите проект, затем в основном окне в списке targets выберите цель сборки, перейдите на вкладку "General", в подразделе Signing указажите команду разработки с валидным сертификатом подписи приложения.
	4. В левой панели выберите проект, затем в основном окне в списке targets выберите цель сборки, перейдите на вкладку "Build Settings", в параметр "Other linker flags" установите флаг "-force_load ${path_to_your_frameworks_directory}/RDRRtSupCp.framework/RDRRtSupCp"
	5. Выберите в качестве целевого устройства "iOS Device" и выполните "Product->Build".

В cлучае необходимости поддержки ввода пароля инициализации один раз для всех приложений разработчика, переименуйте Entitlements.plistsample в Entitlements.plist и добавьте Entitlements.plist в качестве Code Signing Entitlements и в список копируемых на устройство ресурсов в Xcode, заменив перед этим строку YYYYYYYYYY в файле на ваш Bundle Seed ID.

3. Запуск примера
Запустить собранный пример на iOS-устройстве можно при помощи Xcode посредством команды "Product->Run".

Copyright Aktiv Co. 2018.

[en]
1. Introduction
SecureMessaging is a sample project to access Rutoken using CSP interface (CPROCSP.framework) with trusted data channel (secure messaging technology) on iOS devices. For more information about trusted data channel please visit http://dev.rutoken.ru/pages/viewpage.action?pageId=10059883
The sample demonstarates interaction with Rutoken using twi interfaces: PKCS#11 and CSP.

The sample is optimized for building with Xcode 8 and higher. To build the sample one has to have valid developer profile (see https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/Introduction/Introduction.html). 

2. How to build
	1. To build the sample successfully one has to set additional binary components.
	Put following frameworks to ~/SecureMessaging/Frameworks:
		- CPROCSP.framework (can be downloaded from https://www.cryptopro.ru/products/csp/downloads#latest_csp40; set up CPROCSP.framework in accordance with CPROCSP.framework/ReadMe.txt)
		- rtpkcs11ecp.framework (can be found in Rutoken SDK (rtSDK) at mobile/ios/pkcs11/lib/rtpkcs11ecp.framework)
		- RtPcsc.framework (can be found in Rutoken SDK (rtSDK) at mobile/ios/pcsc/lib/RtPcsc.framework)
		- RDRRtSupCp.framework (can be found in Rutoken SDK (rtSDK) at mobile/ios/CryptoPro/lib/RDRRtSupCp.framework)
	In case of building the sample from Rutoken SDK (rtSDK) provided original filestructure is not tempered, one is not obliged to copy rtpkcs11ecp.framework, RtPcsc.framework, RDRRtSupCp.framework to ~/SecureMessaging/Frameworks for this frameworks are discovered automatically by predefined pathes during the build process.
	2. Open project ~/SecureMessaging/testiphoneappl.xcodeproj in Xcode.
	3. Choose project in the left panel of Xcode, choose the target in main window, set up your development team in "Signing" section of "General" tab.
	4. Choose project in the left panel of Xcode, choose the target in main window and open "Build Settings" tab, set up flag "-force_load ${path_to_your_frameworks_directory}/RDRRtSupCp.framework/RDRRtSupCp" in "Other linker flags"
	5. Choose target device and perform "Product->Build".

In case you need to support one time SM initialisation for all vendor's application, replace string "YYYYYYYYYY" with your Bundle Seed ID in the file Entitlements.plistsample, rename Entitlements.plistsample to Entitlements.plist, add Entitlements.plist as Code Signing Entitlements and add it to Resource Copy List in Xcode.

3. Running the sample
To run the sample on iOS device perform "Product->Run" in Xcode.

Copyright Aktiv Co. 2018.
