Как связать пользовательскую структуру с целью UITest в Xcode — другая библиотека не загружена — @rpath-issue

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

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

MyApp импортирует MyFramework, и его можно собрать и запустить. Чтобы это работало, я добавил MyFramework в main-target в main-targets General/Frameworks and Libraries.

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

Обе цели строятся, и основная цель работает без проблем. Я также могу запускать 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)

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

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

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

Помощь высоко ценится. Благодарю вас!


person nayooti    schedule 05.02.2020    source источник


Ответы (1)


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

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

введите описание изображения здесь

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

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

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

В качестве Destination выберите Frameworks и выберите Framework, который вы хотите использовать в своей цели uiTest.

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

person nayooti    schedule 06.02.2020
comment
Этот ответ - скрытая жемчужина! Благодарю вас! - person Abdurrahman; 21.10.2020
comment
Да, и для меня этот ответ спас мой день. Спасибо незнакомец!!! - person Torongo; 18.03.2021