Собственный формат данных для iPhone - PullRequest
0 голосов
/ 17 марта 2010

Я хотел бы создать свой собственный формат данных для приложения для iPhone. Файлы должны быть аналогично структурированы, как, например, Файлы Apple iWork (.pages). Это означает, что у меня есть папка с некоторыми файлами:

The file 'Juicy.fruit' contains:
   Fruits
   ---> Apple.xml
   ---> Banana.xml
   ---> Pear.xml
   ---> PreviewPicture.png

Эта папка «Фрукты» должна быть упакована в удобный файл «Juicy.fruit». Сжатие не требуется. Как я мог этого добиться? Я обнаружил некоторые ZIP-библиотеки с открытым исходным кодом. Однако я хотел бы создать свой собственный формат данных со встроенными библиотеками iPhone (если это возможно).

С уважением, Stefan

1 Ответ

3 голосов
/ 17 марта 2010

Хорошо, я читаю ваш вопрос тремя способами, вот мое лучшее предположение по каждому из них:

  1. Вы хотите, чтобы ваши .fruit файлы были связаны с вашим приложением через Safari / SMS / через какое-то сетевое соединение (иначе, когда кто-то хочет загрузить файлы, созданные для вашего приложения или созданные вашим приложением).

В этом случае вы можете зарегистрировать протокол для своего приложения, как описано здесь:

Ассоциация приложений для расширения файлов iPhone

  1. Вы хотите, чтобы iPhone глобально связывал файлы .fruit с вашим приложением, и в этом случае вы хотите просмотреть Унифицированные идентификаторы типов . По сути, вы устанавливаете эту связь в файле info.plst вашего установщика.

  2. Вы хотите знать, как можно перейти от папки с файлами в ней к одной папке (пакету) с расширением .fruit.

Если это так, есть много вариантов, и я не вижу цели в том, чтобы катиться самостоятельно. И Microsoft, и Adobe просто используют стандартный метод сжатия zip и используют свое собственное расширение (вместо .zip). Если вы уроните любой документ Office 2007, например, docx или экспериментальный файл Adobe .pdfxml, в утилиту архивирования (мне нравится 7z, но подойдет любой спуск), вы получите папку с несколькими файлами XML, как и вы. Опиши для своей ситуации. (Это также, как работает тип файла jar Java, к вашему сведению). Так что, если у вас нет веских причин избегать стандартных методов сжатия (я голосую за gzip), я бы следовал примеру отрасли в этом.

Я могу определенно оценить стремление сделать DIY на каждом возможном уровне, но вы в основном спрашиваете (если это # ​​3), как вы можете создать свой собственный алгоритм упаковки, и после прочтения, как работают некоторые из самых основных методов сжатия. Я бы оставил это в покое. Кроме того, я действительно сомневаюсь, что Apple встроила библиотеки для того, что делает большинство людей, для которых просто используются стандартные методы.

Последнее примечание:

Если вы действительно пытаетесь сделать это с нуля (все еще не предлагаете), поскольку все ваши файлы являются XML, вы можете просто создать новый XML-файл, который будет действовать как своего рода обертка, и каждый файл будет добавлен в этот файл. файл обертки. Но это будет действительно излишним, когда придет время развернуть, так как каждый раз придется загружать весь файл. Но это было бы что-то вроде:

Juicy.fruit --
   <fruit-wrapper>
       <fruit>
          <apple>
              ... content from apple.xml
          </apple>
       </fruit>
       <fruit>
          <banana>
              ... content from banana.xml
          </banana>
       </fruit>
       <fruit>
          <pear>
              ... content from pear.xml
          </pear>
       </fruit>
       <picture>
              ...URL-encoded binary of preview picture
       </picture>
   </fruit-wrapper>     

Но с этой идеей вам нужно либо распаковать его, и тем самым рискнуть потерять дорожку файлов, перезаписать некоторые, но не все, и т. Д. И т. Д., Или вы всегда рассматриваете это как один большой файл, в этом случае, в отличие от с архивами вы должны загружать все данные каждый раз, чтобы извлечь что-либо, вместо того, чтобы просто извлекать нужный файл из архива.

Но это может сработать, если вы настроены.

Также, если вам интересно, существует протокол передачи, предназначенный специально для XML через мобильные устройства, который называется WBXML (Wap Binary XML). Не уверен, что он все еще воспринимается всерьез, но если для этого есть библиотека для iPhone, вам следует изучить ее.

...