Текст книги "iOS. Приемы программирования"
Автор книги: Вандад Нахавандипур
Жанр: Зарубежная компьютерная литература, Зарубежная литература
сообщить о неприемлемом содержимом
Текущая страница: 1 (всего у книги 59 страниц)
Вандад Нахавандипур
iOS. Приемы программирования
Научный редактор О. Сивченко
Переводчик О. Сивченко
Технический редактор Н. Рощина
Литературные редакторы Н. Гринчик, Н. Рощина
Художники Л. Адуевская, Н. Гринчик
Корректор Е. Павлович
Верстка А. Барцевич
© ООО Издательство «Питер», 2014
Все права защищены. Никакая часть электронной версии этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами, включая размещение в сети Интернет и в корпоративных сетях, для частного и публичного использования без письменного разрешения владельца авторских прав.
* * *
Предисловие
Это издание книги является не просто дополненной, а полностью переработанной версией предыдущего. В iOS 7 изменилось все: внешний вид и функциональная сторона операционной системы, способы использования наших устройств с iOS и, самое главное, принципы программирования для таких устройств. Действительно, без серьезной переработки всей книги было не обойтись. Я добавил в нее примерно 50 новых разделов-рецептов, затронув в них такие вопросы, как динамика UIKit, работа с видами-коллекциями, связкой ключей, удаленными уведомлениями и пр. Кроме того, я проработал все примеры кода и иллюстрации и обновил их с учетом iOS 7.
iOS 7 – огромный шаг вперед в развитии той операционной системы, которую любим все мы, пользователи и разработчики. Нам нравится как работать с нею, так и программировать для нее. Возможно, вы заметили, какое внимание в iOS 7 уделяется динамичности системы: ваш пользовательский интерфейс должен реагировать на различные движения и перемещения, которые могут происходить с устройством. Я имею в виду следующее: Apple стремится, чтобы разработчики по-настоящему внимательно относились к деталям создаваемых приложений, обогащали их реалистичной физикой и динамикой. Именно поэтому Apple дополнила iOS SDK новым элементом – UIKit Dynamics, а в этой книге данной концепции посвящена целая глава. iPhone становится все более высокотехнологичным устройством, оставаясь при этом довольно дорогим. Соответственно, запросы его пользователей также растут. И это понятно. Пользователь только что приобрел совершенно фантастический новейший iPhone или iPad и хочет найти на нем замечательные приложения, максимально полно и эффективно задействующие все возможности этих устройств.
Именно поэтому сейчас разработчик как никогда нуждается в глубоких знаниях SDK, чтобы понимать, что этот SDK может предложить программисту для создания более классных и быстрых приложений. Apple реализовала в SDK для iOS 7 множество классных новых API, и в этой книге мы подробно с ними познакомимся.
Главной особенностью iOS 7 является динамика!
Прежде чем вы приступите к изучению этой книги, я хотел бы немного рассказать о своем профессиональном опыте и о том, чем смогу помочь вам в путешествии по ее страницам. Поведаю, что я за человек и как началась моя большая любовь к iOS. Еще ребенком я впервые попробовал писать код на Basic, тогда у меня был компьютер Commodore 64. Потом я купил себе ПК и принялся экспериментировать с кодом на ассемблере. Сначала это был 8-битный ассемблер для DOS. Затем я попробовал в домашних условиях написать собственную операционную систему, которая так и не была выпущена в качестве коммерческой программы. Она предназначалась для работы на 32-битной архитектуре на процессоре Intel x86.
Среди языков программирования, в которых я пробовал свои силы, особое место занимают ассемблер и Objective-C. Они мне по-настоящему нравились и очень отличались от всех остальных. В ассемблере меня привлекала его чистота: каждая команда делает всего одну вещь, и делает ее хорошо. Думаю, Objective-C приглянулся мне по схожей причине. На самом деле этот признак ассемблера и Objective-C прослеживается во всей операционной системе iOS. Конечно, iOS – это именно операционная система, а ни в коем случае не язык программирования, но во всем, что она делает, iOS обходит своих конкурентов. Это касается как ее простоты, так и того чистого потенциала, которым она наделяет вас, комбинируя аппаратные и программные возможности. В iOS используются замечательные собственные технологии, в частности GCD. Эта операционная система задает такую высокую планку в области удобства и простоты использования, которая до сих пор остается беспрецедентной.
Все разделы всех глав этой книги полностью обновлены с учетом iOS 7. Кроме того, обновлены все скриншоты, а также появилось много новых разделов. В частности, вы найдете их в темах, посвященных связке ключей, динамике пользовательского интерфейса, представлениям для работы с коллекциями, удаленным и локальным уведомлениям, и во многих других. Они были написаны специально для этого издания книги. Я писал новое издание с огромным интересом, и, надеюсь, с не меньшим интересом вы будете знакомиться с новыми возможностями, которые в ней рассмотрены. Вероятно, это будет очень ценное дополнение к вашей технической библиотеке.
Для кого предназначена книга
Предполагается, что читатель хорошо знаком со средой для разработки в iOS и знает, как создать приложение для iPhone или iPad. Эта книга не подойдет программисту-новичку в качестве вводного пособия, но в ней описаны удобные способы решения конкретных задач, с которыми могут столкнуться программисты разного уровня – и новички, и эксперты.
Как построено издание
В этой книге мы рассмотрим фреймворки и классы, доступные в SDK для iOS 7. Я приложил все возможные усилия, чтобы на ее страницах научить вас работе с новейшими и самыми классными API iOS. Разумеется, некоторые пользователи ваших приложений могут работать и с более старыми версиями iOS. Пожалуйста, не забывайте об этих пользователях и выбирайте API рационально, с учетом минимальной версии iOS, на работу с которой рассчитано ваше приложение.
Apple рекомендует писать приложения таким образом, чтобы они поддерживались и работали в версиях iOS 6 и 7. Таким образом, в качестве базового SDK вы должны применять последнюю версию этого инструментария (имеется в виду SDK, на базе которого будет компилироваться ваше приложение) и выбирать в качестве целевой платформы iOS 6 (если это не противоречит поставленным перед вами бизнес-требованиям). Если от вас требуется написать такое приложение, которое должно поддерживаться только в iOS 7, вас ждет масса интересного. Ведь вы будете работать с превосходными API, появившимися только в iOS 7 и рассмотренными в этой книге.
Рассмотрим краткое содержание материала.
• Глава 1. Реализация контроллеров и видов. В этой главе объясняется структура классов в Objective-C и рассматриваются способы реализации объектов. Здесь мы поговорим о свойствах и делегатах, а также о подписке по ключам и индексам. Даже если вы хорошо разбираетесь в Objective-C, настоятельно рекомендую вам изучить данную главу, пусть даже бегло. Это нужно, чтобы понять базовый материал, на котором построены остальные главы. В этой главе мы также рассмотрим типичные способы обращения с различными элементами пользовательского интерфейса – видами-предупреждениями, сегментированными элементами управления, переключателями и надписями. Также поговорим о настройке этих компонентов с применением новейших API, имеющихся в SDK.
• Глава 2. Создание динамических и интерактивных пользовательских интерфейсов. Глава рассказывает о UIKit Dynamics – новейшем дополнении, появившемся во фреймворке UIKit. Эти динамические компоненты позволяют обогащать компоненты вашего пользовательского интерфейса реалистичной физикой и динамикой. Интерфейсы получатся еще более живыми, причем с меньшими усилиями с вашей стороны.
• Глава 3. Автоматическая компоновка и язык визуального форматирования. В этой главе вы узнаете, как пользоваться возможностью автоматической компоновки в iOS SDK и создавать пользовательские интерфейсы таким образом, чтобы их можно было гибко масштабировать (сжимать и растягивать) на экране практически в любом направлении.
• Глава 4. Создание и использование табличных видов. В этой главе рассказано, как работать с табличными видами, чтобы создавать приложения iOS, производящие впечатление профессионально выполненной работы. По природе табличные виды очень динамичны, поэтому программисту иногда бывает сложно понять, как с ними работать. Прочитав эту главу, изучив и опробовав на практике код из приведенных примеров, вы научитесь удобным приемам работы с табличными видами.
• Глава 5. Выстраивание сложных макетов с помощью сборных видов. Виды-коллекции уже довольно давно вошли в арсенал программистов, работающих с OS X. Теперь Apple решила включить те же самые API в iOS SDK, предоставив их, таким образом, iOS-программистам. Виды-коллекции во многом напоминают табличные виды, но отличаются значительно более широкими возможностями конфигурирования и динамичностью. Если в табличных видах мы имеем дело с концепцией разделов, каждый из которых делится на строки, в видах-коллекциях появляются также столбцы. Поэтому в виде-коллекции вы при желании можете отображать много элементов в одной строке. В этой главе мы рассмотрим все великолепные пользовательские интерфейсы, которые можно создавать с применением видов-коллекций.
• Глава 6. Раскадровки. Здесь мы поговорим о процессе раскадровки. Это новый способ определения связей между различными экранами (видами), задействованными в приложении. Самая приятная особенность раскадровки заключается в том, что вам совсем не обязательно вообще что-то знать о программировании для iOS, чтобы написать и запустить простое приложение. Это свойство очень помогает специалистам, работающим вне команды, – аналитикам, владельцам продукта или дизайнерам, – а также команде разработчиков познакомиться со свойствами, которыми обладают компоненты пользовательского интерфейса в iOS, и, имея такие знания, создавать более надежные продукты. Кроме того, преимущества, которые дает раскадровка, облегчают работу программиста на этапе прототипирования. Раскадровка – это просто интересное дело, независимо от того, занимаетесь ли вы ею на бумаге или с помощью Xcode.
• Глава 7. Параллелизм. Человек умеет делать одновременно несколько вещей, причем особенно не задумываясь о том, как это происходит. С развитием информационных технологий мобильные устройства также становятся многозадачными. Разработчику, пишущему программы для таких устройств, предоставляются инструменты и механизмы, которые позволяют выполнять несколько задач в определенный момент времени. Этот феномен называется параллелизмом или конкурентным программированием. В главе 5 вы узнаете о технологии Grand Central Dispatch, с помощью которой Apple в основном обеспечивает параллелизм в iOS. В этой главе мы поговорим также о таймерах, потоках и операциях.
• Глава 8.Безопасность. iOS 7 – весьма безопасная операционная система. Приложения, которые мы для нее пишем, также должны соответствовать определенным стандартам и практикам обеспечения безопасности. В этой главе будет рассмотрено, как пользоваться преимуществами различных API связки ключей и повысить безопасность ваших приложений. Мы обсудим также различные меры, помогающие повысить безопасность вашего пользовательского интерфейса.
• Глава 9. Core Location и карты. В этой главе обсуждается работа с комплектом для программирования карт (Map Kit) и основных геолокационных API – то есть речь пойдет о написании приложений для iOS, располагающих информацией о местоположении устройства. Сначала поговорим о картах, потом обсудим, как определяется местоположение устройства, и снабдим ваши карты пользовательскими аннотациями. Потом изучим геокодирование и обратное геокодирование, а также методы, входящие в состав фреймворка Core Location, доступные лишь в версии iOS 7 SDK.
• Глава 10. Реализация распознавания жестов. Здесь демонстрируется использование механизмов, распознающих жесты пользователя на сенсорном экране. Они позволяют пользователю легко обращаться с графическим интерфейсом ваших приложений для iOS. В этой главе вы научитесь применять соответствующие механизмы, доступные в SDK для iOS, а также изучите рабочие примеры, которые протестированы в операционной системе iOS 7.
• Глава 11. Сетевые функции, JSON, XML и Twitter. Глава рассказывает о встроенных синтаксических анализаторах для JSON и XML. На базе этой информации в главе рассматриваются различные API для сетевых взаимодействий, а также обсуждается, как вы можете реализовать в ваших приложениях функции для общения в социальных сетях. С помощью таких возможностей пользователи смогут обмениваться своими данными и творчеством на подобных ресурсах, например в Facebook.
• Глава 12. Управление файлами и каталогами. Одна из самых важных задач, которые нам как разработчикам приходится решать при программировании для iOS, – это управление файлами и каталогами. В этой главе речь пойдет о создании, считывании, записи и удалении файлов. Здесь вы найдете информацию, достаточно подробную для того, чтобы наладить управление файлами и каталогами с помощью средств iOS SDK.
• Глава 13. Камера и библиотека фотографий. В данной главе показано, как обнаружить доступность камеры на передней и задней поверхностях устройства с системой iOS. Кроме того, вы научитесь обращаться к библиотеке фотографий посредством фреймворка ресурсов (Assets Framework). В конце главы рассказано о том, как редактировать видео прямо на устройстве с iOS с помощью встроенного контроллера видов.
• Глава 14. Многозадачность. В этой главе показано, как создавать приложения, ориентированные на многозадачность и хорошо функционирующие на устройствах с iOS. Вы узнаете об организации фоновых процессов, о воспроизведении аудио и определении местонахождения пользователя в фоновом режиме. Кроме того, мы поговорим о загрузке содержимого по URL, пока ваше приложение находится в фоновом режиме. Опираясь на эту информацию, мы также исследуем некоторые новые API для многозадачности, появившиеся в iOS 7. Они позволяют нам скачивать контент периодически, пока приложение работает в фоновом режиме и даже когда оно не запущено.
• Глава 15. Уведомления. Уведомления – это объекты, несущие определенную информацию, которая может передаваться множеству получателей методом широковещания. В этой главе мы обсудим уведомления, в том числе локальные и пуш-уведомления. Вы узнаете, как использовать новейшие возможности, встроенные в Xcode, и легко включать эти функции в свои приложения.
• Глава 16. Фреймворк Core Data. Глава описывает детали стеков Core Data и демонстрирует, из чего состоят эти стеки. Изучив ее, вы сможете проектировать собственные объектно-ориентированные модели данных прямо в Xcode с помощью редактора моделей Core Data, а также создавать и получать объекты в Core Data. Опираясь на эту информацию, вы научитесь добавлять в Core Data собственные данные и искать данные с помощью фонового потока. В таком случае ваш поток пользовательского интерфейса останется свободен и сможет своевременно обрабатывать пользовательские события.
• Глава 17. Графика и анимация. В этой главе дается введение во фреймворк Core Graphics. Вы узнаете, как отрисовывать изображения и текст в графическом контексте, рисовать линии, прямоугольники и пути, а также многое другое. Также вы познакомитесь с новыми API из iOS SDK, позволяющими фиксировать содержимое ваших видов в форме скриншотов.
• Глава 18. Фреймворк Core Motion. Как следует из названия, глава посвящена рассмотрению фреймворка Core Motion. С помощью Core Motion вы получаете доступ к акселерометру и гироскопу, установленным на устройстве с iOS. Кроме того, вы сможете регистрировать встряхивание устройства. Разумеется, не на всех устройствах с iOS имеются акселерометр и гироскоп, поэтому вы также узнаете, как определять доступность этого оборудования.
• Глава 19. Фреймворк Pass Kit. В этой главе описан Passbook – виртуальный кошелек, который позволяет управлять вашими купонами, посадочными талонами, железнодорожными и автобусными билетами, а также другими подобными документами. Здесь вы узнаете все необходимое для создания ваших собственных путевых документов с цифровой подписью и научитесь с легкостью раздавать их пользователям.
Дополнительные ресурсы
Время от времени я обращаюсь к официальной документации Apple. Некоторые описания с сайта Apple точны, и пытаться изложить их своими словами – все равно что изобретать велосипед. Здесь я перечислил наиболее важные официальные документы и руководства, предлагаемые Apple, которые должен прочитать каждый разработчик, профессионально пишущий программы для iOS.
Для начала предлагаю ознакомиться с iOS Human Interface Guidelines (Руководством по созданию пользовательских интерфейсов для всех устройств iOS) (https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/Introduction/Introduction.html). Этот документ необходимо прочитать любому программисту, работающему с iOS. На самом деле я считаю, что эти документы обязательно должны прочитать также сотрудники отделов разработки и дизайна продукции в любой компании, занимающейся iOS.
Рекомендую также просмотреть документ iOS Application Programming Guide (Руководство по программированию приложений для iOS), имеющийся в iOS Reference Library (Справочной библиотеке iOS), где даются полезные советы по созданию отличных приложений для iOS: https://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Introduction/Introduction.html.
В iOS 7 значительно изменились принципы представления компонентов пользовательского интерфейса на экране. Мы подробно обсудим все эти изменения и поговорим о том, как программист может применять эти новейшие API для создания замечательных приложений для iOS 7. Кроме того, я рекомендую вам ознакомиться с документом iOS 7 UI Transition Guide (Руководство по переходу на пользовательский интерфейс iOS 7) от Apple (https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TransitionGuide/index.html#//apple_ref/doc/uid/TP400 13174). В нем описаны все изменения, связанные с пользовательским интерфейсом, появившиеся в последней версии SDK.
Читая главу 12, вы обратите внимание на то, что в ней одной из наиболее важных тем являются блоковые объекты. Блоковые объекты рассматриваются в книге вкратце, но чтобы подробнее разобраться с этой темой, рекомендую познакомиться с руководством A Short Practical Guide to Blocks (Краткое практическое руководство по блоковым объектам), доступным по следующей ссылке: https://developer.apple.com/library/ios/#featuredarticles/Short_Practical_Guide_Blocks/index.html%23/apple_ref/doc/uid/TP400 09758.
В книге я буду часто упоминать пакеты (bundles) и говорить о том, как загружать из пакетов изображения и данные. В издании будет кратко рассказано о пакетах, но если хотите разобраться с ними подробнее, прочтите Bundle Programming Guide (Руководство по программированию пакетов) по адресу: https://developer.apple.com/library/ios/#documentation/CoreFoundation/Conceptual/CFBundles/Introduction/Introduction.html.
Условные сокращения, используемые в данной книге
В данной книге применяются следующие условные обозначения.
Шрифт для названий
Используется для обозначения URL, адресов электронной почты, а также сочетаний клавиш и названий элементов интерфейса.
Шрифт для команд
Применяется для обозначения программных элементов – переменных и названий функций, типов данных, переменных окружения, операторов, ключевых слов и т. д.
Шрифт для листингов
Используется в листингах программного кода.
Данный символ означает совет, замечание практического характера или общее замечание.
Данный символ означает предостережение.
Работа с примерами кода
Эта книга написана для того, чтобы помочь вам в работе. В принципе, вы можете использовать код, содержащийся в этой книге, в ваших программах и документации. Можете не связываться с нами и не спрашивать разрешения, если собираетесь воспользоваться небольшим фрагментом кода. Например, если вы пишете программу и кое-где вставляете в нее код из этой книги, разрешения не требуется. Однако если вы запишете на диск примеры из книг издательства O’Reilly и начнете раздавать или продавать такие диски, на это необходимо получить разрешение. Если вы цитируете эту книгу, отвечая на вопрос, или воспроизводите код из нее в качестве примера, на это не требуется разрешения. Если вы включаете значительный фрагмент кода из этой книги в документацию по вашему продукту, на это требуется разрешение.
Правообладателям!
Это произведение, предположительно, находится в статусе 'public domain'. Если это не так и размещение материала нарушает чьи-либо права, то сообщите нам об этом.