Avatar ·

Ошибка dyld: Library not loaded: @rpath/libswiftCore.dylib при запуске iOS приложения

Всем привет! Я новичок в Swift и Xcode, и столкнулся с непонятной ошибкой. Создал простой проект для iOS (Single View App) на Swift, добавил пару UI элементов (UILabel, UIButton) и написал простой код для обработки нажатия кнопки. Всё компилируется без ошибок, но когда я пытаюсь запустить приложение на симуляторе iPhone 14 Pro (iOS 16.4), оно крашится сразу после запуска с сообщением в консоли: ``` dyld: Library not loaded: @rpath/libswiftCore.dylib Referenced from: /Users/username/Library/Developer/CoreSimulator/Devices/.../App.app/App Reason: no suitable image found. Did find: /Users/username/Library/Developer/Xcode/DerivedData/.../Build/Products/Debug-iphonesimulator/libswiftCore.dylib: mach-o, but wrong architecture ``` Я уже пробовал: 1. Очистить DerivedData (Product → Clean Build Folder) 2. Перезапустить Xcode и симулятор 3. Проверить, что целевая платформа выбрана правильно (iOS 16.4) 4. Убедиться, что Swift включен в Build Settings (Always Embed Swift Standard Libraries = Yes) Но ошибка всё равно появляется. Вот мой простой код в ViewController: ```swift import UIKit class ViewController: UIViewController { let label = UILabel() let button = UIButton(type: .system) override func viewDidLoad() { super.viewDidLoad() setupUI() } func setupUI() { label.text = "Hello, World!" label.translatesAutoresizingMaskIntoConstraints = false button.setTitle("Нажми меня", for: .normal) button.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside) button.translatesAutoresizingMaskIntoConstraints = false view.addSubview(label) view.addSubview(button) NSLayoutConstraint.activate([ label.centerXAnchor.constraint(equalTo: view.centerXAnchor), label.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant: -20), button.centerXAnchor.constraint(equalTo: view.centerXAnchor), button.topAnchor.constraint(equalTo: label.bottomAnchor, constant: 20) ]) } @objc func buttonTapped() { label.text = "Нажата!" } } ``` Почему возникает эта ошибка и как её исправить? Заранее спасибо за помощь! <<>>

Причина ошибки

Ошибка dyld: Library not loaded: @rpath/libswiftCore.dylib возникает, когда динамический линковщик (dyld) не может найти библиотеку Swift runtime (libswiftCore.dylib) во время запуска приложения. В вашем случае указано wrong architecture — это ключевая подсказка. Проблема в несовместимости архитектуры бинарного файла библиотеки с архитектурой симулятора, на котором вы запускаете приложение.

Современные Mac с процессорами Apple Silicon (M1, M2, M3) используют архитектуру arm64 как для реальных устройств, так и для симуляторов. Однако более старые Mac с процессорами Intel используют x86_64 для симуляторов. Если вы используете Mac с Apple Silicon, но Xcode пытается загрузить библиотеку, собранную для x86_64, возникает конфликт. Чаще всего это происходит, когда:

  • В Build Settings неправильно настроены архитектуры (ARCHS)
  • Используется устаревшая версия Xcode или CocoaPods
  • В проекте есть зависимости, собранные только для одной архитектуры

Решение 1: Проверка настроек архитектур в Xcode

Самый простой способ — убедиться, что ваш проект поддерживает обе архитектуры. Сделайте следующее:

  1. Выберите ваш проект в навигаторе (синяя иконка сверху)
  2. Перейдите на вкладку Build Settings
  3. Найдите параметр Architectures (или ARCHS)
  4. Установите значение Standard Architectures (arm64, x86_64) для Debug и Release конфигураций
  5. Проверьте параметр Excluded Architectures — он должен быть пустым или содержать arm64 только для симулятора, если вы используете Rosetta

Также убедитесь, что в Build Settings параметр Build Active Architecture Only установлен в Yes для Debug (это ускоряет сборку) и No для Release.

Решение 2: Очистка DerivedData и пересборка

Иногда остаются кэшированные бинарные файлы. Выполните:

1. Product → Clean Build Folder (или Shift+Cmd+K)
2. Закройте Xcode
3. В терминале выполните: rm -rf ~/Library/Developer/Xcode/DerivedData/*
4. Откройте Xcode и пересоберите проект (Cmd+B)

Решение 3: Проверка настроек симулятора

Убедитесь, что вы используете правильный симулятор:

  • Для Mac с Apple Silicon: выберите симулятор iPhone с архитектурой arm64 (например, iPhone 14 Pro). Не используйте симуляторы, помеченные как "Rosetta"
  • Для Mac с Intel: выберите любой симулятор — они все работают на x86_64

Если вы на Apple Silicon, проверьте, что Xcode запущен нативно (не через Rosetta). Откройте Finder → Applications, найдите Xcode, нажмите Get Info и убедитесь, что галочка Open using Rosetta не стоит.

Решение 4: Использование CocoaPods или SPM

Если в проекте используются сторонние библиотеки, добавьте в Podfile (для CocoaPods):

post_install do |installer|
  installer.pods_project.build_configurations.each do |config|
    config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64'
  end
end

Для Swift Package Manager убедитесь, что вы используете последнюю версию Xcode (14.3+), где эта проблема исправлена.

Решение 5: Переключение на физическое устройство

Как временное решение — запустите приложение на реальном iPhone или iPad. Ошибка wrong architecture характерна только для симуляторов, на устройстве всё должно работать.

После применения этих шагов перезапустите симулятор (Simulator → Reset Content and Settings) и соберите проект заново. Ошибка должна исчезнуть.

<<>>

Альтернативный подход: Использование Rosetta 2 для симулятора

Если вы работаете на Mac с Apple Silicon (M1/M2/M3) и не хотите менять настройки проекта, можно запустить Xcode и симулятор в режиме эмуляции Intel через Rosetta 2. Это решает проблему несовместимости архитектур, но снижает производительность.

Шаги:

  1. Закройте Xcode и симулятор
  2. В Finder найдите Xcode в папке Applications
  3. Нажмите правой кнопкой мыши → Get Info (или Cmd+I)
  4. Установите галочку Open using Rosetta
  5. Запустите Xcode снова
  6. В меню выберите симулятор, например, iPhone 14 Pro (он будет работать в режиме x86_64)

После этого ошибка wrong architecture исчезнет, так как все библиотеки будут загружаться в архитектуре Intel. Однако помните, что это временное решение — для продакшена лучше настроить проект правильно, как описано в первом ответе.

Также проверьте, что в Build Settings параметр Always Embed Swift Standard Libraries установлен в Yes. Иногда Xcode не внедряет Swift runtime автоматически, и это вызывает подобные ошибки.