【问题标题】:ld: framework not found Stripe for architecture x86_64ld:未找到框架架构 x86_64 的条纹
【发布时间】:2016-04-20 07:39:47
【问题描述】:

我有一个 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 中。我已经对所有目标的 Build Phases -> Link Binary With Libraries 部分进行了两次和三次检查(列出了Stripe.framework)。

我手动添加了 Stripe 框架,所以我也尝试使用 Cocoapods 来添加它,但这也没有用。

请帮忙!

这是项目 B(“示例”)的项目结构,下面是项目 A(“RCTFBLogin”)。

这是完整的错误:

我使用的是 Xcode 7.2 和最新版本的 Stripe SDK (6.0.0)。相同的 Stripe 框架代码在另一个项目中运行良好。

谢谢。

更新:我将“$(SRCROOT)/../..”(因为项目 B 位于项目 A 深处的两个文件夹中)添加到项目 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

【问题讨论】:

    标签: ios objective-c xcode xcode7 stripe-payments


    【解决方案1】:

    在运行我的测试目标时,我在另一个框架中看到了同样的问题。我必须在Build Phases > Link Binary With Libraries 部分下将框架添加到我的测试目标(不仅仅是我的正常目标)。

    迦太基有更多关于我看到的问题的信息:https://github.com/carthage/carthage#adding-frameworks-to-unit-tests-or-a-framework

    【讨论】:

      【解决方案2】:

      您在运行测试用例时遇到过这个问题吗?

      这就是我的 podfile 的样子:

      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 中您没有正确添加它们,只需确保将框架添加到必要的目标中即可。

      【讨论】:

      • 男人一小时我正在寻找解决方案。我删除了所有派生数据,多次清理我的项目并尝试手动链接我的 testtarget。为我工作 - 谢谢!
      【解决方案3】:

      我必须做两件事才能让它工作:

      1. 将“$(SRCROOT)/../..”(因为项目 B 位于项目 A 深处的两个文件夹中)添加到项目 B 的构建设置 ->“搜索路径”下的“框架搜索路径”目标。

      2. 也将 Stripe SDK 添加到项目 B 的框架中。这第二步让我特别惊讶,因为项目 B 不直接依赖于 Stripe。

      【讨论】:

        【解决方案4】:

        在将一些依赖项从 pod 切换到 carthage 时注意到了这个问题。与 Honey 的回答类似,我能够解决修改 podfile 的错误。

        原来我只需要添加测试目标。然后运行“pod install”,它会将您的测试目标链接到您的 pod 生成的框架。

        target 'Project' do
          use_frameworks!
        
          //pods here normally
        
          target 'ProjectTests' do
           //nothing in here
          end
        end
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-03-29
          • 1970-01-01
          • 2013-11-18
          • 2020-06-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-09
          相关资源
          最近更新 更多