iOS, iPhone, iPad, iPod > ZIP и Nimblekit - дрессировка.

Рейтинг:   / 4
ПлохоОтлично 

Проблема состоит в том, что мой первый проект для iPad2, с одной стороны - довольно простой и не требует больших временных инвестиций в изучение Objective-C, а с другой имеет пару таких моментов как:

- получаемые мною с сервера данные, хоть и являются XML-файлами, но при этом они упакованы в ZIP (смарт клиенты у нас не только на iPad2 написаны и потому этого поменять нельзя)

- должна быть возможность дать клиенту (человеку) поставить свою подпись стилусом на экране iPad2 (как выяснилось, задача для других планшетников тривиальная, тут далеко не тривиальна, ну, или я на сегодня ещё глубоко в неё не погрузился)

Ну да мы помаленьку...

Начнём с решения вопрса получения файла с сайта.

Для начала дам ссылочку на NimbleKit.

О ней подробнее может сподвигнусь написать позже. Пробовал ещё пару подобных. Не понраваилось. NimbleKit - платная, стоит... сколько уточните сами (зависит от страны smiley).

Но идея использовать для тупого заполнения троечки форм связку HTML5/CSS3 + Jabascript/jQuery/jQueryMobile (при чём последие два можно вообще опустить, уж последнее - точно) меня сразу и очень устроила.

Интерфейс всего этого дела нарисовать стоит пары часов.

Нужно научиться только забирать файлы с сервера (при этом авторизироваться конечно не мешало бы дать пользователю), распаковывать его, доставать оттуда XML и, в идеале, натравить бы на него XSLT (blush мечты, мечты... хотя надо порыть в этом направлении...). Пока что так: разбираем это всё и рисуем морду лица приложению, в одной только ориентации, при чём.

Пользователь должен сделать несколько фоток, и вот мы их и, уже нами сгенерированный наново XML, зипуем и отсылаем назад на срвер. Желательно с росписью клиента, которого огулял пользователь софтины.

Вот, собственно и решаю вопросы по мере их поступления.

 


Пока я ещё не приступил к углубленному ломанию своей головы, выкладу ка ссылки, на умные статьи, которые вполне возможно и приведут к поступательному решению моих задач. Собственно, этап сбора информации и погружения в неё подходит к своей логической развязке. Я написал, определённое количество FAQ и разных благостей, перелопачивая свой мозг и просторы интернета. Пока, что ещё время начинать разбрасывать камни, вот и кинем парочку smiley

ZIP + Objective-C (Obj-C) >>> http://code.google.com/p/ziparchive/

ZipArchive is an Objective-C class to compress or uncompress zip files, which is base on open source code "MiniZip".

It can be used for iPhone application development, and cocoa on Mac OSX as well.

Как работать с XML (я так понимаю, что мечта XSLT у меня так и останется несбыточной, скорее всего мешает моя Microsoft-ориентация). Ну по сути..
Про XML в рамках JavaScript не плохо написано тут  >>> форум NimbleKit. Там есть примеры кода, копипастить пока смысла нету, вот когда будет своё, вот и оттраслируем в веб wink


iPhone SDK - Zlib включено в это SDK?

Вот тут я нашёл немного объяснений Apple на эту тему

Собственно весь сыр-бор из-за того, что iPhone SDK имеет libz.1.2.3.dylib, но как её заюзать - не ясно.

Ответ - да, просто надо уметь её готовить. Как - на сл. странице


Сначала немного о libz.1.2.3.dylib.

Вообще-то я не *nix программист и мне все эти штучки-дрючки с их лабами не знакомы. Поковыряв интернет я так и не нашёл привычного моему мелокософтовскому мозгу описания библиотеки. Но выяснил самое главное: если хочешь, чтобы у тебя заработала фича работы с ZIP-архивами: добавь эту библиотеку в проект!!!

Как это делать:

  • открываем проект в XCode
  • двойным щелчком вызываем в новом окне настройки проекта (компиляция, описания, библиотеки и тд.), можно одним кликом поиметь их справа, но, если вы это делаете в VirtualBox и у вас разрешение экрана 1024 х 786, то... маловато будет короче.
  • теперь выбираем закладку Build Phases
  • открываем раздел Link Binary With Libraries
  • нажимаем "+"

у меня временные трудности с загрузкой картинок на сервер, поэтому даю найденную мною скринку, совершенно не знакомого мне человека, к моему проекту отношения ни какого не имеющего.

  • находим dylib (в выпавшем окне, в строке поиска, введите dy и мотайте на последнюю строку в найденных)
  • добавляем libz.dylib.

 

Поиск сопуствующих материалов

Теперь о моих поисках примеров работы со стилусом. Поскольку я - полный профан пока что в iOS, да и остальных Mac OS, то приходится самообучаться ускоренным методом втукания в чужие коды.
Не сказал бы, что это совсем уж хороший метод, но пока, что мануалы и он мне помогли. А ещё мне очень помогает stackoverflow  >>> How to draw image like free hand tool on pdf file page in objective c?

Немного о рисовальной тематике в прицепку:
  -- http://7knowledge.com/en/
  -- http://techcrunch.com/2011/08/23/7notes-ipad-iphone/

Ну и одна из моих глупых ошибок, которую не стоит повторять: искать надо не "ipad handwritting to image", а "ipad hand drawing to image". Результаты разительны.


Собственно поиски в отношении XSLT я не закончил, вот на заметку самому себе пока оставляю  >>> XLST in a UIWebView using iOS SDK 4.2
Думать, пробовать и решать буду уже завтра...

Пример софтины для iPad2, которая показывает как это - поженить XML на XSLT  >>> XSLT by Celltica (оно же на AppStore)

Вот ещё немного про XSLT на cacoa  >>> cocoa touch - Version of XSLT in iPhone
В связи с этим ссылка на библиотеку  >>> libxslt - поддерживает (у зараза...) только xslt 1.0 и некоторые из расширений exslt. Правда я не притязательный, мне и XSLT 1.0 для моих элементарных задачь сойдёт!
Пока, я ещё не ушёл от темы, оставлю примерчик на C  >>> libxslt Tutorial

Да.. привыкли руки к топору, тьфу ты.. т.е. к C# и .Net. Вот о LINQ почему-то взгрустнулось... crying


На вопрос возможности раззипования файлов в рамках Kit NimbleKit ответ на форуме есть.


Как быть?

дело в том, что XML, это такое затратное дело, что мне как-то не хочется связываться со всеми эти болшими библиотеками, учитывая, что размеры ОЗУ, у нас ну ни как не соизмеримы с таковыми у personal PC, т.е. у песоналок.

Вот и озаботился я вопросом: как и рыбку съесть и на ёлочку залесть, а точнее

  • как минимизировать разработку?
  • как избежать разбора XML средствами JavaScript?
  • как автоматизировать процесс получения данных, сериализованных в XML, в JavaScript?

Решение, в принципе, представленное на сайте Штефана Гёсснера мне подходит. Осталось его испробовать в бою (найти бы время на все эти пробы).

Что нам предложено? Надо скачать вот это:

json2xml.js 1k
xml2json.js 6k
xmljson_test.html 3k

Использование:

function xml2json( xml,   // element or document DOM node
                   tab)   // tab or indent string for pretty output formatting
                          // omit or use empty string "" to supress.
                          // returns JSON string

function json2xml( obj// javascript object
                   tab// tab or indent string for pretty output formatting
                         // omit or use empty string "" to supress.
                         // returns XML string

Xmljson_test.html тестовое приложение, которое использует XML-строки, которые должны быть пропарсены в первую очередь.

function parseXml(xml) {
   var dom = null;
   if (window.DOMParser) {
      try {
         dom = (new DOMParser()).parseFromString(xml, "text/xml");
      }
      catch (e) { dom = null; }
   }
   else if (window.ActiveXObject) {
      try {
         dom = new ActiveXObject('Microsoft.XMLDOM');
         dom.async = false;
         if (!dom.loadXML(xml)) // parse error ..

            window.alert(dom.parseError.reason + dom.parseError.srcText);
      }
      catch (e) { dom = null; }
   }
   else
      alert("cannot parse xml string!");
   return dom;
}


.plist  - что это такое и как его использовать.

Вообще PLIST это - обычный XML. Если сравнивать с .Net-ом, то это типа app.config такого. Как я понимаю, физического ограничения по размеру файла .plist не имеет. Читать / писать в него просто. Формат, правда довольно кхм.. короче не привычно как-то это, типа, получив node ключа система делат что-то типа nextsibling и там оказывается значение этого ключа (в следующем узле). Не знаю как реализовано чтение, парсит iOS это дело или тупа читает построчно "транслируя" файл. Не суть важно сейчас. Важно, что можно не заморачиваясь основные настройки и временные данные сохранять без бубна и SQLite в файло настроек.

Сопутсвующие  материалы по вопросу:

 


Раскинув мозгами, решил всё таки внести добавления в серверную часть. Ломает меня тянуть всю эту бороду библиотек на мобильное устройство с ограниченым количеством памяти. Проще, используя минимум (родные либы iOS и NimbleKit) и то, что даёт нам знание JavaScript (а он в априоре у нас вместе с NimbleKit) попадает в наше распоряжение всё сделать. NimbleKit и так... весит, знаете ли.

статья будет дописываться до победы над проблемами ZIP и так далее.