Ошибка dyld: Library not loaded: @rpath/libswiftCore.dylib при запуске iOS приложения
Причина ошибки
Ошибка dyld: Library not loaded: @rpath/libswiftCore.dylib возникает, когда динамический линковщик (dyld) не может найти или загрузить стандартную библиотеку Swift во время запуска приложения. Это часто случается при использовании CocoaPods с флагом use_frameworks!, когда поды собираются как динамические фреймворки, а пути поиска библиотек Swift настроены некорректно.
Основное решение — проверка настроек Always Embed Swift Standard Libraries
Несмотря на то что вы установили Always Embed Swift Standard Libraries = Yes для основного таргета, CocoaPods может переопределить эту настройку для своих таргетов. Выполните следующие шаги:
- Откройте проект в Xcode и выберите корневой элемент в навигаторе проектов.
- Выберите ваш основной таргет (MyApp) → вкладка Build Settings → найдите Always Embed Swift Standard Libraries.
- Убедитесь, что для Debug и Release стоит Yes.
- Нажмите на кнопку + слева от настройки и выберите Add User-Defined Setting.
- Введите имя
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESи установите значение YES для всех конфигураций.
Если это не помогло, проверьте настройки для Pods-таргета:
- В том же окне выберите Pods → Pods-MyApp (или Pods-MyApp если у вас несколько таргетов).
- Найдите Always Embed Swift Standard Libraries и установите Yes.
Альтернативное решение — проверка Runpath Search Paths
Иногда проблема в том, что @rpath не указывает на правильную директорию. Проверьте настройку Runpath Search Paths в вашем основном таргете:
@executable_path/Frameworks
@loader_path/Frameworks
Добавьте эти пути, если их нет. Для Pods-таргета аналогично.
Решение для CocoaPods — использование static_framework
Если вы не используете динамические фреймворки от сторонних библиотек, можно переключить поды на статическую линковку. В Podfile замените:
use_frameworks!
на
use_frameworks! :linkage => :static
Или для отдельных подов:
pod 'Alamofire', '~> 5.6', :linkage => :static
После этого выполните pod install и перезапустите Xcode.
Чистка кэша и пересборка
Иногда помогает полная чистка:
- Закройте Xcode.
- Удалите папки
DerivedData(~/Library/Developer/Xcode/DerivedData). - Удалите папку
Podsи файлPodfile.lock. - Выполните
pod deintegrateи затемpod install. - Откройте
.xcworkspaceи попробуйте запустить.
Проверка совместимости версий
Убедитесь, что версии Alamofire и SwiftyJSON совместимы с вашей версией Swift и iOS. Например, Alamofire 5.6 требует Swift 5.0+ и iOS 13+. Если ваш проект настроен на iOS 15.0 — это должно работать, но проверьте в Podfile:
platform :ios, '15.0'
Иногда ошибка возникает из-за несоответствия deployment target у подов — они могут быть настроены на более старую iOS.
После всех изменений обязательно делайте Clean Build Folder (Product → Clean Build Folder, или ⌘⇧K) и перезапускайте симулятор.
<<Альтернативный подход — использование SPM вместо CocoaPods
Если вы только начинаете и проблема с CocoaPods вызывает много головной боли, рекомендую перейти на Swift Package Manager (SPM), который встроен в Xcode начиная с версии 11. SPM реже вызывает проблемы с линковкой Swift библиотек, так как лучше интегрирован в экосистему.
Как перейти:
- Удалите CocoaPods:
pod deintegrateи удалите файлы Pods, Podfile, Podfile.lock и .xcworkspace. - Откройте .xcodeproj в Xcode.
- Перейдите в File → Add Packages…
- Вставьте URL репозитория Alamofire:
https://github.com/Alamofire/Alamofire.gitи выберите версию. - Аналогично для SwiftyJSON:
https://github.com/SwiftyJSON/SwiftyJSON.git. - Нажмите Add Package и выберите ваш основной таргет.
После этого ошибка libswiftCore.dylib обычно исчезает, так как SPM автоматически настраивает все пути и флаги линковки. Единственный минус — некоторые старые библиотеки могут не поддерживать SPM, но для Alamofire и SwiftyJSON поддержка есть.
Если вы не хотите полностью отказываться от CocoaPods, можно попробовать добавить в Podfile строку:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'] = 'YES'
end
end
end
Этот хук принудительно устанавливает нужную настройку для всех Pods-таргетов.
Ответов пока нет.
Войдите чтобы оставить ответ