Добавление Playgrounds к Xcode проектам.

Playgrounds – прекрасный способ опробовать идеи, но я, как правило, использую их автономно. Из них можно сделать отличных компаньонов, если добавить в ваши Xcode проекты. Я особенно люблю использовать в Playground “живые  View” (Live View) для предварительного просмотра view и расположений (layout) UI элементов без необходимости прибегать к услугам Interface Builder.

К сожалению, Playground автоматически не получает доступ к коду и  ресурсам проекта.

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

Создание пользовательского View

Для того, чтобы дать вам идею того, как это делается, я использовал минимальный Xcode проект с именем GridView, в основу которого положен шаблон Single  View Application. Представьте, что я использую этот проект для для создания пользовательского view, который рисует сетку с настраиваемым количеством строк (rows) и столбцов (columns). Детали не очень интересны, но вот интерфейс этого класса class:

class GridView : UIView {
  var rowCount: Int { get set }
  var columnCount: Int { get set }
  var lineColor: UIColor { get set }
  var lineWidth: CGFloat { get set }
}

Я могу сделать это view @IBDesignable и @IBInspectable, так что я могу его предварительно увидеть и сконфигурировать прямо в Interface Builder. А что если я не использую Interface Builder? “Живое View” (Live View) на Playground может помочь мне заполнить этот пробел. Давайте посмотрим, как это можно сделать.

Создание Workspace

На первом шаге мы создаем “рабочее пространство” Xcode workspace, которое содержит как Xcode проект, так и Playground. Начинаем с базового Xcode проекта и используем пункт “Save As Workspace…” из меню File.

Я назову мое “рабочее пространство” GridView по имени проекта и сохраню его как xсworkspace файл в том же самом месте, что и xcodeproj файл:

Помните, что в дальнейшем вам нужно открывать workspace файл, а не файлы проекта или Playground.

Добавляем Playground

Создаем новую Playground с помощью меню “File -> New -> Playground…”, даем ей имя и сохраняем в том же самом месте, где находятся файлы xcodeproj и xcworkspace. У вас должны быть файлы: проекта xcodeproj, “рабочего пространства” workspace и Playground в корневой директории проекта:

Затем перетягиваем Playground из Finder в Xcode на самый верхний уровень. Вы должны добавить новый Playground к workspace, а не к проекту.

В Навигаторе у вас на самом верхнем уровне должны быть Playground и проект:

К сожаленю, мы даже не можем начать использовать код и ресурсы (resources) нашего проекта на Playground. У Playground есть свой собственный модуль (module) и она не может видеть target модуль нашего приложения. Чтобы обойти это, мы можем создать фреймворк, который импортируем в Playground.

Создание Framework.

Для создания фреймворка (framework) для нашего пользовательского  view используем  меню “File -> New -> Target…” и выбераем шаблон “Cocoa Touch Framework”:

Назовём ваш framework (я использовал имя GridViewUI) и изменим поле “Embed In Application” на “None”:

Мы можем теперь добавить файлы. которые хотим использовать на Playground, в   target фреймворка (framework). В нашем случае мне нужно просто добавить GridView class. Кликаем на файле GridView.swift в навигаторе  проекта и используем Инспектор Файлов (в правой части экрана) для того, чтобы добавить GridView class в наш фреймворк (framework). Если бы у меня были какие-то другие ресурсы, которые я хотел бы разделить между фреймворком и приложением, то я бы добавил их именно в этом месте.

Заметьте, что я оставляю класс class GridView как члена target приложения GridView.  В этом простом случае я создал фреймворк (framework) исключительно для использования на Playground, а не в приложении. Если вы выбрали опцию “Embed In Application” (вставка фреймворка в приложение), то уберите этот класс из target приложения.

Мне также необходимо сделать любой интерфейс, к которому мы хотим иметь доступ на Playground, public. Уровень доступа internal, который выставляется по умолчанию (default), ограничивает доступ лишь текущим модулем. Сделайте любой ТИП, свойство или метод public, если вы хотите иметь доступ к ним на  Playground:

Создание фреймворка (framework).

Каждый раз, когда вы добавляете, удаляете или изменяете файлы, которые являются членами фреймворка, не забывайте пересоздавать заново (rebuild) фреймворк. Для этого нужно выбрать target фреймворка, указать один из iOS симуляторов и создать фреймворк с помощью клавиш ⌘B:

Import и использование фреймворка на Playground

Теперь мы можем импортировать наш фреймворк и использовать наш класс class GridView на Playground:

import UIKit
import GridViewUI
import PlaygroundSupport

let grid = GridView()
grid.backgroundColor = .lightGray
grid.rowCount = 3
grid.columnCount = 3
grid.lineColor = .blue
grid.lineWidth = 5

grid.frame = CGRect(x: 0, y: 0, width: 200, height: 300)
PlaygroundPage.current.liveView = grid

Используйте Ассистента Редактора (Assistant Editor) для показа “живого View” (Live View):

И это все.

Создать вкладку Playground.

Мне нравится использовать  Xcode Behaviors для автоматической конфигурации вкладки для показа Playground c Ассистентом Редактора (Assistant Editor). У меня сочетание клавиш ⌃⌥⌘P присваивается этому “поведению”:

Получение Кода.

Вы можете найти полный Xcode проект GridView на моем GitHub в репозитории CodeExamples, и вот ссылка :

Примечание. Это перевод статьи Adding Playgrounds to Xcode Projects.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.