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