Xcode 椰子荚-Flurry&;TestFlight-架构的未定义符号

Xcode 椰子荚-Flurry&;TestFlight-架构的未定义符号,xcode,linker-errors,flurry,testflight,cocoapods,Xcode,Linker Errors,Flurry,Testflight,Cocoapods,我正在升级我的项目以使用Cocoapods,当我尝试为iOS设备或模拟器构建项目时,我得到: Undefined symbols for architecture armv7: "_OBJC_CLASS_$_TestFlight", referenced from: objc-class-ref in PhotoPreviewViewController.o "_OBJC_CLASS_$_Flurry", referenced from: objc-class-r

我正在升级我的项目以使用Cocoapods,当我尝试为iOS设备或模拟器构建项目时,我得到:

Undefined symbols for architecture armv7:
  "_OBJC_CLASS_$_TestFlight", referenced from:
      objc-class-ref in PhotoPreviewViewController.o
  "_OBJC_CLASS_$_Flurry", referenced from:
      objc-class-ref in MyAppDelegate.o
      objc-class-ref in InitialSetupViewController.o
      objc-class-ref in InitialDownloadViewController.o
      objc-class-ref in HistoryViewController.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
(当然,架构不同)

在“linkbinary With Libraries”下,
libPods.a
是黑色的,所以我认为没有任何问题。它还为它们两个都做了自动完成,所以我不确定为什么它在编译时找不到它们


有什么建议吗?

我发现这个问题有几个原因:

  • “将二进制文件链接到库”中未包含libPod.a(请尝试删除引用并再次添加)
  • 编译器找不到库。奇怪的行为,尝试在“库搜索路径”中使用${PODS_ROOT}写入库的路径。($(PODS_ROOT)/TestFlightSDK示例)
  • 编译器找不到头。尝试在“标头搜索路径”中使用${PODS_ROOT}写入标头的路径

  • 希望这对我有帮助。

    以下几点对我有用:


    在生成设置中,不要覆盖“其他链接器标志”。如果它是粗体,选择它并按backspace,它应该返回到正常状态。如果未修复,请删除所有标志,移除并重新安装POD,这应该会修复它。

    Cocoapods由于某些原因,在TestFlight目标中不包括
    libTestFlight.a
    。因此,要解决此问题,每次运行
    pod install
    ,您必须:

  • Pods.xcodeproj
    项目中打开
    Pods TestFlightSDK
    目标
  • 打开
    构建阶段
    选项卡
  • 添加(通过“添加其他…”)
    libTestFlight.a
    linkbinary With Libraries
    下拉列表
  • libTestFlight.a
    可以在您的
    [$SRCROOT]/Pods/TestFlightsSDK
    文件夹中找到

    对Flurry也这样做,你就可以开始了

    2014年5月1日更新

    “缺少库集成”似乎是使用
    --no integrate
    标志的症状(例如,
    pod安装--no integrate

    为了让生活更轻松,我编写了一个脚本,在运行
    pod(更新|安装)-无集成后自动添加库

    根据需要进行调整,并将其添加到
    pod文件的底部

    # Use post_install to automatically include required libraries
    post_install do |installer_representation|
        installer_representation.project.targets.each do |target|
            if target.name == 'Pods-TestFlightSDK'
                libFile = installer_representation.project.new_file('TestFlightSDK/libTestFlight.a')
            end
    
            if target.name == 'Pods-Brightcove-Player-SDK'
                libFile = installer_representation.project.new_file('Brightcove-Player-SDK/Library/libBCOVPlayerSDK.a')
            end
    
            unless libFile.nil?
                puts "    - Adding %s to %s Frameworks Build Phases" % [libFile, target.name]
                target.frameworks_build_phase.add_file_reference(libFile)
            end
        end
    end
    

    听起来你的标题搜索路径有问题。仔细检查您的目标是否与Pods.xcconfig中的相同。我使用的是
    $(继承的)
    ,因此它也会提取所有Pods.xcconfig搜索路径。我也遇到了这个问题,只是从Cocoapods中删除了Testflight、Flurry和Parse。不值得头痛去工作。我也是这么做的。但愿我能把它放在椰子荚里。有个解决办法!请参阅我的答案,以解决问题,同时保持Cocoapod支持。这似乎对Flurry不起作用。我仍然得到未定义的符号,也许Flurry是另一个问题。请发布一个新的问题和您的具体情况。这个解决方案对我来说非常有用。我建议@s73v3r创建示例项目,并只集成flurry和add-libFlurry。我没有集成testflight库。就是这样!非常感谢!!还要确保检查“库搜索路径”生成设置。这对我来说是个问题,这很有效。从来都不知道可以点击backspace删除覆盖。起初,我只是删除了那里的“-ObjC”,它是空白的。显然,“空白”并不意味着“默认”,这并不能真正解释为什么这会解决问题。可能存在编辑或添加其他链接器标志的正当理由。至少在TestFlight的情况下,这可能会解决问题的原因是它确保了-lTestFlight是链接器标志的一部分。如果您需要自定义链接器标志,请确保TestFlight中有此标志。这永远是我自己愚蠢的提醒。非常感谢。