Microsoft — мировой лидер в области ПО и ИТ-услуг
499,19
рейтинг
10 мая 2011 в 13:18

Разработка → Начинаем работу с Windows Azure Toolkit for iOS перевод

Очень рад представить уже доступный тулкит Windows Azure Toolkit for iOS!

Первый релиз Windows Azure Toolkit for iOS позволяет просто и удобно получить доступ к хранилищу Windows Azure из iOS приложений. Также как и для Windows Azure Toolkit for Windows Phone 7 мы будем добавлять новые возможности в тулкит, такие как пуш-оповещение, Access Control Service и т.д.

iOS iOS iOS


Вы можете скачать тулкит и весь исходный код на github:

Использовать тулкит можно двумя способами. Он может быть использован для прямого доступа к хранилищу 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 и создайте новый проект:

XCode

Выберите View-based application и кликните Next.

Укажите имя проекта и компанию. В этой пошаговой инструкции, мы назвём его “FirstAzureProject”. Unit Test не включайте.

New Project

Выберите папку, куда сохранять проект и снимите галочку с чекбокса source code repository.

Когда проект откроется, кликните правой кнопкой по Frameworks и выберите Add Files to…

Frameworks

Найдите библиотеку libwatoolkitios.a в папке скачанного пакета (для эмулятора или устройства), и добавьте его в папку Frameworks.

libwatoolkitios.a

Теперь, кликните на самый верхний проект (FirstAzureProject) в левой колонке. Кликните на targets. Кликните на заголовок Build Settings в третьей колонке. Проверьте, что выбрано All, чтобы отображались все настройки.

В поле поиска введите header search и найдите настройку Header Search Paths:

header search

Выполните двойной клик по строке (по правой части) и кликните по кнопке + слева внизу.

add header

Добавьте путь к папке, которая содержит заголовочные файлв (одна из папок, которая создаётся при распаковке скачанного архива). Например, "~/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-ов.
Автор: @stasus Wade Wegner
Microsoft
рейтинг 499,19
Microsoft — мировой лидер в области ПО и ИТ-услуг

Комментарии (6)

  • +6
    Кто там в теме со Skype кричал что MS плевать на альтернативные ОС?
    • +3
      Я не кричал, но отвечу.
      Таких крупных игроков, как iPhone и Android, глупо не замечать.
      Им необходимо для коммерческого успеха замечать альтернативные, популярные ОС.
      К которым линукс пока не относится.
      • 0
        desktop linux не относится. По сути MeeGO если будет вырываться вперед то шансов много.
  • +2
    Меня прикололо что выложили на ГитХабе. Причем выложили более или мение правильно, например добавили README в маркдауне.
    • 0
      на гитхабе сложно не добавить README, ибо его отсутвие выражено ярким блоком с просьбой его добавить
  • +7
    Под iOS в OpenSource да еще и на GitHub?!!! Офигеть)

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое Разработка