Подтвердить что ты не робот

Как повторно использовать код Swift в других проектах?

Я написал класс в Swift. Я хочу использовать этот код в двух отдельных проектах приложений iOS, которые я написал. Как общий код, так и приложения написаны в Swift. Каков наилучший способ сделать это?

Я попытался создать как фреймворк, так и библиотеку в Swift, а затем добавить его в качестве подпроекта для своего приложения. В обоих случаях я не мог заставить приложение видеть модуль. Я попытался добавить общий модуль к "Target Dependencies" и "Link Binary With Libraries" основного целевого приложения. Не повезло - приложение по-прежнему не может видеть классы совместно используемого модуля.

Использование Xcode6 Beta6 на данный момент.

Решение

Как указывал Константин Коваль и Хелием, все, что мне нужно, - это использовать public в моих объявлениях классов и методов в общем модуле. Теперь все работает, как при использовании рабочей области, так и при добавлении модуля в качестве подпроекта.

Update

Я просто нашел отличное простое решение для повторного использования кода между проектами в Swift. Он называется Карфаген (https://github.com/Carthage/Carthage). Это не плагин, так как я не связан с ним каким-либо образом, мне просто очень нравится. Он работает в iOS 8 +.

4b9b3361

Ответ 1

  • Создайте новый проект (iOS Cocoa Touch Framework) для вашего кода многократного использования.
  • Переместите классы в этот проект Framework
  • Отметьте свои методы и классы, которые должны быть видны другим как public

  • Создать рабочее пространство.
    Вы можете создать рабочую область на шаге 1. Когда вы создаете новый проект Framework, Xcode спросит вас, хотите ли вы создать новое рабочее пространство и добавить этот проект в рабочее пространство. Это лучший подход

  • Добавьте оба проекта и Framework в рабочее пространство
  • Выберите цель проекта → вкладка Общие. Добавить Framework и библиотеки (добавьте свою библиотеку здесь)
  • Если вы хотите использовать код из своей библиотеки в swift файле, импортируйте его import 'LibTargetName'

Ответ 2

Вы можете использовать более программный подход, используя SWM (Swift Modules): https://github.com/jankuca/swm

Он очень похож на npm (node.js менеджер пакетов) или bower (менеджер модуля на стороне клиента); вы объявляете свои зависимости в файле swiftmodule.json, как показано ниже. Он не имеет центрального реестра модулей, как два упомянутых решения JS, он принимает только git URL-адреса.

{
  "name": "ProjectName",
  "dependencies": {
    "Dependency": "git://github.com/…/….git"
  }
}

... запустите swm install и создайте модуль Dependency (скомпилированный в двоичный файл *.swiftmodule), готовый для импорта в каталоге .modules/.

import Dependency

И если вы предпочитаете пропустить Xcode для разработки приложений, вы также можете создать все свое приложение с помощью swm build (больше информации в файле readme).

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

Ответ 3

Вот видео, которое очень просто: http://eonil-observatory.tumblr.com/post/117205738262/a-proper-way-to-add-a-subproject-to-another-xcode

Видео для OS X вместо iOS. Но вы получите его и выясните процесс для iOS.

Предположим, что AppA необходимо повторно использовать код из SharedProject.

Следующий процесс работает для меня в Xcode 7 Beta:

  • Создать SharedProject. Тип проекта должен быть Framework вместо Application. Вы пишете общий код в этом проекте и отмечаете код как public.
  • Откройте AppA в Xcode, откройте папку, содержащую SharedProject в Finder. Перетащите файл .xcodeproj из SharedProject из Finder и переместите его в корневую папку AppA в Xcode Project Navigator.
  • AppABuild PhasesLink Binary with Libraries. Добавьте SharedProject.
  • import SharedProject и повторное использование кода из SharedProject!

Edit:

В настоящее время я предлагаю вам использовать Carthage. Это лучше, чем домашнее решение выше.