ld: 未找到用于体系结构的 Stripe 框架 x86_64
ld: framework not found Stripe for architecture x86_64
我有一个 iOS 组件,它依赖于 Stripe iOS SDK 项目 A。我在 Xcode 的项目 A 中包含了 Stripe SDK,它编译得很好。
但是,我正在 Xcode 中构建依赖于此组件的另一个项目,项目 B。我将项目 A 添加到项目 B 的库中。项目A依赖项目B但不直接依赖Stripe SDK
现在,每当我尝试编译项目 B 时,我都会收到此错误:
ld: framework not found Stripe for architecture x86_64
这一行(在项目 A 内)似乎触发了错误:
#import <Stripe/Stripe.h>
Xcode 很容易找到 Stripe.h
。我也尝试将 Stripe SDK 直接添加到项目 B。我已经对所有目标的构建阶段 -> Link Binary With Libraries 部分进行了两次和三次检查(列出了 Stripe.framework
)。
我手动添加了 Stripe 框架,所以我也尝试用 Cocoapods 添加它,但这也没有用。
请帮忙!
这是项目 B ("example") 的项目结构,其下方是项目 A ("RCTFBLogin")。
这是完整的错误:
我正在使用 Xcode 7.2 和最新版本的 Stripe SDK (6.0.0)。相同的 Stripe 框架代码在另一个项目中工作正常。
谢谢。
更新:我将“$(SRCROOT)/../..
”(因为项目 B 在项目 A 的深处有两个文件夹)添加到构建设置下的 "Framework Search Paths" -> "Search Paths" 项目 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
我必须做两件事才能让它工作:
将“$(SRCROOT)/../..”(因为项目 B 在项目 A 的深处有两个文件夹)添加到构建设置下的 "Framework Search Paths" -> "Search Paths" 项目 B 目标。
也将 Stripe SDK 添加到项目 B 的框架中。第二步特别让我吃惊,因为项目 B 并不直接依赖于 Stripe。
我在 运行 我的测试目标时看到另一个框架有同样的问题。我必须将框架添加到我的 测试目标 (不仅是我的正常目标)下的 Build Phases > Link Binary With Libraries
部分。
Carthage 有更多关于我看到的问题的信息:https://github.com/carthage/carthage#adding-frameworks-to-unit-tests-or-a-framework
当您 运行 您的测试用例时,您是否 运行 处理过这个问题?
这就是我的播客文件的样子:
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
然后我将这个添加到 podfile:
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
所以一个可能的原因是您没有在您的 podfile 中正确添加它们,只需确保将框架添加到必要的目标中即可。
在将一些依赖项从 pods 切换到 carthage 时注意到这个问题。类似于 Honey 的回答,我能够通过修改 podfile 来解决这个错误。
原来我只需要添加测试目标。然后 运行 'pod install',它会 link 你的测试目标到你的 pods.
生成的框架
target 'Project' do
use_frameworks!
//pods here normally
target 'ProjectTests' do
//nothing in here
end
end
我有一个 iOS 组件,它依赖于 Stripe iOS SDK 项目 A。我在 Xcode 的项目 A 中包含了 Stripe SDK,它编译得很好。
但是,我正在 Xcode 中构建依赖于此组件的另一个项目,项目 B。我将项目 A 添加到项目 B 的库中。项目A依赖项目B但不直接依赖Stripe SDK
现在,每当我尝试编译项目 B 时,我都会收到此错误:
ld: framework not found Stripe for architecture x86_64
这一行(在项目 A 内)似乎触发了错误:
#import <Stripe/Stripe.h>
Xcode 很容易找到 Stripe.h
。我也尝试将 Stripe SDK 直接添加到项目 B。我已经对所有目标的构建阶段 -> Link Binary With Libraries 部分进行了两次和三次检查(列出了 Stripe.framework
)。
我手动添加了 Stripe 框架,所以我也尝试用 Cocoapods 添加它,但这也没有用。
请帮忙!
这是项目 B ("example") 的项目结构,其下方是项目 A ("RCTFBLogin")。
这是完整的错误:
我正在使用 Xcode 7.2 和最新版本的 Stripe SDK (6.0.0)。相同的 Stripe 框架代码在另一个项目中工作正常。
谢谢。
更新:我将“$(SRCROOT)/../..
”(因为项目 B 在项目 A 的深处有两个文件夹)添加到构建设置下的 "Framework Search Paths" -> "Search Paths" 项目 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
我必须做两件事才能让它工作:
将“$(SRCROOT)/../..”(因为项目 B 在项目 A 的深处有两个文件夹)添加到构建设置下的 "Framework Search Paths" -> "Search Paths" 项目 B 目标。
也将 Stripe SDK 添加到项目 B 的框架中。第二步特别让我吃惊,因为项目 B 并不直接依赖于 Stripe。
我在 运行 我的测试目标时看到另一个框架有同样的问题。我必须将框架添加到我的 测试目标 (不仅是我的正常目标)下的 Build Phases > Link Binary With Libraries
部分。
Carthage 有更多关于我看到的问题的信息:https://github.com/carthage/carthage#adding-frameworks-to-unit-tests-or-a-framework
当您 运行 您的测试用例时,您是否 运行 处理过这个问题?
这就是我的播客文件的样子:
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
然后我将这个添加到 podfile:
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
所以一个可能的原因是您没有在您的 podfile 中正确添加它们,只需确保将框架添加到必要的目标中即可。
在将一些依赖项从 pods 切换到 carthage 时注意到这个问题。类似于 Honey 的回答,我能够通过修改 podfile 来解决这个错误。
原来我只需要添加测试目标。然后 运行 'pod install',它会 link 你的测试目标到你的 pods.
生成的框架target 'Project' do
use_frameworks!
//pods here normally
target 'ProjectTests' do
//nothing in here
end
end