Очень рад представить уже доступный тулкит Windows Azure Toolkit for iOS!
Первый релиз Windows Azure Toolkit for iOS позволяет просто и удобно получить доступ к хранилищу Windows Azure из iOS приложений. Также как и для Windows Azure Toolkit for Windows Phone 7 мы будем добавлять новые возможности в тулкит, такие как пуш-оповещение, Access Control Service и т.д.
Вы можете скачать тулкит и весь исходный код на github:
Использовать тулкит можно двумя способами. Он может быть использован для прямого доступа к хранилищу Windows Azure, или, альтернативно, через прокси-сервис. Код прокси-сервиса тот же, который используется в Windows Azure Toolkit for Windows Phone 7, он устраняет необходимость хранения учетных записей Azure Storage локально на устройстве.
Этот релиз Windows Azure Toolkit for iOS — важный рубеж, он укрепляет моё мнение, что Windows Azure — это отличное место для работы сервисов для мобильных приложений.
Если нужно быстро поднять и запустить мобильный сервис на Windows Azure, обратите внимание на пакет Cloud Ready Package for Devices (который можно найти в загрузках https://github.com/microsoft-dpe/watoolkitios-lib)
Пакет Cloud Ready Package for Devices разработан для упрощения построения мобильных приложений, которые используют возможности сервисов запущенных в Windows Azure. Вместо необходимости открытия Visual Studio и компиляции решения с сервисами, которые вы хотите использовать, мы предоставляем вам предсобранные файлы Windows Azure CSPKG и CSCFG — всё, что необходимо сделать — обновить конфигурационный файл, добавив в него ваши учётные данные.
В этом видео можно увидеть, насколько просто развернуть пакет в Windows Azure, вне зависимости от вашей операционной системы (например, Windows 7 или OSX) и целевого устройства (например, Windows Phone 7, iOS или Android). Подробнее про Windows Azure Toolkit for Windows Phone 7 и Windows Azure Toolkit for iOS можно прочитать в блоге автора: Wade Wegner.
Можно скачать скомпилированную библиотеку работы с хранилищем с github (можно найти в загрузках https://github.com/microsoft-dpe/watoolkitios-lib). После разархивирования, будет несколько папок:
Если вы не знакомы с XCode, ниже, краткая инструкция, как создать и запустить ваш первый проект. Запустите XCode и создайте новый проект:
Выберите View-based application и кликните Next.
Укажите имя проекта и компанию. В этой пошаговой инструкции, мы назвём его “FirstAzureProject”. Unit Test не включайте.
Выберите папку, куда сохранять проект и снимите галочку с чекбокса source code repository.
Когда проект откроется, кликните правой кнопкой по Frameworks и выберите Add Files to…
Найдите библиотеку libwatoolkitios.a в папке скачанного пакета (для эмулятора или устройства), и добавьте его в папку Frameworks.
Теперь, кликните на самый верхний проект (FirstAzureProject) в левой колонке. Кликните на targets. Кликните на заголовок Build Settings в третьей колонке. Проверьте, что выбрано All, чтобы отображались все настройки.
В поле поиска введите header search и найдите настройку Header Search Paths:
Выполните двойной клик по строке (по правой части) и кликните по кнопке + слева внизу.
Добавьте путь к папке, которая содержит заголовочные файлв (одна из папок, которая создаётся при распаковке скачанного архива). Например, "~/Desktop/v1.0.0/include", если архив был разархивирован на рабочий стол. Не забудье заключить путь в кавычки, если он содержит пробелы.
Теперь, кликните на закладке Build Phases и разверните секцию Link Binary with Libraries:
Кликните по кнопке + слева внизу и пролистайте список вниз, пока не найдете библиотеку libxml2.2.7.3.dylib. Добавьте эту библиотеку в проект.
Теперь, когда добавлены все необходимые ссылки, давайте протестируем, что функции библиотеки можно вызывать. Для этого, откройте двойным щелчком файл [ProjectName]AppDelegate.m (например, FirstAzureProjectAppDelegate.m) и добавьте импорт следующих заголовочных файлов в класс:
Выполните сборку. Если сборка завершится успешно, значит библиотека корректно добавлена в проект. Если будет сбой, рекомендуется вернуться назад и проверить настройку для поиска заголовочных файлов (header search paths).
Предполагая, что всё собралось, в .m файл, добавьте следующие декларации после строк synthesize:
Теперь, добавьте следующий код после строки [self.window makeKeyAndVisible] в метод didFinishLaunchingWithOptions:
Проверьте, что вы заменили ACCOUNT_NAME и ACCOUNT_KEY вашими именем и ключом доступа к Windows Azure Storage, которые можно взять на вашем портале управления Windows Azure (http://windows.azure.com).
Соберите и запустите проект. Вы должны увидеть в отладочном окне нечто похожее на текст, приведенный ниже:
Тут указано, что аккаунт содержит 2 контейнера. Это конечно зависит от того, сколько BLOB контейнеров вы создали в вашем Windows Axure аккаунте.
Изучите документацию класса, чтобы узнать больше об API, предоставляемом тулкитом. Ниже приведено несколько дополнительных примеров.
В класс [ProjectName]AppDelegate.m добавьте следующие заголовочные файлы:
В методе didFinishLaunchingWithOptions, после строки [self.window makeKeyAndVisible] попробуйте несколько из следующих команд. Опять же, при запуске проекта результат отобразится в окне отладчика.
Аутентификация с использованием имени аккаунта и ключа:
Аутенификация с использованием прокси-сервиса из Windows Azure Toolkit for Windows Phone 7:
Замените PROXY_URL, USERNAME и PASSWORD данными необходимыми для доступа к вашему прокси-сервису.
Создание нового клиента для доступа к хранилищу:
Получение списка BLOB-контейнеров (не поддерживается через прокси-сервер):
Получение всех BLOB-ов контейнера (также не поддерживается через прокси):
Получить все таблицы из хранилища (работает и через прокси, и напрямую):
Создать таблицу (работает и через прокси, и напрямую):
Удалить таблицу (работает и через прокси, и напрямую):
Получить записи из таблицы (работает и через прокси, и напрямую):
Получить записи из таблицы с использованием предикатов (работает и через прокси, и напрямую):
Если вам интересно, что ещё можно сделать, используя тулкит, я рекомендую посмотреть на пример приложения — проект watoolkitios-samples. Проект демонстрирует все возможности тулкика, включая создание, загрузку и получение записей из хранилища таблиц и BLOB-ов.
Первый релиз Windows Azure Toolkit for iOS позволяет просто и удобно получить доступ к хранилищу Windows Azure из iOS приложений. Также как и для Windows Azure Toolkit for Windows Phone 7 мы будем добавлять новые возможности в тулкит, такие как пуш-оповещение, Access Control Service и т.д.
Вы можете скачать тулкит и весь исходный код на github:
- Исходный код: https://github.com/microsoft-dpe/watoolkitios-lib
- Пример приложения: https://github.com/microsoft-dpe/watoolkitios-samples
- Документация: https://github.com/microsoft-dpe/watoolkitios-doc
Использовать тулкит можно двумя способами. Он может быть использован для прямого доступа к хранилищу Windows Azure, или, альтернативно, через прокси-сервис. Код прокси-сервиса тот же, который используется в Windows Azure Toolkit for Windows Phone 7, он устраняет необходимость хранения учетных записей Azure Storage локально на устройстве.
Этот релиз Windows Azure Toolkit for iOS — важный рубеж, он укрепляет моё мнение, что Windows Azure — это отличное место для работы сервисов для мобильных приложений.
Развертывание сервисов Windows Azure
Если нужно быстро поднять и запустить мобильный сервис на Windows Azure, обратите внимание на пакет Cloud Ready Package for Devices (который можно найти в загрузках https://github.com/microsoft-dpe/watoolkitios-lib)
Пакет Cloud Ready Package for Devices разработан для упрощения построения мобильных приложений, которые используют возможности сервисов запущенных в Windows Azure. Вместо необходимости открытия Visual Studio и компиляции решения с сервисами, которые вы хотите использовать, мы предоставляем вам предсобранные файлы Windows Azure CSPKG и CSCFG — всё, что необходимо сделать — обновить конфигурационный файл, добавив в него ваши учётные данные.
В этом видео можно увидеть, насколько просто развернуть пакет в Windows Azure, вне зависимости от вашей операционной системы (например, Windows 7 или OSX) и целевого устройства (например, Windows Phone 7, iOS или Android). Подробнее про Windows Azure Toolkit for Windows Phone 7 и Windows Azure Toolkit for iOS можно прочитать в блоге автора: Wade Wegner.
Распаковка v1.0.0 zip файла библиотеки
Можно скачать скомпилированную библиотеку работы с хранилищем с github (можно найти в загрузках https://github.com/microsoft-dpe/watoolkitios-lib). После разархивирования, будет несколько папок:
- /4.3-device — бинарная библиотека для iOS 4.3 (устройство)
- /4.3-simulator — бинарная библиотека для iOS 4.3 (эмулятор)
- /include — заголовочные файлы для библиотеки
Создание своего первого проекта с использованием тулкита
Если вы не знакомы с XCode, ниже, краткая инструкция, как создать и запустить ваш первый проект. Запустите XCode и создайте новый проект:
Выберите View-based application и кликните Next.
Укажите имя проекта и компанию. В этой пошаговой инструкции, мы назвём его “FirstAzureProject”. Unit Test не включайте.
Выберите папку, куда сохранять проект и снимите галочку с чекбокса source code repository.
Когда проект откроется, кликните правой кнопкой по Frameworks и выберите Add Files to…
Найдите библиотеку libwatoolkitios.a в папке скачанного пакета (для эмулятора или устройства), и добавьте его в папку Frameworks.
Теперь, кликните на самый верхний проект (FirstAzureProject) в левой колонке. Кликните на targets. Кликните на заголовок Build Settings в третьей колонке. Проверьте, что выбрано All, чтобы отображались все настройки.
В поле поиска введите header search и найдите настройку Header Search Paths:
Выполните двойной клик по строке (по правой части) и кликните по кнопке + слева внизу.
Добавьте путь к папке, которая содержит заголовочные файлв (одна из папок, которая создаётся при распаковке скачанного архива). Например, "~/Desktop/v1.0.0/include", если архив был разархивирован на рабочий стол. Не забудье заключить путь в кавычки, если он содержит пробелы.
Теперь, кликните на закладке Build Phases и разверните секцию Link Binary with Libraries:
Кликните по кнопке + слева внизу и пролистайте список вниз, пока не найдете библиотеку libxml2.2.7.3.dylib. Добавьте эту библиотеку в проект.
Проверим, что всё работает
Теперь, когда добавлены все необходимые ссылки, давайте протестируем, что функции библиотеки можно вызывать. Для этого, откройте двойным щелчком файл [ProjectName]AppDelegate.m (например, FirstAzureProjectAppDelegate.m) и добавьте импорт следующих заголовочных файлов в класс:
#import "AuthenticationCredential.h"
#import "CloudStorageClient.h"
Выполните сборку. Если сборка завершится успешно, значит библиотека корректно добавлена в проект. Если будет сбой, рекомендуется вернуться назад и проверить настройку для поиска заголовочных файлов (header search paths).
Предполагая, что всё собралось, в .m файл, добавьте следующие декларации после строк synthesize:
AuthenticationCredential *credential;
CloudStorageClient *client;
Теперь, добавьте следующий код после строки [self.window makeKeyAndVisible] в метод didFinishLaunchingWithOptions:
credential = [AuthenticationCredential credentialWithAzureServiceAccount:@"ACCOUNT_NAME" accessKey:@"ACCOUNT_KEY"];
client = [CloudStorageClient storageClientWithCredential:credential];
[client getBlobContainersWithBlock:^(NSArray* containers, NSError* error)
{
if (error)
{
NSLog(@"%@",[error localizedDescription]);
}
else
{
NSLog(@"%i containers were found…",[containers count]);
}
}];
Проверьте, что вы заменили ACCOUNT_NAME и ACCOUNT_KEY вашими именем и ключом доступа к Windows Azure Storage, которые можно взять на вашем портале управления Windows Azure (http://windows.azure.com).
Соберите и запустите проект. Вы должны увидеть в отладочном окне нечто похожее на текст, приведенный ниже:
2011-05-06 18:18:46.001 FirstAzureProject[27456:207] 2 containers were found…
Тут указано, что аккаунт содержит 2 контейнера. Это конечно зависит от того, сколько BLOB контейнеров вы создали в вашем Windows Axure аккаунте.
Что еще можно сделать, используя тулкит
Изучите документацию класса, чтобы узнать больше об API, предоставляемом тулкитом. Ниже приведено несколько дополнительных примеров.
В класс [ProjectName]AppDelegate.m добавьте следующие заголовочные файлы:
#import "AuthenticationCredential.h"
#import "CloudStorageClient.h"
#import "BlobContainer.h"
#import "Blob.h"
#import "TableEntity.h"
#import "TableFetchRequest.h"
В методе didFinishLaunchingWithOptions, после строки [self.window makeKeyAndVisible] попробуйте несколько из следующих команд. Опять же, при запуске проекта результат отобразится в окне отладчика.
Аутентификация с использованием имени аккаунта и ключа:
credential = [AuthenticationCredential credentialWithAzureServiceAccount:@"ACCOUNT_NAME" accessKey:@"ACCOUNT_KEY"];
Аутенификация с использованием прокси-сервиса из Windows Azure Toolkit for Windows Phone 7:
credential = [AuthenticationCredential authenticateCredentialWithProxyURL:[NSURL URLWithString:@"PROXY_URL"] user:@"USERNAME" password:@"PASSWORD" withBlock:^(NSError *error)
{
if (error)
{
NSLog(@"%@",[error localizedDescription]);
}
else
{
NSLog(@"Successfully logged in");
}
}];
Замените PROXY_URL, USERNAME и PASSWORD данными необходимыми для доступа к вашему прокси-сервису.
Создание нового клиента для доступа к хранилищу:
client = [CloudStorageClient storageClientWithCredential:credential];
Получение списка BLOB-контейнеров (не поддерживается через прокси-сервер):
// get all blob containers
[client getBlobContainersWithBlock:^(NSArray *containers, NSError *error)
{
if (error)
{
NSLog(@"%@",[error localizedDescription]);
}
else
{
NSLog(@"%i containers were found…",[containers count]);
}
}];
Получение всех BLOB-ов контейнера (также не поддерживается через прокси):
// get all blobs within a container
[client getBlobs:@"images" withBlock:^(NSArray *blobs, NSError *error)
{
if (error)
{
NSLog(@"%@",[error localizedDescription]);
}
else
{
NSLog(@"%i blobs were found in the images container…",[blobs count]);
}
}];
Получить все таблицы из хранилища (работает и через прокси, и напрямую):
// get all tables
[client getTablesWithBlock:^(NSArray* tables, NSError* error)
{
if (error)
{
NSLog(@"%@",[error localizedDescription]);
}
else
{
NSLog(@"%i tables found",[tables count]);
}
}];
Создать таблицу (работает и через прокси, и напрямую):
// create table
[client createTableNamed:@"wadestable" withBlock:^(NSError *error)
{
if (error)
{
NSLog(@"%@",[error localizedDescription]);
}
else
{
NSLog(@"Table created");
}
}];
Удалить таблицу (работает и через прокси, и напрямую):
//delete a table
[client deleteTableNamed:@"wadestable" withBlock:^(NSError *error)
{
if (error)
{
NSLog(@"%@",[error localizedDescription]);
}
else
{
NSLog(@"Table was deleted");
}
}];
Получить записи из таблицы (работает и через прокси, и напрямую):
// get entities for table developers
TableFetchRequest* fetchRequest = [TableFetchRequest fetchRequestForTable:@"Developers"];
[client getEntities:fetchRequest withBlock:^(NSArray *entities, NSError *error)
{
if (error)
{
NSLog(@"%@",[error localizedDescription]);
}
else
{
NSLog(@"%i entities found in the developer table",[entities count]);
}
}];
Получить записи из таблицы с использованием предикатов (работает и через прокси, и напрямую):
// get entities for table developers with predicate request
NSError* error = nil;
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"Name = 'Wade' || Name = 'Vittorio' || Name = 'Nathan'"];
TableFetchRequest* anotherFetchRequest = [TableFetchRequest fetchRequestForTable:@"Developers" predicate:predicate error:&error];
[client getEntities:anotherFetchRequest withBlock:^(NSArray *entities, NSError *error)
{
if (error)
{
NSLog(@"%@",[error localizedDescription]);
}
else
{
NSLog(@"%i entities returned by this request",[entities count]);
}
}];
А что ещё можно сделать?
Если вам интересно, что ещё можно сделать, используя тулкит, я рекомендую посмотреть на пример приложения — проект watoolkitios-samples. Проект демонстрирует все возможности тулкика, включая создание, загрузку и получение записей из хранилища таблиц и BLOB-ов.