Как работать с курсом «Developing iOS 9 Apps with Swift» в Xcode 8 с Swift 2.3 и Swift 3.

Стэнфордский курс CS193P Spring 2016  «Developing iOS 9 Apps with Swift«  читался для Xcode 7 и Swift 2.2.

До момента выхода новой версии Xcode 8, каждая версия Xcode была привязана к определенной версии языка программирования Swift. Начиная с Xcode 8 это не так. Swift 3 представляет множество изменений и значительная часть этих изменений разрушает ваш проект, написанный на Swift 2.2 в Xcode 7.

К счастью, Xcode 8 позволяет сделать определенные установки проекта для того, чтобы оставаться с Swift 2.3, который практически совпадает с версией Swift 2.2 в Xcode 7. Это делается для тех проектов, которые не готовы моментально перейти на Swift 3. И это очень мудрое решение.

Apple обеспечила автоматическую миграцию в Xcode 8 проектов, разработанных в Xcode 7. При этом вас спрашивают, какую версию Swift вы выбираете при этой автоматической миграции: Swift 2.3 или Swift 3.0.

В Xcode 8 вы можете разрабатывать приложения для iOS 8, iOS 9 и iOS 10. Эти приложения могут работать с приборами (и соответственно симуляторами) начиная с iPhone 5 и выше, iPad Air  и выше, и iPad Pro (9,7 дюйма)  и выше.

Поскольку все демонстрационные примеры в нашем курсе  «Developing iOS 9 Apps with Swift» были выполнены  с применением  Xcode 7 и Swift 2.2, то логично перевести их в Swift 2.3 в Xcode 8, что и было сделано, все они находятся в Github и работают прекрасно. Кроме того, в ваше распоряжение предоставляются решения Заданий этого курса в Swift 2.3 в Xcode 8, которые находятся на Github.

Но если вы обновились до Xcode 8 и у вас есть хоть какой-то опыт программирования, то я рекомендую начать изучать курс сразу в Swift 3, так как демонстрационные приложения претерпели очень незначительные синтаксические изменения, не затрагивающие их смысловой характер. Кроме того, в вашем распоряжении Swift 3 версия всех демонстрационных примеров, находящаяся на Github. Кроме того, в ваше распоряжение предоставляются решения Заданий этого курса в Swift 2.3 в Xcode 8, которые находятся на Github.

Давайте более подробно рассмотрим оба варианта:  оставаться ли на Swift 2.3  или сразу работать на Swift 3. А вы, на основании этой информации, сами примите решение.

Читать далее

Обновление демонстрационных примеров и решений Заданий курса iOS 9 + Swift до Swift 2.3 и Swift 3.0

Вышли официальные версий Swift 2.3 и Swift 3.0iOS 10 и Xcode 8.   Поэтому я решила на своем сайте обновить демонстрационные примеры, сопровождающие замечательный стэнфордский курс CS193P Spring 2016  «Developing iOS 9 Apps with Swift»  до  Swift 2.3 и Swift 3.0 для запуска их в Xcode 8.

Также, как и в Xcode 7 , в Xcode 8 вы можете запустить эти демонстрационные примеры на своем устройстве (или поделится с друзьями) совершенно бесплатно — для этого не нужно иметь сертификат разработчика Developer Account,  стоимостью 99 $/год.

В 2016 году на стэнфордских курсах, как всегда, для большинства демонстрационных примеров не требуется реальное устройство (iPhone или iPad) и достаточно симулятора. Однако демонстрационные примеры, связанные с движением устройства и с использованием  Core Motion и iCloud, требуют привлечения реальных iPhone или iPad.

Две версии Swift в Xcode 8 присутствуют в следующем качестве: Swift 3 в качестве основной следующей версии Swift, но это ее первый релиз, который, конечно, будет корректироваться, а версия Swift 2.3 оставлена как переходная и стабильная версия для сложных приложений, уже разработанных на Swift 2.2 и находящихся в эксплуатации. Это очень мудрое решение в Xcode 8. Проект Swiftopen source, и вы можете следить за разработкой новых версий на сайте Swift.org. Там же можно вносить свои предложения.

Демонстрационные примеры  для курса CS193P Spring 2016  «Developing iOS 9 Apps with Swift»  для Swift 2.3 и Xcode 8 находятся в репозитарии на Github, а для Swift 3 .0 и Xcode 8 в этом репозитарии также на Github.

Надо сказать, что большинство демонстрационных примеров не претерпели никаких изменений в коде для Swift 2.3, за исключением очень незначительных изменений для демонстрационного примера Smashtag L11, в котором участвует Core Data. Поэтому , если вы обновились до Xcode 8, то код демонстрационных примеров для Swift 2.3 можно прекрасно использовать для прохождения курса  CS193P Spring 2016  «Developing iOS 9 Apps with Swift», а также для написания своего кода при выполнении Заданий.

Код демонстрационных примеров для Swift 3 .0 и Xcode 8 приведен для тех, кто  готов пройти курс сразу в Swift 3.0. О том, какой вариант Swift выбрать в Xcode 8 для прохождения курса  CS193P Spring 2016  «Developing iOS 9 Apps with Swift»  написан следующий пост.

Решения Заданий  для курса CS193P Spring 2016  «Developing iOS 9 Apps with Swift»  для Swift 2.3 и Xcode 8 находятся в репозитарии на Github, а для Swift 3 .0 и Xcode 8 в этом репозитарии также на Github.

Читать далее

Лекция 17 CS193P Spring 2016 — Segues, Core Location и MapKit.

Screen Shot 2015-12-27 at 2.26.54 PM

В Лекции 17 освещаются три основные темы:

  • Segues ( Modal, Unwind, Popover, Embed)
  • Core Location
  • MapKit

И в конце лекции начало большого демонстрационного примера, посвященного  картам и Segues, который продолжится на следующей Лекции 18.

Читать далее

Лекция 16 CS193P Spring 2016 — Notification и CloudKit.

Лекция 16 посвящена большому демонстрационному примеру на тему CloudKit. В самом начале Лекции делается очень короткое отступление для показа уведомлений Notifications, этих маленьких “радиостанций”.

В качестве демонстрационного примера создается приложение Pollster, которое позволяет вам с помощью CloudKit задавать вопросы с ответами и размещать все это в iCloud, чтобы люди могли отвечать на вопросы. Это дает возможность отслеживать сколько ответов получено на вопросы и т.д.

Начинается создание приложения с некоторого UI, который помогает нам задать вопрос и загрузить его в iCloud. Затем проектируется другой View Controller, который показывает список всех вопросов, находящихся в public базе данных, чтобы вы могли выбрать любой из них и добавить свой ответ. Пользовательский интерфейс приложения Pollster позволяет формировать новые вопросы и удалять старые, и все это происходит в iCloud. Для удобства работы пользователя выполняется подписка Subscription на вставку и удаление вопросов с Push Notifications (удаленными уведомлениями). Показано как распространить информацию, содержащуюся в  Push Notifications, которые обрабатываются в AppDelegate,  дальше, к тем View Controller, которые создавали определенные подписки Subscriptions и ожидают их результатов. Читать далее

Лекция 15 CS193P Spring 2016 — Application Lifecycle («жизненный цикл» приложения), Alerts и Cloud Kit.

screen-shot-2016-09-11-at-10-22-50-am
В Лекции 15 на сцену выходят в главной роли файл AppDelegate, который до сих пор Полом Хэгерти прятал во вспомогательную папку Supporting Files,  и CloudKit, этот реальный Mobile Backend as a Service (MBaaS) с авторизацией пользователей, с private  и public базами данных, структурированным хранением больших файлов и push уведомлениями. CloudKit — замечательный, очень простой, надежный  и практически бесплатный (до 1PB бесплатного public хранилища). Это прекрасная замена Parse, который недавно прекратил свое существование.

В результате в Лекции 15 освещаются три основные темы:

  • “Жизненный цикл” приложения (Notifications, AppDelegate, Info.plist, Capabilities)
  • Alerts и  Action Sheets
  • Cloud Kit

Читать далее

Задание 6 cs193p Spring 2016 Задание VI: Игра Breakout. Анимация.

Screen Shot 2016-09-03 at 1.30.15 PM

Содержание

Текст Домашнего Задания 6 на английском языке доступен на  iTunes в пункте “Programming: Project 6:Animation″На русском языке вы можете скачать здесь:

Задание 6 iOS 9.pdf


В Задании 6 вы должны создать простую игру Breakout, используя Dynamic Animator.
Это задание намеренно не имеет четко очерченных возможностей вашей игры, давая вам простор для демонстрации вашей креативности. Хороший разработчик iOS приложений должен не только иметь хорошие программисткие навыки, но и креативные способности.

Однако дается примерный вид экрана, представленный в начале поста, но это не Обязательный пункт Задания. Фактически, Обязательным пунктом Задания 6 является показ некоторой креативности, а не просто тупое копирование этого вида экрана. Примерный вид экрана приведен для тех, кто только из текста Задания 6 абсолютно не может понять, о чем идет речь. Так что  … пожалуйста, не делайте ваше решение абсолютно похожим на это …

Для выполнения Задания 6 нужно посмотреть видео и текстовые материалы Лекции 13 и Лекции 14. Демонстрационные приложения FaceIt L13 и  DropIt L14 для этих лекций находятся на сайте Стэнфорда.

Какие-то идеи можно взять из решения подобного Задания 5 с прошлого курса по iOS 8.

Мое решение будет представлено позже…

 

Лекция 14 CS193P Spring 2016 — Анимация и Core Motion.

Screen Shot 2016-09-02 at 5.12.03 PM

Лекция 14 посвящена двум темам.
Одна тема- продолжение анимации Dynamic Animation, теоретическая часть которой была представлена в виде слайдов на прошлой лекции. На Лекции 14 показывается большой демонстрационный пример Dropit, в котором  вы увидите движок Dynamic Animation в действии при проектировании игры, похожей на Tetris. Ваше Домашнее Задание № 6 полностью посвящено Dynamic Animation, так что Лекция 14 является своего рода подготовкой к Заданию 6.

В демонстрационном примере показан целый спектр «поведений»: “присоединения” UIAttachmentBehavior, столкновения UICollisionBehavior, гравитации UIGravityBehavior и мета-поведения UIDynamicItemBehavior, а также как объединить все эти «поведения» в составное сложное «поведение», которое является subclass UIDynamicBehavior. Демонстрируется обнаружение состояния статического равновесия в системе динамической анимации с помощью делегата. По ходу дела, как всегда, Пол Хэгерти демонстрирует синтаксические конструкции Swift в действии:  lazy vars, пара Наблюдателей свойств willSet{} и didSet{}, инициализация с помощью выполняемых замыканий, разрыв циклических ссылок в памяти с помощью списка захвата [ unowned self ]  в замыканиях и когда такой способ разрыва является безопасным.

Вторая тема — CoreMotion. Это объектно-ориентированное API для доступа к первичным датчикам движения на вашем устройстве. Core Motion  поставляет в приложение данные первичных датчиков Apple приборов:  акселерометра (accelerometer), гироскопа (gyro) и магнитометра (magnetometer).

Читать далее

Лекция 13 CS193P Spring 2016 — NSTimer и анимация.

На Лекции 13 рассматривается одна маленькая тема -таймер NSTime, и одна большая — анимация.  
В начале Лекции 13 рассматривается очень простой маленький класс, NSTime, который позволяет вам вызывать метод либо периодически — снова и снова через определенный интервал, либо один раз когда-нибудь в будущем.Таймер создан на основе специальной iOS технологию Run loopsДля  main queue система автоматически устанавливает  для вас Run loops, так что на main queue NSTimer работает всегда.
Пол Хэгерти представляет демонстрационный пример, в котором использует  приложение FaceIt, и заставляет в нем «лицо» «моргать глазами» с помощью двух таймеров NSTime, перекрестно вызывающих друг друга, что выглядит менее «роботизированно», чем если бы использовался один повторяющийся таймер. По ходу дела он рассказывает что такое в Swift метод,  доступный Objective-C на этапе run time, потому что именно такой метод запускает NSTime. А также показывает, как создать Actions и Outlets в superclass.

Основная часть лекции посвящена анимации. Профессор делает небольшой обзор типов анимации, которые доступны в iOS, но фокусируется на анимации views (UIViews).

Читать далее

Лекция 12 CS193P Spring 2016 — Autolayout (Автоматическая разметка).

Screen Shot 2016-08-19 at 11.38.48 AM
Лекция 12 посвящена очень важной теме: механизму Autolayout (автоматическая разметка).
Вначале дается обзор того, что нам уже известно об Autolayout  к этому моменту времени, так как во всех предыдущих лекциях элементы Autolayout  уже были представлены в той или иной степени. Это направляющие голубые пунктирные линии, это использование CTRL-перетягивания, как способа # 1 для создания ограничений системы Autolayout, а также меню «Pin» и «Align«. В связи с тем, что начиная с iOS 8 используется новая концепция «Адаптивного интерфейса» и появилось понятие Size Class,  роль механизма Autolayout  сильно возросла и теперь в iOS без нее уже не обойтись.
Общую большую картину всех ваших ограничений вы можете получить в Document Outline (схеме UI), который является своеобразной «штаб-квартирой» системы Autolayout,  Именно здесь можно определить, какие ограничения действуют в определенном Size Class, можно разрешить конфликты между ограничениями, можно вести «охоту» за «магическими» числами.

Читать далее

Задание 5 cs193p Spring 2016 Smashtag Mentions Popularity. Решение дополнительного пункта 4 (удаление старой информации из Core Data).

Screen Shot 2016-08-14 at 12.47.59 PM

Содержание

Текст Домашнего Задания 5 на английском языке доступен на  iTunes в пункте “Programming: Project 5: Smashtag Mentions Popularity″На русском языке вы можете скачать здесь:

Задание 5 iOS 9.pdf

Начало решения Задания 5 — все обязательные и дополнительные пункты, кроме 4-го дополнительного пункта — находятся в посте «Задание 5 cs193p Spring 2016 Smashtag Mentions Popularity (Клиент Twitter). Решение».

В данном посте мы рассмотрим особенности решения дополнительного пункта 4 Задания 5, считая, что все предыдущие обязательные и дополнительные пункты Задания 5 выполнены. В решении, представленном ниже, используется  UIManagedDocument для получения контекста базы данных Core Data.

Код для Задания 5 без дополнительного пункта 4 находится на Github для Xcode 7 и Swift 2.2
Код для полного Задания 5 (включая дополнительный пункт 4) находится на Github для Xcode 7 и Swift 2.2.

Если вы установили Xcode 8, то для Swift 2.3 код находится на Github, а для Swift 3 — также на Github.

Следуем методики разработки Core Data приложений, изложенному Полом Хэгерти на Лекции 11.

Пункт 4 дополнительный

Вам не требуется нигде что-либо уничтожать из базы данных, тем не менее, нам необходима информация лишь о наиболее поздних поисках в Twitter, так что со временем у нас напрасно занимается большой объем дискового пространства. Заставьте ваше приложение удалять из базы данных объекты, которые больше не представляют интереса (то есть доступ к этим данным не будет осуществляться в вашем UI) с тем, чтобы поддерживать регулируемый размер базы данных. Вы должны самостоятельно решить, когда наступает подходящее время для удаления уже неиспользуемых данных. 

Читать далее