Ответ 1
Начиная с Xcode 9 beta 4, Xcode изначально поддерживает статические библиотеки с источниками Swift.
Итак, я работаю над проектом iOS в Swift, и я хотел создать библиотеку Static с некоторыми полезными вещами.
Моя проблема в том, что когда я пытаюсь создать свою lib в Xcode (версия 6.3), у меня есть "Build Failed", за которым следуют: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: unknown option character 'X' in: -Xlinker
Я никогда не видел этого, и это не моя первая статическая библиотека. Поэтому я думал, что могу быть связан с тем, что я использую исключительно класс Swift.
Что вы, ребята, думаете? Заранее благодарю вас.
Начиная с Xcode 9 beta 4, Xcode изначально поддерживает статические библиотеки с источниками Swift.
Как уже упоминалось, Apple действительно позволяет Swift в статических библиотек из Xcode 9 Beta 4.
Мы попытались сделать это в существующем проекте с проектами на основе Objective-C и "дочерними" статическими библиотеками и продолжали сталкиваться с ошибкой компоновки
ld: library not found for -lswiftSwiftOnoneSupport for architecture x86_64
также
ld: library not found for -lswiftDispatch for architecture x86_64
Это связано с тем, что основная цель (приложение) пытается построить исключительно на основе Objective-C и статическая библиотека не сообщает, что в нее должны быть включены библиотеки Swift. Это произошло потому, что в разделе " Compile Sources
" на наших Build Phases
не было файлов Swift для цели приложения.
В общем, все, что вам нужно сделать, это добавить хотя бы один файл .swift
в этот список компиляции, и он будет включать библиотеки Swift для вас. Ему даже не нужно иметь какой-либо код или значения, это может быть пустой файл.
Затем вы можете начать добавлять файлы Swift в ваш "дочерний" проект статической библиотеки. Я бы позволил ему сгенерировать для вас заголовок моста, затем вы можете переместить его и изменить импортируемое (убедитесь, что проект указывает на нужный файл в настройках сборки, если вы переместите его).
Вы все равно должны помнить, что использование Swift и Objective-C в одной и той же статической библиотеке может иметь свои проблемы. Я предлагаю прочитать документ для разработчиков Apple "Swift и Objective-C в одном проекте" о том, как решить проблему импорта Objective-C в Swift (с помощью соединительного заголовка) и как использовать файлы Swift в коде Objective-C (импортировать сгенерировал -Swift.h
для вашей библиотеки).
Swift не поддерживает статическую библиотеку
Xcode версии 10.2.1
Создать проект библиотеки или создать целевой объект библиотеки
File -> New -> Project... -> Cocoa Touch Static Library
//or
Project editor -> Add a Target -> Cocoa Touch Static Library
Добавить файлы .swift
Select '.swift' file -> Select File Inspectors Tab -> Target Membership -> Select the target
//or
Project editor -> select a target -> Build Phases -> Compile Sources -> add files
Сборка библиотеки - ⌘ Command + B или Product -> Build
Примечание 1. Убедитесь, что вы создаете библиотеку для той же архитектуры процессов, что и код клиента.
Примечание 2: представьте свой API, который должен быть видимым для потребителя, используя модификаторы доступа public
или open
[About]
Найти сгенерированный вывод[Build location]
Products group -> lib<product_name>.a -> Show in Finder
Каталог включает в себя
lib<product_name>.a
- встроенная статическая библиотека<product_name>.swiftmodule
, которая включает в себя:
.swiftdoc
- документы.swiftmodule
- общедоступный интерфейс/определенияDrag and drop
двоичный файл в проект Xcode[About]
Link Binary
[Undefined symbols] [Link vs Embed]
Project editor -> select a target -> General -> Linked Frameworks and Libraries -> add -> Add Others... -> point to 'lib<target_name>.a' file
//or
Project editor -> select a target -> Build Phases -> Link Binary With Libraries -> add -> Add Others... -> point to 'lib<target_name>.a' file
Добавить Library Search paths
[Library not found for] [Recursive path]
Project editor -> select a target -> Build Settings -> Search Paths -> Library Search paths -> add path to the parent of 'lib<target_name>.a' file
Добавить Import Paths
[No such module] [Recursive path]
Project editor -> select a target -> Build Settings -> Swift Compiler - Search Paths -> Import Paths -> add path to the parent of '.swiftmodule' folder
Импортировать модуль в код клиента Swift [module_name]
import module_name
Вот пошаговая статья о создании статической библиотеки для Swift 5
https://medium.com/@dr_rost/create-swift-5-static-library-f1c7a1be3e45