Как связать пользовательский фреймворк с целью UITest в XCode - другой «Библиотека не загружена - @rpath» -issue - PullRequest
0 голосов
/ 05 февраля 2020

Мой проект использует Xcode 11.3.1 и имеет следующую структуру:

MyProject
 - MyProject.xcworkscapce
 - MyFramework 
 - MyApp
   -MyApp (main-target)
   -MyAppUITests (uiTest-target)

MyApp импортирует MyFramework и может быть скомпонован и запущен просто отлично. Чтобы это работало, я добавил MyFramework к главной цели в основные цели Общие сведения / Каркасы и библиотеки .

В моей цели UITest мне нужно получить доступ к некоторым классам (Accessibility-Identifier-Definitions) из MyFramework, поэтому мне нужно как-то импортировать их.

Обе цели создаются, а main - Цель работает без проблем. Я также могу запускать UI-тесты на симуляторе. К сожалению, я вынужден запускать свои тесты на реальных устройствах , и здесь я получаю эту ошибку времени выполнения :

The bundle “MyAppUITests” couldn’t be loaded because it is damaged or missing necessary resources. Try reinstalling the bundle.

(dlopen_preflight(/var/containers/Bundle/Application/E581B3BA-A9A2-4AA3-A1BA-91C57DCD3846/MyAppUITests-Runner.app/PlugIns/MyAppUITests.xctest/FHCommunityUITests): Library not loaded: @rpath/MyFramework.framework/MyFramework

  Referenced from: /var/containers/Bundle/Application/E581B3BA-A9A2-4AA3-A1BA-91C57DCD3846/MyAppUITests-Runner.app/PlugIns/MyAppUITests.xctest/MyAppUITests
  Reason: image not found)

Я довольно новичок в этой инфраструктуре (а также для тестов пользовательского интерфейса), и вот уже два дня я занимаюсь этой проблемой сейчас. Большинство постов о похожих проблемах связаны с неверно указанными подфайлами, но в моем проекте-образце barebone, который я настроил, чтобы не уничтожить мой настоящий проект, я не использую какие-либо модули. Я испробовал, вероятно, все предложенные решения (и почти все комбинации :(), и ни одно из них, похоже, не работает.

Мне потребовалось некоторое время, чтобы выяснить, что в моей uiTest-target фазы сборки Я действительно могу добавить Новый сценарий запуска сценария , и я предполагаю, что мне нужно как-то связать MyFramework здесь. Это правильно? Может ли кто-нибудь помочь мне определить сценарий запуска?

И да, Я пытался очистить свое приложение (и я также удалил производные данные).

Помощь высоко ценится. Спасибо!

1 Ответ

0 голосов
/ 07 февраля 2020

Хорошо, наконец, я понял это. Решение довольно простое, и я не видел никого, кто предлагал бы это. Здесь мы go:

Чтобы использовать пользовательский фреймворк в целевом приложении, просто добавьте его под Frameworks, Libraries, and Embedded Content:

enter image description here

Теперь вы можете получить доступ к MyFramework из основной цели. Я также мог запускать свои ui-тесты с симулятора, но все равно получал ошибку, описанную выше, при выполнении моих ui-тестов с моих реальных устройств.

Чтобы избавиться от The bundle “xxxUITests” couldn’t be loaded because it is damaged or missing necessary resources. Try reinstalling the bundle. -Error, мне пришлось go к моей uiTest-target и связать структуру в моих фазах сборки .

enter image description here

enter image description here

enter image description here

As Назначение выберите Каркасы и выберите каркас, который вы хотите использовать в вашей uiTest-цели.

Теперь вы сможете запускать свой ui-Test с вашего устройства.

...