Наверное, вам WWDC’13 уже все уши прожужжали, но потерпите ещё немного. Теперь моя очередь. Два нововведения, которые представили на вступительном мероприятии конференции для разработчиков, практически не были освещены. Вернее, одному из них, iWork for iCloud уделили немного внимания, а iCloud Keychain обошли стороной.
Вкратце, напомню, что iWork for iCloud — это, фактически, офисный пакет, сродни Google Docs, доступ к которому можно будет получить не только с iPhone, iPad, iPod Touch или Mac, но и из браузера. iWork for iCloud поддерживается Safari, Internet Explorer и Google Ghrome.
Как я понимаю, если у вас есть установленные на выше указанных устройствах Pages, Numbers и Keynote, то вы работаете с ними, а если нет, вам достаточно добраться до любого компьютера, войти в iCloud со своим Apple ID и можно продолжать работу. Практично. Я сам пользуюсь iWork, поэтому концепция офисного пакета в облаках мне кажется крайне удобной.
Второе нововведение — это iCloud Keychain. Небольшое лирическое отступление. Если кто-то из вас помнит, во время существования MobileMe была возможность синхронизировать связку ключей с вашими паролями, сертификатами и персональными данными через этот сервис. После того, как появился iCloud, эту лавочку без лишнего шума и пыли прикрыли.
Спустя два года такую возможность вернули в лице iCloud Keychain. Помимо логинов, паролей и сертификатов можно ещё хранить данные платёжных карт. Синхронизация работает не только между компьютерами, но и между iOS устройствами. Функциональность встроенная и совершенно бесплатная. Думаю, что на WWDC’13 парни из AgileBits нервно затопали ножкой.
Но речь не об этом. В данный момент я бы хотел поговорить об iCloud. Это именно то, что связывает OS X и iOS, фактически краеугольный камень в экосистеме Apple. iCloud позволяет хранить и синхронизировать пользовательские данные между устройствами. И это очень удобно.
Например, вы пользуетесь приложением для учёта финансов, которое имеет версии для iPad, iPhone и Mac. Купили что-то, внесли запись об этом в приложение на iPhone и все. По возвращении домой открыли программу на Mac и все внесённые на телефоне данные уже тут как тут. Здорово, ведь правда?
Но, к сожалению, пока это утопия. Я могу поделиться своей печальной историей использования приложения Money от копании Jumsoft. Пользовался программой на протяжении двух лет. У них всегда были какие-то проблемы с синхронизацией пользовательских данных. Но почти всегда мне из-за предосторожностей и каких-то костылей удавалось избежать полной потери своих данных.
Но когда парни из Jumsoft решили внедрить в свою программу поддержку iCloud начался какой-то кошмар. Каждая синхронизация (автоматическая) привносила какие-то новые записи или удаляла их за текущий день. Одним словом, через неделю моё терпение кончилось я и решил, что с меня довольно.
Сначала я думал, что причиной всей это феерии являются криворукие разработчики Jumsoft, но покопавшись глубже в теме я обнаружил нечто интересное. Оказывается, проблема не только в разработчиках Jumsoft. Корень всех зол в самом iCloud.
Дело в том, что подавляющее большинство приложений под iOS и OS X хранят свои данные ввиде SQLite базах данных. Эти базы данных синхронизируются через iCloud посредством механизма Core Data. И вот в нем-то и проблема. В упрощённом виде она показана на видео ниже.
Разработчики Jumsoft не единственные, кто стал жертвой проблем с синхронизацией. Майкл Гёбель (Michael Göbel) написал в своём блоге о том, что он потратил кучу времени на протяжении двух лет для того, чтобы заставить свои приложения работать. Стив Стреза (Steve Streza) в своём блоге рассказал о превратностях работы с iCloud.
Более удачливыми оказались разработчики приложений Clear и Day One. Они просто отказались от поддержки Core Data и реализовали синхронизацию в iCloud на основе отдельных файлов-документов. Этот метод работает стабильно и безотказно. Apple же молчит и не подаёт никаких признаков того, что она предпринимает какие-то шаги в отношении решения более чем очевидной проблемы.
Так вот, в свете WWDC’13 и презентации iCloud Keychain у меня назревает вопрос: решена ли проблема с Core Data? Ведь, по сути своей, файл Keychain представляет собой SQLite базу данных с зашифрованными данными пользователя. А если так, то синхронизироваться она должна при помощи тех же механизмов, с которыми не удалось совладать опытным cocoa-разработчикам. Посмотрим, получится ли это у Apple.