С момента написания статьи в процедуре сертификации программ произошли изменения. В середине февраля была приостановлена выдача сертификатов DevCert. Сейчас сертификаты DevCert выдаются лишь владельцам Publisher ID, недоступного физическим лицам. Напомним, что сертификация программ – головная боль владельцев смартфонов на ОС Symbian 9 с программной платформой S60 3rd. Сертификаты DevCert ранее раздавались всем желающим и позволяли использовать программы, созданные энтузиастами. Мы подготовили обновлённый материал о сертификации программ для S60 3rd.
Разработчики Symbian OS 9 совершили, по мнению многих пользователей, сумасбродный шаг. Была изобретена сертификация программ (Symbian sign), которая появилась на платформах S60 3rd и UIQ 3.0.
Во-первых, все старые добрые программы для S60 1st и 2nd перестали работать.
Во-вторых, Nokia заявила, что пользователи смартфонов 1st и 2nd были сильно обеспокоены вирусами, а производители этих программ — пиратскими версиями. Если в последнее охотно верится, то от первого заявления финских маркетологов устойчиво веет фальшью безалкогольного пива. Несмотря на «ахи-страхи», которые регулярно раздаются на сетевых форумах, подавляющее большинство пользователей «умных» мобильных (любых платформ) не страдает от программ-вирусов и, надеемся, ещё долго не будет.
Старания Symbian пропали втуне. Оказалось, что написать вредоносную программу для S60 3rd по-прежнему как два байта переслать и проблема пиратского софта никуда не пропала. Сертификация дала возможность компании Symbian собирать дань с разработчиков. В итоге крупные производители стали вытеснять с рынка одиночек-энтузиастов, чьи программы подчас были значительно выше по качеству.
Как уже можно было догадаться, кроме того, что за сертификаты надо было платить, под них ещё придется подгонять программы.
Известно, что любое приложение в ходе работы вызывает различные функции операционной системы. В Symbian OS 9, как и в некоторых других платформах, эти самые функции разбиты по разделам. Разделы, к которым доступ ограничен, требуют от программы capability, что можно перевести как право доступа. Мы будем использовать сленговое слово «капс» (к кнопке CAPS LOCK никакого отношения не имеет). Принято говорить: "Эта функция требует капса XXX". Сертификат, грубо говоря, является паспортом, в котором написано, какие функции программе позволено задействовать.
Правило:
Если некоторая функция требует наличия какого-то капса, то программа должна быть подписана сертификатом, предоставляющим этот самый капс.
Большинство распространённых функций — рисование, обработка нажатий клавиш внутри приложения и многое другое — никаких капсов не требуют. Однако нормальная полезная программа, не использующая ни одной функции из капсов — редкость. Это может быть программа, которая не хранит пользовательских данных, не обращается к системе за информацией, не использует доступ в интернет. Например, калькулятор. Тем не менее, даже такую программу нужно подписать.
Список capabilities:
|
Капсы, помеченные белым цветом, – базовые (Basic Capabilities). Они предоставляются свободно — программист может самостоятельно подписать программу сертификатом SelfSigned, и тогда она будет работать на всех смартфонах S60 3rd. Если программа была подписана самостоятельно, при её установке появляется неприятное предупреждение, которое на русском языке звучит как "Данное приложение ненадёжно и может повредить телефон". Чтобы убрать это предупреждение, необходимо пройти официальную процедуру подписи в Symbian Signed.
Серым цветом помечены системные капсы (System Capabilities). Программа, использующая эти капсы, может быть подписана через процедуру Express Signed. Программистам на время разработки предоставляется особый сертификат DevCert. Программа, подписанная этим сертификатом, работает только на отдельно взятом телефоне. Сертификат предоставляется бесплатно всем желающим.
В результате появился новый для S60 тип ПО - программа, "которую нужно подписать". Что означает - "пользователь самостоятельно получает DevCert , подписывает им программу, и она работает на его телефоне". Так было раньше, частично сохранилось оно и теперь, но со значительными коррективами, о чем будет подробно рассказано в разделе DevCert.
Тёмно-зелёным цветом отмечены ограниченные системные капсы (Restricted System Capabilities). Если программа использует хоть один из этих капсов – она не подлежит подписи через Express Sign, для неё предусмотрена процедура Certified Sign.
И, наконец, синим обозначены особые капсы, доступные только производителям телефонов (Phone Manufacturer Approved capabilies). Я пока ещё не слышал, чтобы кто-то из рядовых программистов получил легально какой-то из этих капсов. Для особо любознательных пользователей есть способ заполучить эти капсы для своего телефона путем модификации файла прошивки с последующей перепрошивкой, но это уже экстремальный спорт.
О том, какие капсы нужны той или иной функции – можно узнать из справки SDK по этой функции. Чтобы получить полный список функций, требующих капсы, – нужно ввести в поиске по справке условие "Functions listed by capability" – как есть, с кавычками.
В эмуляторе доступны все капсы.
Если нужно узнать, какие capability требуются программе, – в настройках эмулятора нужно включить PerformCapabilityCheck (меню Tools->Preferences) и выбрать нужные капсы:
|
Также на вкладке С++ Debug должен быть включен чекбокс Enable EPOCWINDOUT.LOG logging. После этого запускаем программу в эмуляторе. Внешне работа программы от этого не меняется, но все сообщения об использовании выбранных капсов попадают в файл EPOCWINDOUT.LOG, который лежит в папке Temp (как правило, на Windows XP это C:\Documents and Settings\<Имя пользователя> \Local Settings\Temp\EPOCWINDOUT.LOG). На время работы эмулятора файл открыт на запись, потому не любой текстовый редактор его откроет. Лучше всего просматривать такой файл во встроенном просмотрщике файлового менеджера Far – он позволяет открыть файл во время работы эмулятора и показывает его содержимое по мере записи сообщений в log.
Чтобы предоставить программе необходимые капсы, необходимо прописать их в файле MMP. Например:
CAPABILITY LocalServices ReadUserData WriteUserData NetworkServices
Имена капсов — как указано в таблице; пишутся через пробел. Другие примеры инструкции CAPABILITY можно увидеть в примерах SDK.
Далее программу нужно скомпилировать, собрать SIS-файл, как уже было показано ранее. Затем этот SIS-файл нужно подписать сертификатом, в зависимости от капсов.
Типы подписей:
|
Если программа использует только "белые" капсы из таблицы — пользуемся этим способом.
Вначале необходимо сгенерировать свой сертификат, для чего используется утилита makekeys из SDK. Она находится в Epoc32/Tools, достаточно набрать в командной строке makekeys, чтобы увидеть краткую справку.
Но чтобы создать сертификат, необходимо запустить программу с параметрами. Например:
makekeys -cert -password "1234" -len 2048 -dname "CN=Juriy Bakunin OU=Development OR=Organisation CO=GB EM=none@none.com" mykey.key mycert.cer
Параметр -cert означает, что мы делаем сертификат (для makekeys доступны и другие действия). -password "1234" — создаём сертификат с паролем 1234, пароль потом понадобится при подписи. В параметре -dname перечисляем сведения о себе (как и на примере, в кавычках). И, наконец, желаемые имена для будущего ключа и сертификата — в данном случае mykey.key mycert.cer .
После запуска будет предложено произвольно поводить мышью по экрану, что и делаем до тех пор, пока не появится надпись random data collected.
|
В результате в текущей папке получаем 2 файла — с расширением key и cer.
Эту операцию достаточно проделать один раз, а дальше при подписи программ пользоваться сгенерированными файлами. Сертификат содержит все "белые" капсы.
Теперь можно подписывать свои программы либо примеры из SDK.
Для подписи SIS-файла используется утилита signSIS , которая лежит там же, где и makekeys.
Чтобы получить SIS, подписанный нашим сертификатом, необходимо выполнить команду:
signSIS -s <Путь к неподписанному SIS> <Путь к подписанному SIS> <Путь к cer-файлу> <Путь к key-файлу> <Пароль>
Например:
signSIS -s MySis.SIS MySelfsignedSis.SIS C:\Symbian\cert\self\mycert.cer C:\Symbian\cert\self\mykey 1234
Выполнив эту команду, получим подписанный файл MySelfsignedSis.SIS.
Можно ставить на телефон.
Срок действия сертификата SelfSigned — 1 год. Спустя год программу всё равно можно установить, но для этого нужно перевести время в телефоне назад.
Если программа использует только "серые" капсы (ну или "белые"и "серые" сразу) потребуется подпись с помощью DevCert, по меньшей мере для тестирования.
Раньше была довольно простая схема. Разработчик имел возможность получить на сайте symbiansigned.com сертификаты для своих тестовых аппаратов и подписывать программы для тестовых нужд.
Сейчас ситуация изменилась. Получить DevCert на руки могут лишь владельцы Publisher ID. Те, кто такового не имеют, могут подписывать программу для тестирования на своем телефоне через онлайн-форму:
|
Как ясно из скриншота, нужно ввести свой IMEI, e-mail и путь к файлу для подписи, а также выбрать нужные серые капсы (не мудрствуя лукаво, нажимаем Select All). Чтобы узнать IMEI – наберите в телефоне сервисный код *#06# .
Далее вводим контрольные цифры и нажимаем Send.
Внимание! Введенный здесь e-mail должен совпадать с e-mail учетной записи, под которой вы получали UID к программе! Иначе будет выдана ошибка.Первым делом на e-mail придет письмо, предлагающее подтвердить отправку программы на онлайн-подпись, чтобы подтвердить – нужно перейти по указанной в письме ссылке.
После этого шага придет второе письмо, сообщающее, что программа ушла на подпись.
И наконец, может быть сразу, а может и полчаса спустя, придет третье письмо, содержащее ссылку для закачки программы. Закачиваем, устанавливаем и тестируем.
Почти уверен, что тут появится вопрос: а если мою программу будут тестировать еще несколько человек – мне что, целыми днями всей этой почтой заниматься?
Для этого предусмотрено иное решение. Вместо того, чтобы получать UID на сайте symbiansigned.com, вы придумываете его сами. Начинаться он должен с 0xE , иначе ничего не сработает (называется этот диапазон UID – диапазоном для разработчика, дословно из Faq – Development use only).
Программы с таким UID любой пользователь может самостоятельно подписать через онлайн-форму. Решение это вполне официальное, судя по тому, что его предлагают в тексте над онлайн формой.
Таким образом, появилось уже 2 типа бесплатного софта – тот, который нужно подписать (для пользователей, имеющих сертификат) и тот, который нужно подписывать через онлайн-форму.
Внимательный читатель в этом месте должен задать вопрос – но ведь UID собственного сочинения не уникален? Кто-то другой может придумать точно такой же UID?
В ответ красноречиво разведу руками. Централизовано такие UID'ы не выдаются. Гарантировать их уникальность может лишь теория вероятности. Посчитаем на калькуляторе:
0xEFFFFFFF-0xE0000000=0xFFFFFFF=268 435 455.
То есть всего возможно 268 435 455 уникальных UID'ов в нужном нам диапазоне. Вероятность того, что загаданное вами число встретится пусть даже среди нескольких тысяч программ – весьма невелика.
Согласно уверениям активных участников forum.nokia.com, нововведение Symbian Signed никак не усложнило жизнь разработчиков, не имеющих Publisher ID. Судя по всему, Publisher ID и возможность делать сертификаты эти самые активные участники имеют, иначе не стали бы никого в этом уверять. То, что раньше достигалось одной строчкой в сборочном BAT-файле – теперь достигается многоходовой процедурой, которая к тому же требует подключения к интернету.
Совет начинающему разработчику: если вы хотите написать программу для Series 60 и видите, что без серых капсов вам не обойтись – первым делом раздобудьте себе каким-то путем сертификат разработчика, а уж только потом приступайте к реализации своего замысла. По моему мнению, тестировать программу, пользуясь онлайн-подписью может только яростный фанат Series 60, для нормального человека это уж слишком большое издевательство.
Для владельцев Publisher ID все гораздо проще. Полученный от Trust Center сертификат нужно установить в браузер, после чего можно заходить на сайт symbiansigned.com под своей учетной записью и делать сертификаты.
Для получения key-файла, необходимого для подписи программы, можно экспортировать его из браузера, либо воспользоваться конвертером с сайта Symbian Signed. Дальше программы подписываются с помощью программы signSIS, как это было описано в предыдущих разделах.
DevCert, полученный с помощью Publisher ID, отличается от старых DevCert'ов и онлайн-подписи количеством предоставляемых капсов – для него доступны все желтые капсы из таблицы. Недоступными остаются только Phone manufacturer capabilities.
При подписи файлов ошибки, как правило, не бывает, зато можем получить SIS-файл, который при установке выдаёт ошибку.
Первая ошибка — для проекта мы взяли UID из unprotected range (он начинается с 0xA, как правило), но подписали его DevCert. Либо наоборот - UID из protected range (начинаются с цифры меньше 8), но подписали его сертификатом SelfSigned. Оба варианта дадут ошибку при установке. Убедитесь, что с этим всё правильно. В случае необходимости поменяйте UID.
Вторая ошибка — вначале подписываем программу своим DevCert, а затем подписываем уже подписанный файл другим DevCert, например знакомому. Так тоже делать нельзя. Подписывать можно только одним сертификатом. Из неподписанного файла можно удалить старую подпись с помощью той же утилиты signSIS.
Для этого необходимо ввести такую команду:
signSIS -u <Подписанный_Sis_файл> <неподписанная_копия>
Если предполагается коммерческое распространение программы - первым делом необходимо получить Publisher ID. Раньше их выдавала компания Verisign, получение ID стоило $350, потом выдачей занялась компанияTrustCenter, при этом стоимость понизилась до $200 в год. Publisher ID предоставляется только компаниям (юридическим лицам). Компания, выдающая Publisher ID, собирает реальную информацию о компании-получателе, так что будьте готовы к тому, что у вас запросят некоторые документы.
После получения ID необходимо убедиться, что программа отвечает критериям тестирования, документацию о критериях тестирования можно скачать на symbiansigned.com. В принципе, критерии справедливы, и им так или иначе должна отвечать любая программа. Например: не оставлять на дисках большие файлы при деинсталляции, устанавливать файлы только в выбранную пользователем память и прочее.
Если программа использует только белые и серые капсы из таблицы – для нее доступна программа Express Sign. Стоимость такой подписи – $20. На Express-подпись можно отправить программу со своей учетной записи на сайте. Отправлять следует ZIP-архив, содержащий: SIS-файл, подписанный с помошью сертификата под ваш Publisher ID, PKG-файл и описание программы (на английском, естественно). Понадобится также ответить на вопросы – какие из серых капсов использует программа и зачем.
Обратите внимание: такая функция, как автоматическая загрузка программы при включении телефона не требует никаких капсов. Это исключение из правил. Если программа использует автозагрузку - она не может быть подписана собственноручно через SelfSign, для нее необходимо использовать процедуры Express Sign или Cerified Sign. Кроме того, если программа использует только белые капсы, но вы хотите, чтобы при ее установке не появлялось предупреждение "Программа может поведить телефон" – тоже следует обратиться к Express Sign или Cerified Sign.
Если в Symbian решат, что программа не соответствует критериям тестирования – дело плохо. Следующие два обращения за подписью вы должны будете сделать через процедуру сертифицированной подписи и уж только после этого сможете воспользоваться Express Sign.
Процедура сертифицированной подписи (Certified Signed) необходима в том случае, если программа использует хоть один из желтых капсов , либо, как было сказано выше, вы не прошли проверку на соответствие критериев на Express Sign. В этом случае программа проходит так называемое независимое тестирование у сторонней сертифицированной компании. Оплачиваете это тестирование тоже вы. И расценки тут выше.
На момент написания статьи доступны 3 компании-тестера:
- MphasiS BFL Limited (доступен только e-mail Symbian.Signed собака MphaSIS.com) - 185 евро в первый раз и 160 при последующих обращениях;
- NSTL, Inc - 250 евро;
- Sogeti High Tech - 560 евро при первом обращении и 280 при повторных.
Для некоммерческих программ – путь иной. Убедитесь, что программа соответствует критериям тестирования. Добавьте при установке диалог с таким текстом:
"This application is freeware and may not be sold. If you believe you have paid for this application, please, e-mail symbiansigned собака symbian.com with details of where you obtained the product".
Переведите этот текст на все прочие языки, которые поддерживает программа. Например, в программе Screenshot от Antony Pranata русский текст такой:
"Эта программа БЕСПЛАТНА. Продажа запрещена. Если Вам ее продали или пытаются продать, пожалуйста, сообщите на symbiansigned собака antonypranata.com все подробности о данной продаже программы".
Далее нужно отправить программу на тестирование и подпись с помощью учетной записи на сайте. И ждать. Вдруг вам повезет. Например, Праната, судя по его блогу, не дождался подписи Screenshot, однако получил-таки подписанное приложение через другую влиятельную компанию.
Таким образом, среди типов бесплатного софта для Series 60 появляются еще два, оба они, не покривим душой, требуют наличия у разработчиков отличной кармы и большого запаса удачи:
- Программа, подписанная через Symbian Freeware
- Программа, которую разработчик ухитрился подписать любым другим невероятным способом
Информация на symbiansigned.com меняется довольно часто, поэтому перед подписью нужно обязательно проштудировать сайт. Сейчас на нем доступен документ под названием The Complete Guide To Symbian Signed, который содержит подробную информацию о подписи программ.
Отправлять для тестирования необходимо каждый релиз программы, будь то первая публичная версия или обновление, которое исправляет пару косметических багов, это касается также Express Signed и Certified Signed.
Советую обратить внимание на createSIS.bat из SDK в уже знакомой папке Epoc32/Tools. Батник этот связывает между собой утилиты makeSIS, signSIS и makekeys и позволяет создать и подписать SIS-файл одной-единственной командой. Предлагается запустить в командной строке createSIS.bat без параметров, что выдаст краткую справку, и разобраться самостоятельно.
Для подписывания программ с помощью DevCert появилось множество инструментов, которые, как правило, представляют собой просто графический интерфейс для командной строки. Но особенно интересна программа SignSIS из SDK - она позволяет подписывать приложения прямо на телефоне. Что весьма удобно: скачали приложения на смартфон, через GPRS или Wi-Fi, и тут же подписали.
Что будет, если в программе, например, сразу задать все "белые" капсы, даже те, которые заведомо не нужны? Обычно программисты так и делают:). Есть одно "но". Об используемых программой капсах пишется на одном из диалогов при установке. Особо внимательный юзер, которому эти диалоги ещё не успели намозолить глаза, может удивиться: "Я ставлю калькулятор, а написано, что программа может подключаться к интернету, к блютусу... Хм.. А вдруг это вирус под видом калькулятора?" И глядишь — не будет ставить. Забыть про такого юзера или угодить ему — решать программисту.