У меня проблема с привязкой моей смешанной языковой структуры к проекту.
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-файла, но необходимо сделать проект без мусора.
@PhilippHolly Мне нужно решение, которое не будет включать пустые файлы.
Извините, я пока не нашел решения. дайте мне знать, если найдете что-нибудь.
я обнаружил, что это решило мою проблему stackoverflow.com/a/64802429/8079868





Попробуйте этот обходной путь https://stackoverflow.com/a/50495316/1658268
По сути, просто добавьте фиктивный быстрый файл в свой проект и повторно запустите сборку.
Вы второй, кто предлагаете такое решение :). Как я уже сказал в комментариях к описанию моего вопроса, мне нужно решение без пустых Swift-файлов.
Очевидно, для проектов с чистой целью-c вам нужно будет добавить этот $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) в пути поиска библиотеки вашей цели. Это сработало для меня, когда я включил библиотеку, написанную быстро, в проект в objective-c
Можете ли вы привести нам пример того, как мы можем добавить, поскольку я пытаюсь, но я на самом деле не работаю для меня, может быть, нацелен на размещение его не в том месте
@Nathan Как установить это в podspec, и не нужно добавлять его вручную?
Это сработало отлично! Для всех, кто задается вопросом, как именно это сделать; щелкните свой проект xcode в проводнике файлов -> в разделе Targets выберите цель -> выберите вкладку Build Settings -> найдите Library Search Paths и добавьте $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) в разделы отладки и выпуска.
К сожалению, этот трюк, похоже, перестал работать при использовании Swift 5 с Xcode 10.2 - вероятно, потому, что теперь есть общесистемные библиотеки Swift с iOS 12.2.
Для тех, кто плохо знаком с Xcode, убедитесь, что выбрано «Все» и выделено синим цветом, иначе вы не сможете найти путь поиска в библиотеке.
@megastep так как это исправить?
Попробуйте добавить в путь поиска целевой библиотеки следующее: $ (TOOLCHAIN_DIR) /usr/lib/swift-5.0 / $ (PLATFORM_NAME)
Он компилируется, но затем при запуске приложения произошел сбой: «Для этой копии libswiftCore.dylib требуется версия ОС до 12.2.0». Если вы хотите решить эту проблему, просто добавьте в проект пустой быстрый файл, оставьте его навсегда, и он будет работать. (Проблема возникает из-за того, что вы используете в своем приложении как Objective-C, так и быстрый код)
У меня такие же ошибки при случайной компиляции проекта с помощью снэпшота Swift 5.0, настроенного в настройках Xcode »Компоненты» Toolchain.
Я специально изменил его ... в любом случае я могу скомпилировать его на arm64 (отлично работает на симуляторе)?
Это должно решить проблему
Да, используйте это, если у вас есть проблема со Swift 5 / Xcode 10.2 / Mac OS 10.14.4 / iOS 12.2.2
Невероятный ... Я даже не знаю, что это ДЕЙСТВИТЕЛЬНО сделало, но я попробовал, и это устранило мою проблему. Swift 5 / Xcode 10.2 / Mac OS 10.14.6
Это сработало для меня. MacOS Catalina 10.15.2 XCode 11.3.1 RN 0.61.5
Работает как шарм. Может кто-нибудь объяснить, почему?
Что делать, если у меня уже есть заголовок моста, но проблема не устранена? Я бегаю на MacOS Mojave и XCode 11.3.1
Это работало с чистым проектом Objective-C на Xcode 11.4.1.
Исправьте ту же ошибку ссылки моей цели UITest, которая была создана cocoapods в смешанном модуле Swift и ObjC на Xcode 11.4.1
что, если у вас уже есть файл моста, может кто-нибудь объяснить, пожалуйста
Xcode не запрашивает «Создать заголовок моста», версия Xcode: 12.4
то же самое для меня: Xcode не спрашивает ....
Это сработало для меня на macOS 11.4, Xcode 12.5.1
В моем случае это был проект React-Native после добавления библиотеки Swift Pods. Может быть, сработает только шаг 2:
3) Подтверждаем Create Bridging Header
Куда я положу файл, под pod'ами или проектом?
@lutakyn Я вставил это в проект
Я также обновил свою версию cocoapods до 1.7.5, которая у меня сработала.
Это сработало для меня для моей собственной сборки React => RN 60.5, обновил cocoapods до 1.8.4, затем сделал это и устранил мои проблемы сборки (также очистил папку сборки).
Сработало для меня без последнего шага> перейдите в настройки сборки и установите для параметра Always Embed Swift Standard Libraries значение YES
Не удаляйте фиктивный файл Swift после создания файла моста! Сохраните это или построить не удастся
Шаг Create Bridging Header у меня не появляется. Для меня написано Save File.
@dcangulo, который появляется только в том случае, если ваше имя файла содержит "bridging-header"
Яблочко! Это сработало для меня после добавления зависимости модуля в новый проект, созданный React Native.
Это сработало, спасибо! Мое основное приложение работало нормально, но я создал расширение для общего доступа. Мне нужно было создать дополнительный заголовок моста и всегда вставлять Swift для моего расширения, чтобы оно загружалось правильно (хотя я не использовал Swift).
Для XCode 11 beta 4 Пути поиска в библиотеке должен быть:
$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)
Мне пришлось добавить это к каждому из моих целевых свойств «Пути поиска в библиотеке». Не только основное приложение. Итак, включая мой комплект часов и цели Siri Intents.
Любые цели с кодом Swift должны иметь указанный выше путь для XCode 11.
Обратите внимание: если у вас есть это в Xcode 12, он может испортить вашу сборку.] \
Если вы столкнулись с этой ошибкой при использовании 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? Потому что я пробовал это, и теперь мне больше не нужно постоянно чистить => перестраивать всякий раз, когда я меняю одну строку. Примечание: мне также нужно было установить «Включить битовый код» как «Нет».
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. Любые идеи?
такая же проблема со мной
Ответ @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 вы устанавливаете
Привет, @AftabAmin, спасибо за отрицательный голос ?. Если вы прочтете мой пост, то увидите, что я слежу за документацией в документации lottie RN: github.com/lottie-react-native/lottie-react-native На момент публикации этого сообщения год назад я не совсем уверен в версии, но попробую с последней стабильной версией. Удачи!
Я перепробовал все обновленные версии, но не работает. когда я удаляю эти библиотеки, все работает нормально. несколько месяцев спустя мое приложение было запущено. сегодня я обновлял свое приложение и внезапно получил эту проблему. тоже столкнулся с этим месяц назад, но потом решил.
@AftabAmin Ясно, это очень плохо. сообщите об этом разработчикам Lottie RN, возможно, открыв сквозной выпуск. Могу помочь большему количеству людей, чем ты сам. Жаль, что я больше ничем не могу помочь. Я давно не работал с лотти.
Спасибо брат. отредактируйте свой ответ, и я проголосую за него. наконец-то я исправил эту проблему.
Если у вас возникла проблема после обновления xCode до версии 12 и возникли ошибки
Could not find or use auto-linked library 'swiftWebKit'
и еще два.
Просто добавьте $(SDKROOT)/usr/lib/swift в Настройки сборки> Пути поиска> Пути поиска в библиотеке.
Надеюсь на помощь :)
@SehiiVolynets, используйте курсив (используйте скобки *) для путей.
@maciejwww, что вы подразумеваете под «курсивом» и «скобками со звездочкой»? Какой из них следует использовать?
Я имею в виду политику форматирования на StackOverflow. Использование скобок со звездочкой преобразует текст в курсив: *text* -> текст. Для путей в графическом интерфейсе рекомендуется использовать шрифт курсив или жирный (двойная звездочка: **text**). Однако в этом случае, полагаю, лучше использовать шрифт жирный, чем курсив. Теперь мой комментарий больше не нужен, потому что @Niko отредактировал ваш ответ. Проверьте это и сравните с вашей версией. Краткую информацию о форматировании текста и пример вы можете найти в здесь.
Сработало у меня! Спасибо Xcode 12.5 iOS 14.5
Обновление ответа Алекса:
В моем случае это был проект React-Native после добавления библиотеки Swift Pods. Может быть, сработает только шаг 2:
для 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)
Теперь он работает идеально. Не получил точной проблемы или решения, но он хорошо работает с этим способом.
Я просто добавляю эти три в Настройки сборки> Пути поиска> Пути поиска в библиотеке.
Отдельно каталоги TOOLCHAIN_DIR не работают. Если я добавлю $(SDKROOT)/usr/lib/swift, то заработает только он.
Протестировано в Xcode 12.5, $(SDKROOT)/usr/lib/swift должен быть первым
Xcode 12.5, React Native. Добавление виджета iOS или приложения Apple Watch вызвало ошибки связывания.
Изменение: «Пути поиска в библиотеке» с Swift-5.0 на Swift-5.2
Привет, спасибо за это! Изменение путей поиска в библиотеке с swift-5.0 на swift-5.2 привело к тому, что мое приложение, наконец, было собрано и запущено (оно не имеет ничего общего с приложениями или виджетами для часов).
Я столкнулся с этой проблемой в нашем проекте, и проблема заключалась в том, что в нашем файле проекта xcode были сиротские ссылки на lottie. Открытие этого в текстовом редакторе и удаление их устранило проблему для меня.
Я обнаружил, что это решило мою проблему: stackoverflow.com/a/50495316/2842800