Ld: framework не найден Stripe для архитектуры x86_64

У меня есть компонент iOS, который опирается на Stripe iOS SDK, проект A. Я включил Stripe SDK в Project A в Xcode, и он компилируется.

Однако я создаю еще один проект в Xcode, который опирается на этот компонент, Project B. Я добавил библиотеки Project A в Project B. Проект A опирается на проект B, но не полагается непосредственно на SDP Stripe.

Теперь, когда я пытаюсь скомпилировать Project B, я получаю эту ошибку:

ld: framework not found Stripe for architecture x86_64

Эта строка (внутри Project A), похоже, вызывает ошибку:

#import <Stripe/Stripe.h>

У Xcode нет проблем с поиском Stripe.h. Я попытался добавить Stripe SDK непосредственно в Project B. У меня есть двойная и тройная проверка раздела "Построение фаз → Ссылка на двоичные файлы с библиотеками" для всех целей (Stripe.framework указан).

Я добавил структуру Stripe вручную, поэтому я также попытался добавить ее с помощью Cocoapods, но это также не сработало.

Пожалуйста, помогите!

Здесь представлена ​​структура проекта для проекта B ( "пример" ) с проектом "A" ( "RCTFBLogin" ) ниже.

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

Здесь полная ошибка:

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

Я использую Xcode 7.2 и самую последнюю версию Stripe SDK (6.0.0). Один и тот же код рамки Stripe отлично работает в другом проекте.

Спасибо.

Обновление: я добавил "$(SRCROOT)/../.." (так как Project B проживает две папки глубоко внутри Проекта A) до "Путей поисковой системы" в разделе "Настройки построения" → "Пути поиска" для целевого объекта Project B, и он начал успешно компилировать. Однако теперь я получаю эту ошибку при запуске:

ld: warning: Auto-Linking supplied '/Users/rettig/wip/react-native-facebook-login.2/Stripe.framework/Stripe', framework linker option at /Users/rettig/wip/react-native-facebook-login.2/Stripe.framework/Stripe is not a dylib
Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_Stripe", referenced from:
      objc-class-ref in libRCTFBLogin.a(RCTFBLogin.o)
ld: symbol(s) not found for architecture x86_64

Ответы

Ответ 1

Мне пришлось сделать две вещи, чтобы заставить это работать:

  • Добавьте "$ (SRCROOT)/../.." (так как Project B проживает две папки глубоко внутри Проекта A) до "Пути поиска в каркасе" в разделе "Настройки построения" → "Пути поиска" для проекта B мишени.

  • Добавьте Stripe SDK в рамки проекта B. Этот второй шаг, в частности, удивил меня, потому что Project B не полагается непосредственно на Stripe.

Ответ 2

Я видел эту проблему с другой структурой во время запуска моей тестовой цели. Я должен был добавить фреймворк к моей тестовой цели (не только к моей обычной цели) в разделе Build Phases > Link Binary With Libraries.

У Карфагена больше информации о проблеме, которую я видел: https://github.com/carthage/carthage#adding-frameworks-to-unit-tests-or-a-framework

Ответ 3

Вы сталкивались с этой проблемой, когда запускали свои тесты?

Вот так выглядит мой подфайл:

def shared_pods
    pod ‘GoogleMaps', '~> 1.13.0'
    pod ‘SwiftyJSON', '~> 2.3.2'
    pod ‘Alamofire', '~> 3.2.1'
    pod ‘MGSwipeTableCell
end

target 'projectName' do
   shared_pods
end

Затем я добавил это в подфайл:

target ‘ProjectTests do
    pod ‘Nimble, ‘~> 4.0.0
    pod Quick
end

Что мне также нужно было сделать:

target ‘ProjectTests do
    shared_pods // I needed to add this line as well. Since this line included the needed 'MGSwipeTableCell' framework 
    pod ‘Nimble, ‘~> 4.0.0
    pod Quick
end

Поэтому возможной причиной может быть то, что в вашем подфайле вы не добавили их правильно, просто убедитесь, что фреймворк добавлен в нужные цели.

Ответ 4

Заметила эту проблему при переключении некоторых зависимостей от контейнеров к кассе. Подобно Honey answer, мне удалось обойти эту ошибку, изменяя подканал.

Оказывается, все, что мне нужно было добавить, было тестовой мишенью. Затем запустите "pod install", и он свяжет вашу тестовую цель с вашими фреймворками, созданными вашими контейнерами.

target 'Project' do
  use_frameworks!

  //pods here normally

  target 'ProjectTests' do
   //nothing in here
  end
end