20

我正在升级我的项目以使用 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)

(当然架构不同)

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

有什么建议么?

4

3 回答 3

70

以下对我有用:

在构建设置中,不要覆盖“其他链接器标志”。如果它是粗体,选择它并按退格键,它应该会恢复到正常状态。如果未修复,请删除所有标志,删除并重新安装 Pod,这应该可以修复它。

于 2013-10-20T12:20:16.750 回答
22

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

  1. 在项目中打开Pods-TestFlightSDK目标Pods.xcodeproj
  2. 打开Build Phases标签
  3. 添加(通过“添加其他...”)libTestFlight.aLink Binary With Libraries下拉列表

libTestFlight.a可以在您的[$SRCROOT]/Pods/TestFlightsSDK文件夹中找到。

在此处输入图像描述

对 Flurry 做同样的事情,你就可以开始了!

2014 年 5 月 1 日更新

看起来“缺少库集成”是使用--no-integrate标志(例如,pod install --no-integrate)的症状。

为了让生活更轻松,我编写了一个脚本来在运行后自动添加库pod (update|install) --no-integrate

根据需要进行调整并将其添加到您的底部Podfile

# 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
于 2013-10-29T20:16:33.507 回答
1

我发现这可能是这个问题的几个原因:

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

希望这会有所帮助。

于 2013-10-15T16:14:15.747 回答