Сбой тестирования платформы macOS Swift
У меня есть фреймворк, написанный на obj-c и swift.
Теперь я пытаюсь запустить связанную цель модульного теста, но получаю следующую ошибку:
2014-07-10 07:45:54.064 xctest[4908:303] The test bundle at /Users/steve/Temporary/Build/Products/Debug/SOGraphDB-Mac Tests.xctest could not be loaded because an unanticipated error occurred: Error Domain=NSCocoaErrorDomain Code=3587 "The bundle “SOGraphDB-Mac Tests” couldn’t be loaded because it is damaged or missing necessary resources." (dlopen_preflight(/Users/steve/Temporary/Build/Products/Debug/SOGraphDB-Mac Tests.xctest/Contents/MacOS/SOGraphDB-Mac Tests): Library not loaded: @rpath/libswiftAppKit.dylib
Referenced from: /Users/steve/Temporary/Build/Products/Debug/SOGraphDB.framework/Versions/A/SOGraphDB
Reason: image not found) UserInfo=0x10011c640 {NSLocalizedFailureReason=The bundle is damaged or missing necessary resources., NSLocalizedRecoverySuggestion=Try reinstalling the bundle., NSFilePath=/Users/steve/Temporary/Build/Products/Debug/SOGraphDB-Mac Tests.xctest/Contents/MacOS/SOGraphDB-Mac Tests, NSDebugDescription=dlopen_preflight(/Users/steve/Temporary/Build/Products/Debug/SOGraphDB-Mac Tests.xctest/Contents/MacOS/SOGraphDB-Mac Tests): Library not loaded: @rpath/libswiftAppKit.dylib
Referenced from: /Users/steve/Temporary/Build/Products/Debug/SOGraphDB.framework/Versions/A/SOGraphDB
Reason: image not found, NSBundlePath=/Users/steve/Temporary/Build/Products/Debug/SOGraphDB-Mac Tests.xctest, NSLocalizedDescription=The bundle “SOGraphDB-Mac Tests” couldn’t be loaded because it is damaged or missing necessary resources.}
Есть идеи, какова может быть первопричина?
Ошибка, по-видимому, связана с "библиотека не загружена: @rpath/libswiftAppKit.dylib "
Оба (фреймворк и тестовый пакет) компилируются без каких-либо ошибок или предупреждений (в Beta2)
6 ответов:
У меня была та же проблема.
В итоге скопировал libswiftAppKit.dylib из каталога приложений Xcode (я использую beta 3), в каталог, на который я мог бы ссылаться (не часть пакета приложений), а затем добавить библиотеку в параметр "связать двоичный файл с библиотеками" для тестового пакета. Затем мои тесты начали работать.
К вашему сведению, путь для dylib был на '/Приложения / Xcode6-Beta3.app / Contents / Developer/Toolchains / XcodeDefault.xctoolchain / usr / lib / swift/macosx / libswiftAppKit.dylib '
Вероятно, не очень хорошее окончательное решение, но оно работает для промежуточного периода.
У меня была аналогичная проблема, хотя мой тестовый объект iOS, связанный с платформой Swift, не смог работать на Xcode 6 GM. Тестовый объект был успешно запущен на ранней бета-версии Xcode 6, но окончательная версия сообщила об ошибке выполнения:
Library not loaded: @rpath/libswiftCore.dylib
Я заметил, что более новый проект не имел сбоя, поэтому я сравнил параметры сборки и тестовый код. Я смог решить эту проблему с помощью трех шагов:
Тестовой цели требуется " встроенный целевой объект содержит Swift-код " установка на да. Это указывает компоновщику, чтобы добавить SWIFT среды выполнения библиотек в исполняемый файл.
Тестовой цели требуется явное значение для параметра построения "Runpath Search Paths". Это указывает загрузчику, где найти библиотеки среды выполнения Swift. Я скопировал следующую настройку из новой тестовой цели:
LD_RUNPATH_SEARCH_PATHS = $(inherited) @executable_path/../Frameworks @loader_path/../Frameworks
Тестовые случаи должны явно импортировать все модули, используемые связанной платформой. В моем проекте используется фреймворк UIKit, но тестовые случаи использовали только мой фреймворк. Когда я добавил явный
import UIKit
к тестовым случаям, проблема связи исчезла.
Поскольку я постоянно сталкиваюсь с этой проблемой всякий раз, когда я путаюсь с настройками сборки, вот самый чистый ответ, который я могу предоставить по состоянию на Xcode 8b5:
Если модульные тесты не выполняются на iOS , Убедитесь, что у вас есть:
Runpath Поиск Путей:
@loader_path/Frameworks
Если модульные тесты не выполняются на macOS , Убедитесь, что у вас есть:
Runpath Поиск Путей:
@loader_path/../Frameworks
Как
Наконец, мне не нужны настройкиLD_RUNPATH_SEARCH_PATHS
в pbxproj файл. Вы также можете добавить$(inherited)
чтобы убедиться, что пути для всего проекта также добавлены, но они, вероятно, пусты.executable_path/...
, для меня не имеет значения, существуют они или нет для модульных тестов.
Мое решение состояло в том, чтобы добавить один файл к моей тестовой цели,
AppKitTests.swift
(илиAppKitSpec.swift
в моем случае), и все, что содержит файл:// While I don't know why, The.framework is built linked to libswiftAppKit. // Frameworks do not embed the Swift libraries themselves, it's up to the host // app to include the necessary libraries. So here we are, including AppKit on // behalf of The.framework so that the tests can run. import AppKit
О, я также добавил AppKit в набор фреймворков тестовой цели.
Это пришло мне в голову в бета-4, и оказалось, что я сделал это с собой, не осознавая этого.
У меня был рамочный проект под названием Fnord. Моя цель FnordTests содержала несколько классов модульных тестов, которые имелиimport Fnord
в верхней части каждого файла. По какой-то причине Xcode жаловался на этот импорт, и поэтому я прокомментировал их. Именно тогда я начал получать те же симптомы при попытке выполнить мои модульные тесты.Я заметил, что настройки для моих тестов FnordTests цель была такова, что цель была бы связана с
Поэтому я положил их обратно, и все вернулось в норму. Любопытно, что Xcode больше не показывал эти операторы импорта как проблемные, но это бета-версия, поэтому я могу простить это. Я надеюсь, что это кому-то поможет.Fnord.framework
, и я понял, что она не могла бы сделать это с вышеупомянутымиimport Fnord
утверждениями diked-out.