Как я могу использовать статическую библиотеку.a в swift?

Я хочу использовать статическую библиотеку webrtc .a в swift. Можете ли вы помочь, пожалуйста? Я читал, что вы не можете использовать статические библиотеки в swift, это правда?

3 ответа

Вы исправили эту проблему, которую вы спросили? Я столкнулся с этой проблемой и сегодня, и я исправил ее на мгновение. Если вы не устранили эту проблему, попробуйте выполнить следующие действия:

PS: 2 проекта находятся в одной рабочей области (статический проект lib и проект App), статический проект lib создается перед проектом приложения. Структура рабочего пространства, как показано на рисунке:

Пользователи / raniys / Рабочий стол / Снимок экрана 2016-03-14 в 5.27.20 PM.png

  1. В статическом проекте lib все файлы.h необходимо добавить в "Фазы сборки / Копирование файлов":

введите описание изображения здесь

  1. Перетащите статический файл продукта lib (файл.a) в проект приложения, см. Рис.

(путь: "проект приложения / этапы сборки / связать двоичные файлы с библиотеками")

введите описание изображения здесь

* если вам нужна красная метка для файла.a, вам просто нужно выбрать "универсальное устройство iOS" в качестве устройства для сборки, чтобы пересобрать статический проект lib, и перетащить.a в проект приложения (красный можно удалить)

  1. Установите "Путь поиска библиотеки" в проекте приложения:

введите описание изображения здесь

это путь к файлу.a, который встроил проект: $(USER_LIBRARY_DIR)/Developer/Xcode/DerivedData/StockApp-fkjqyvsniiauxogkivalcduqeotj/Build/Products/Debug-iphoneos

  1. Создайте файл Bridging-Header для своего проекта приложения и импортируйте в него статическую библиотеку, в моем случае я включаю "StaticLib/StaticLib.h" и "CommonFoundation/CommonFoundation.h":

введите описание изображения здесь

  1. Добавьте путь к файлу Bridging-Header к "Objective-C Bridging Header" вашего проекта приложения:

введите описание изображения здесь

Тогда все готово, теперь вы можете использовать функции статических библиотек. введите описание изображения здесь

Использование классов Objective-C в Swift

Если вы собираетесь импортировать код в App Target (сочетание Swift и Objective-C в одном проекте), вам следует использовать bridging headerфайл, чтобы предоставить код Objective-C коду Swift. [Смешивание кода Swift и Objective-C в проекте]

В этом посте я опишу, как импортировать статическую библиотеку Objective-C в код Swift.

Swift consumer -> Статическая библиотека Objective-C

Xcode версии 10.2.1

Создать статическую библиотеку Objective-C

Создайте проект библиотеки или создайте целевую библиотеку

File -> New -> Project... -> Cocoa Touch Static Library
//or
Project editor -> Add a Target -> Cocoa Touch Static Library 

Создайте module.modulemapфайл [О программе]

module module_name {
    umbrella header "module_name-umbrella.h"
    export *
}

Создайте module_name-umbrella.hфайл [О программе] и добавить все.h файлы, которые будут открыты для потребителя

#import "header_1.h"
#import "header_2.h"

добавлять module.modulemap а также module_name-umbrella.h файлы в Copy Filesраздел [О программе].

Project editor -> select a target -> Build Phases -> Copy Files -> add `module.modulemap`, `module_name-umbrella.h` 

Добавить файлы реализации .m

Select `.m` file -> Select File Inspectors Tab -> Target Membership -> Select the target
//or
Project editor -> select a target -> Build Phases -> Compile Sources -> add files

Добавить файлы заголовков .h которые были перечислены в module_name-umbrella.h(header_1.h, header_2.h) [не могу это сделать] [общедоступное целевое членство]

Select `.h` file -> Select File Inspectors Tab -> Target Membership -> Select the target and make it **public**
//or
Project editor -> select a target -> Build Phases -> Headers -> add files to the **public** zone

Библиотека сборки - ⌘ Command+ B илиProduct -> Build

Примечание. Убедитесь, что вы создаете библиотеку для той же архитектуры процесса, что и клиентский код.

Найти сгенерированные выходные данные [Место сборки]

Products group -> lib<product_name>.a -> Show in Finder

Каталог включает

  • lib<product_name>.a - встроенная статическая библиотека
  • include/<product_name> папка с файлами из Copy Files раздел
  • usr/local/include папка с файлами из Headersраздел. Есть общедоступные интерфейсы / определения

Быстрый потребитель со статической библиотекой Objective-C

Drag and dropдвоичный файл в проект Xcode [О программе]

Link Library [Неопределенные символы] [Ссылка против встраивания]

Project editor -> select a target -> General -> Linked Frameworks and Libraries -> add -> Add Others... -> point to `lib<product_name>.a` file
//or
Project editor -> select a target -> Build Phases -> Link Binary With Libraries -> add -> Add Others... -> point to `lib<product_name>.a` file

добавлять Library Search paths [Библиотека не найдена для] [Рекурсивный путь]

Project editor -> select a target -> Build Settings -> Search Paths -> Library Search paths -> add path to the parent of `lib<product_name>.a` file

добавлять Header Search Paths [Модуль не найден] [Рекурсивный путь]

Project editor -> select a target -> Build Settings -> Search Paths -> Header Search Paths -> add path to generated `include/<product_name>` folder with `module.modulemap` and `<product_name>-umbrella.h`

Импортировать модуль в клиентский код Swift [имя_модуля]

import module_name

Больше примеров здесь

Да, вы можете использовать статические библиотеки в Swift. Перейдите к этапам сборки и в разделе "Связать двоичные файлы с библиотеками" и добавьте их туда.

введите описание изображения здесь

Кроме того, вы можете зайти в "Настройки сборки" и в "Пути поиска" добавить значение "Пути поиска в библиотеке", чтобы указать путь к папке, в которой находится ваш файл.a.

введите описание изображения здесь

Вы можете добавить заголовки для вашей библиотеки таким же образом в разделе "Пути поиска заголовков"

Также имейте в виду, что если эта библиотека написана на Objective-C, вам понадобится Bridging Header, чтобы использовать ее в Swift.

Если вы собираетесь импортировать код в App Target, вы должны использовать bridging header файл для представления кода Objective C в код Swift. Узнайте больше здесь

В этом посте я опишу, как импортировать статическую библиотеку Objective-C в код Swift.

Swift consumer -> Objective-C статическая библиотека

Версия Xcode 10.2.1

Создайте статическую библиотеку Objective-C или создайте статическую библиотеку Objective-C Target

Создать проект библиотеки

File -> New -> Project... -> Cocoa Touch Static Library -> Enter necessary information and choose Language -> Objective-C

Создайте module.modulemap файл

module module_name {
    umbrella header "module_name-umbrella.h"
    export *
}

добавлять .h файлы в module_name-umbrella.h это будет открыто для потребителя

#import "header_1.h"
#import "header_2.h"

Добавление файлов копирования Фаза сборки

Project editor -> select a target -> Build Phases -> Copy Files -> add `module.modulemap`, `module_name-umbrella.h` 

Добавить заголовки

Project editor -> select a target -> Build Phases -> Headers(If it doesn't exist -> + at the top -> New Headers Phase) -> add all `.h` files from `module_name-umbrella.h`(`header_1.h`, `header_2.h`)

Сборка библиотеки

Примечание. Убедитесь, что вы создали библиотеку для той же архитектуры процессов, что и код клиента.

Найти сгенерированный вывод

Products group -> lib<module_name>.a -> Show in Finder

Примечание: по умолчанию он будет находиться в подпапке DerivedData папка (ее можно изменить, если удалить DerivedData в процессе разработки и перестроить его заново).

В каталог входят

  • lib<module_name>.a - встроенная статическая библиотека
  • module.modulemap файл
  • module_name-umbrella.h файл
  • usr/local/include папка, которая включает .h файлы из module_name-umbrella.h - открытые интерфейсы / определения

Использование статической библиотеки Objective-C

Link Binary With Libraries

Project editor -> select a target -> Build Phases -> Link Binary With Libraries -> add -> Add Others... -> point to `lib<module_name>.a` file

добавлять Library Search paths

Project editor -> select a target -> Build Settings -> Search Paths -> Library Search paths -> add path to the parent of `lib<module_name>.a` file

добавлять Header Search Paths

Project editor -> select a target -> Build Settings -> Search Paths -> Header Search Paths -> add path to generated `include` folder (or a path to the parent of generated `module_name` folder with `.h` files)
  • Когда вы установите path Вы можете определить путь к одной из родительских папок и установить recursive (/** будет добавлен в конец пути). Например, вы можете осквернить path в Build каталог с recursive параметр.
  • Если patch содержит пробелы - , вы должны избежать их, используя \ или заключите путь в двойные кавычки ""

Модуль импорта в клиентский код Swift

import module_name

Objective-C потребитель -> Objective-C статическая библиотека

Swift customer -> Swift статическая библиотека

Потребитель Objective-C -> Swift статическая библиотека

С Xcode 9 используются статические библиотеки, поддерживаемые Swift. Вы можете использовать как использование в Objective-C. Примечания к выпуску XCode

Xcode поддерживает статические целевые библиотеки, которые содержат код Swift. Для отладки приложений, использующих статические библиотеки Swift, может потребоваться полный набор артефактов сборки, которые находятся в своем первоначальном расположении

Другие вопросы по тегам