Зачем компоновщик связывает статические библиотеки с ошибками? iOS

У меня проблема с привязкой моей смешанной языковой структуры к проекту.

1) Я создаю фреймворк с классами Swift и Objective-C.

2) Основная логика хранилась в файле Swift. Например, класс с методом, вызывающим NSLog («Был вызван журнал Swift»).

3) В файле Objective-C есть класс, в котором есть метод, в котором я создаю экземпляр класса Swift и вызываю метод Swift-log.

4) Я связываю этот фреймворк с моим проектом Objective-C, я могу вызывать все, что мне нужно в этом проекте, но когда я хочу собрать этот проект, я получаю ошибку «linker command failed with exit code 1 (use -v to see invocation)»

И предупреждения:

ld: warning: Could not find auto-linked library 'swiftFoundation'

ld: warning: Could not find auto-linked library 'swiftDarwin'

ld: warning: Could not find auto-linked library 'swiftCoreFoundation'

ld: warning: Could not find auto-linked library 'swiftCore'

ld: warning: Could not find auto-linked library 'swiftCoreGraphics'

ld: warning: Could not find auto-linked library 'swiftObjectiveC'

ld: warning: Could not find auto-linked library 'swiftDispatch'

ld: warning: Could not find auto-linked library 'swiftSwiftOnoneSupport'

Еще я видел решение с импортом пустого Swift-файла, но необходимо сделать проект без мусора.

Я обнаружил, что это решило мою проблему: stackoverflow.com/a/50495316/2842800

phips28 28.09.2018 16:28

@PhilippHolly Мне нужно решение, которое не будет включать пустые файлы.

Yaroslav Skachkov 01.10.2018 09:22

Извините, я пока не нашел решения. дайте мне знать, если найдете что-нибудь.

phips28 02.10.2018 20:10

я обнаружил, что это решило мою проблему stackoverflow.com/a/64802429/8079868

Muhammad Numan 27.06.2021 16:05
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
96
4
80 270
21

Ответы 21

Попробуйте этот обходной путь https://stackoverflow.com/a/50495316/1658268

По сути, просто добавьте фиктивный быстрый файл в свой проект и повторно запустите сборку.

Вы второй, кто предлагаете такое решение :). Как я уже сказал в комментариях к описанию моего вопроса, мне нужно решение без пустых Swift-файлов.

Yaroslav Skachkov 24.10.2018 10:46

Очевидно, для проектов с чистой целью-c вам нужно будет добавить этот $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) в пути поиска библиотеки вашей цели. Это сработало для меня, когда я включил библиотеку, написанную быстро, в проект в objective-c

Можете ли вы привести нам пример того, как мы можем добавить, поскольку я пытаюсь, но я на самом деле не работаю для меня, может быть, нацелен на размещение его не в том месте

Amr Angry 07.01.2019 23:07

@Nathan Как установить это в podspec, и не нужно добавлять его вручную?

huangxinyu 25.02.2019 09:58

Это сработало отлично! Для всех, кто задается вопросом, как именно это сделать; щелкните свой проект xcode в проводнике файлов -> в разделе Targets выберите цель -> выберите вкладку Build Settings -> найдите Library Search Paths и добавьте $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) в разделы отладки и выпуска.

LarryFisherman 06.03.2019 01:54

К сожалению, этот трюк, похоже, перестал работать при использовании Swift 5 с Xcode 10.2 - вероятно, потому, что теперь есть общесистемные библиотеки Swift с iOS 12.2.

megastep 30.03.2019 03:04

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

amar 12.08.2019 06:54

@megastep так как это исправить?

Almas Adilbek 10.09.2019 14:40

Попробуйте добавить в путь поиска целевой библиотеки следующее: $ (TOOLCHAIN_DIR) /usr/lib/swift-5.0 / $ (PLATFORM_NAME)

gom1 18.09.2019 00:25

Он компилируется, но затем при запуске приложения произошел сбой: «Для этой копии libswiftCore.dylib требуется версия ОС до 12.2.0». Если вы хотите решить эту проблему, просто добавьте в проект пустой быстрый файл, оставьте его навсегда, и он будет работать. (Проблема возникает из-за того, что вы используете в своем приложении как Objective-C, так и быстрый код)

Fantasim 18.09.2019 14:00

У меня такие же ошибки при случайной компиляции проекта с помощью снэпшота Swift 5.0, настроенного в настройках Xcode »Компоненты» Toolchain.

Я специально изменил его ... в любом случае я могу скомпилировать его на arm64 (отлично работает на симуляторе)?

Kirow 03.05.2019 16:39
  1. Откройте ios / YourAppName.xcodeproj в Xcode
  2. Щелкните правой кнопкой мыши имя вашего приложения в навигаторе проекта слева и выберите «Новый файл…»
  3. Создайте в проекте один пустой файл Swift (при добавлении убедитесь, что выбрано целевое имя вашего приложения)
  4. когда Xcode спросит, нажмите Create Bridging Header и не удаляйте тогда файл Swift. перезапустите вашу сборку.

Это должно решить проблему

Да, используйте это, если у вас есть проблема со Swift 5 / Xcode 10.2 / Mac OS 10.14.4 / iOS 12.2.2

Mark Sergienko 19.04.2019 10:26

Невероятный ... Я даже не знаю, что это ДЕЙСТВИТЕЛЬНО сделало, но я попробовал, и это устранило мою проблему. Swift 5 / Xcode 10.2 / Mac OS 10.14.6

Will 10.09.2019 20:34

Это сработало для меня. MacOS Catalina 10.15.2 XCode 11.3.1 RN 0.61.5

Yeshan Jay 28.01.2020 10:42

Работает как шарм. Может кто-нибудь объяснить, почему?

RadioLog 13.02.2020 12:38

Что делать, если у меня уже есть заголовок моста, но проблема не устранена? Я бегаю на MacOS Mojave и XCode 11.3.1

blastervla 02.03.2020 14:45

Это работало с чистым проектом Objective-C на Xcode 11.4.1.

Vincent Gigandet 02.05.2020 01:36

Исправьте ту же ошибку ссылки моей цели UITest, которая была создана cocoapods в смешанном модуле Swift и ObjC на Xcode 11.4.1

yuyeqingshan 13.05.2020 05:44

что, если у вас уже есть файл моста, может кто-нибудь объяснить, пожалуйста

bona912 06.10.2020 11:41

Xcode не запрашивает «Создать заголовок моста», версия Xcode: 12.4

John Stuart 26.07.2021 20:49

то же самое для меня: Xcode не спрашивает ....

Amin 05.08.2021 07:41

Это сработало для меня на macOS 11.4, Xcode 12.5.1

JRedford 06.09.2021 06:31

В моем случае это был проект React-Native после добавления библиотеки Swift Pods. Может быть, сработает только шаг 2:

  1. Добавление нового файла Swift и заголовка Brigde:

1) File -> New -> File<code>File -> New -> File</code>

2) Выбрать Swift FileSelect <code>Swift File</code>

3) Подтверждаем Create Bridging Header

  1. Перейдите к Build Settings и установите Always Embed Swift Standard Libraries на YESAlways Embed Swift Standard Libraries

Куда я положу файл, под pod'ами или проектом?

lutakyn 20.08.2019 20:37

@lutakyn Я вставил это в проект

AlVelig 21.08.2019 22:55

Я также обновил свою версию cocoapods до 1.7.5, которая у меня сработала.

Sahil 17.09.2019 08:04

Это сработало для меня для моей собственной сборки React => RN 60.5, обновил cocoapods до 1.8.4, затем сделал это и устранил мои проблемы сборки (также очистил папку сборки).

IronWorkshop 27.10.2019 08:28

Сработало для меня без последнего шага> перейдите в настройки сборки и установите для параметра Always Embed Swift Standard Libraries значение YES

Oleg Dater 04.12.2019 08:24

Не удаляйте фиктивный файл Swift после создания файла моста! Сохраните это или построить не удастся

Nader Ghanbari 19.01.2020 03:59

Шаг Create Bridging Header у меня не появляется. Для меня написано Save File.

dcangulo 11.03.2020 08:18

@dcangulo, который появляется только в том случае, если ваше имя файла содержит "bridging-header"

Luca Davanzo 13.03.2020 10:04

Яблочко! Это сработало для меня после добавления зависимости модуля в новый проект, созданный React Native.

Josh 20.03.2020 10:52

Это сработало, спасибо! Мое основное приложение работало нормально, но я создал расширение для общего доступа. Мне нужно было создать дополнительный заголовок моста и всегда вставлять Swift для моего расширения, чтобы оно загружалось правильно (хотя я не использовал Swift).

Eric Wiener 31.03.2020 15:40

Для XCode 11 beta 4 Пути поиска в библиотеке должен быть:

$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)

Мне пришлось добавить это к каждому из моих целевых свойств «Пути поиска в библиотеке». Не только основное приложение. Итак, включая мой комплект часов и цели Siri Intents.

Tap Forms 24.07.2019 20:04

Любые цели с кодом Swift должны иметь указанный выше путь для XCode 11.

gom1 18.09.2019 00:23

Обратите внимание: если у вас есть это в Xcode 12, он может испортить вашу сборку.] \

scaly 27.01.2021 09:26

Если вы столкнулись с этой ошибкой при использовании Xcode 11 beta 4 в сочетании с carthage, см. Этот обходной путь:

https://github.com/Carthage/Carthage/issues/2825

По сути, он состоит из создания xcconfig с исправлениями и внедрения их в каждую сборку.

Если ваша версия Xcode> = 12.2

Перейти к

BuildSettings -> Linking -> runpath search path

и добавьте /usr/lib/swift в качестве первого аргумента следующим образом:

Может кто-нибудь объяснить мне, почему -1? Потому что я пробовал это, и теперь мне больше не нужно постоянно чистить => перестраивать всякий раз, когда я меняю одну строку. Примечание: мне также нужно было установить «Включить битовый код» как «Нет».

Cristiano Santos 16.07.2020 11:45

XCode 11.3 бета, Swift 5.0

Я просто добавляю свои цели в подфайл:

platform :ios, '9.0' 
use_frameworks! 
inhibit_all_warnings!

def shared_pods
    # Pods for NamaIOS
    pod 'Alamofire'
    pod 'RxSwift'
end

target 'MyApp' do
  use_frameworks!

  shared_pods

end

target 'MyApp-Test' do
  use_frameworks!

  shared_pods

end

target 'MyApp-Development' do
  use_frameworks!

  shared_pods

end

если вы пришли из инструкции по установке Lottie-React-native, просто добавьте use_frameworks! в podFile # 536 (комментарий)

https://stackoverflow.com/a/56187043/1848929 работает как шарм.

Просто создайте пустой быстрый файл в своем проекте, а затем создайте свой проект. Вот и все.

После выбора Swift File и последующего нажатия Next отображается не Create Bridging Header, а Save As:, а затем Create. Любые идеи?

dcangulo 11.03.2020 08:22

такая же проблема со мной

Aftab Amin 28.08.2021 09:14

Ответ @AlVelig сработал для меня.

Мой случай - проект Flutter, и я добавляю пакет (searchchable_dropdown), который написан Swift.

Предупреждение о выходе:

Не удалось найти автоматически подключаемую библиотеку swiftObjectiveC

Не удалось найти автоматически подключаемую библиотеку swiftCore

......

Я только забываю добавить новый фреймворк в свой pod-файл :)

 target 'Data' do
inherit! :search_paths
 pod 'AlamofireObjectMapper', '~> 5.2'

конец

Когда я пытался интегрировать Lottie в мой проект React Native, решил эту проблему, удалив модули lottie-ios и lottie-react-native с помощью npm.

npm uninstall lottie-react-native lottie-ios

Убедитесь, что файлы также не связаны

npx react-native unlink lottie-react-native lottie-ios

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

После этих шагов я удалил свою папку Pods, очистил свою сборку от xcproject и xcworkspace (возможно, одного из них будет достаточно). После этого я снова установил модули.

npm i --save lottie-react-native [email protected]

(Не забудьте проверить текущие доки в репозитории Lottie на наличие последних версий.)

После переустановки модулей перейдите в папку ios и запустите pod install.

Откройте xcworkspace в Xcode и запустите проект (убедитесь, что ваша сборка чистая).

Это решило мою проблему.

Удачи.

какую версию Lottie-React-native вы устанавливаете

Aftab Amin 28.08.2021 09:15

Привет, @AftabAmin, спасибо за отрицательный голос ?. Если вы прочтете мой пост, то увидите, что я слежу за документацией в документации lottie RN: github.com/lottie-react-native/lottie-react-native На момент публикации этого сообщения год назад я не совсем уверен в версии, но попробую с последней стабильной версией. Удачи!

KentAgent 28.08.2021 10:24

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

Aftab Amin 28.08.2021 11:47

@AftabAmin Ясно, это очень плохо. сообщите об этом разработчикам Lottie RN, возможно, открыв сквозной выпуск. Могу помочь большему количеству людей, чем ты сам. Жаль, что я больше ничем не могу помочь. Я давно не работал с лотти.

KentAgent 28.08.2021 14:00

Спасибо брат. отредактируйте свой ответ, и я проголосую за него. наконец-то я исправил эту проблему.

Aftab Amin 28.08.2021 14:03
  1. Щелкните правой кнопкой мыши имя проекта и добавьте новый файл swift, оставив его как File.swift.
  2. он попросит вас создать новый заголовок моста accept
  3. Снова запустить проект

Если у вас возникла проблема после обновления xCode до версии 12 и возникли ошибки

Could not find or use auto-linked library 'swiftWebKit'

и еще два.

Просто добавьте $(SDKROOT)/usr/lib/swift в Настройки сборки> Пути поиска> Пути поиска в библиотеке.

Надеюсь на помощь :)

@SehiiVolynets, используйте курсив (используйте скобки *) для путей.

maciejwww 24.09.2020 11:47

@maciejwww, что вы подразумеваете под «курсивом» и «скобками со звездочкой»? Какой из них следует использовать?

easytarget 20.02.2021 14:50

Я имею в виду политику форматирования на StackOverflow. Использование скобок со звездочкой преобразует текст в курсив: *text* -> текст. Для путей в графическом интерфейсе рекомендуется использовать шрифт курсив или жирный (двойная звездочка: **text**). Однако в этом случае, полагаю, лучше использовать шрифт жирный, чем курсив. Теперь мой комментарий больше не нужен, потому что @Niko отредактировал ваш ответ. Проверьте это и сравните с вашей версией. Краткую информацию о форматировании текста и пример вы можете найти в здесь.

maciejwww 21.02.2021 17:15

Сработало у меня! Спасибо Xcode 12.5 iOS 14.5

Robert Bentley 08.05.2021 22:09

Обновление ответа Алекса:

В моем случае это был проект React-Native после добавления библиотеки Swift Pods. Может быть, сработает только шаг 2:

  1. Добавление нового файла Swift и заголовка Brigde:
  1. File -> New -> FileFile -> New -> File

  2. Выберите Swift FileSelect Swift File

  3. Подтвердите Create Bridging Header

  1. Перейдите к Build Settings и установите Always Embed Swift Standard Libraries на YESAlways Embed Swift Standard Libraries

для Xcode 12.2

Создайте пустой файл Swift с помощью Xcode, например с именем Void.swift, и каждая проблема будет решена Xcode автоматически.

Я экспортирую свой проект единства. Раньше это работало просто для добавления пустого быстрого файла с нажатием кнопки create Bridging Header.

но недавно я обновил свой xCode до 12.3, и он перестал работать.

Итак, попробовал несколько других способов.

Я добавил $(SDKROOT)/usr/lib/swift в Настройки сборки> Пути поиска> Пути поиска в библиотеке.

но все равно это не работает. Итак, я добавил тот же путь, то есть Настройки сборки> Пути поиска> Пути поиска в библиотеке.

$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)

$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)

Теперь он работает идеально. Не получил точной проблемы или решения, но он хорошо работает с этим способом.

Я просто добавляю эти три в Настройки сборки> Пути поиска> Пути поиска в библиотеке.

  1. $ (SDKROOT) / usr / lib / swift
  2. $ (TOOLCHAIN_DIR) / usr / lib / swift / $ (ИМЯ ПЛАТФОРМЫ)
  3. $ (TOOLCHAIN_DIR) /usr/lib/swift-5.0 / $ (PLATFORM_NAME)

Отдельно каталоги TOOLCHAIN_DIR не работают. Если я добавлю $(SDKROOT)/usr/lib/swift, то заработает только он.

Протестировано в Xcode 12.5, $(SDKROOT)/usr/lib/swift должен быть первым

xhg 09.05.2021 11:52

Xcode 12.5, React Native. Добавление виджета iOS или приложения Apple Watch вызвало ошибки связывания.

Изменение: «Пути поиска в библиотеке» с Swift-5.0 на Swift-5.2

Привет, спасибо за это! Изменение путей поиска в библиотеке с swift-5.0 на swift-5.2 привело к тому, что мое приложение, наконец, было собрано и запущено (оно не имеет ничего общего с приложениями или виджетами для часов).

Pauli Kettunen 17.08.2021 12:21

Я столкнулся с этой проблемой в нашем проекте, и проблема заключалась в том, что в нашем файле проекта xcode были сиротские ссылки на lottie. Открытие этого в текстовом редакторе и удаление их устранило проблему для меня.

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