【问题标题】:AFNetworking with cocoapods link error when using Xcode 6使用 Xcode 6 时 AFNetworking 与 cocoapods 链接错误
【发布时间】:2024-01-16 15:15:01
【问题描述】:

将我的项目从 Xcode 5 迁移到 6 时出错。

Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_AFHTTPRequestOperationManager", referenced from:
      objc-class-ref in QCRoomListControllerViewController.o
      objc-class-ref in libQCBase.a(QCHttpRequestAdapter.o)
      objc-class-ref in libQCBase.a(QCHttpApi.o)
  "_OBJC_CLASS_$_AFHTTPResponseSerializer", referenced from:
      objc-class-ref in QCRoomListControllerViewController.o
  "_OBJC_CLASS_$_AFJSONResponseSerializer", referenced from:
      objc-class-ref in libQCBase.a(QCHttpApi.o)
ld: symbol(s) not found for architecture i386

我选择cocoapods作为包管理器,项目结构如下:

主要项目和 BaseLib 都在使用一些 pod,同时项目正在使用 BaseLib.a。

我尝试过 Xcode 5 与 iOS 7.1 SDK(这是唯一可行的 SDK)、Xcode 6 与 iOS 7.1 SDK 以及 Xcode 6 与 iOS 8.0 SDK 的组合。 我目前的结论是,无论我选择哪个版本的 iOS SDK,只要涉及 Xcode 6,链接都会失败。

相关设置如下所述。

在项目和 BaseLib 上都正确设置了 xcconfig 文件:

架构设置:

我的 Podfile 内容:

#platform :ios, "6.0"
source 'https://github.com/CocoaPods/Specs.git'

workspace 'QiChengWS.xcworkspace'
xcodeproj 'QiChengNew/QiChengNew.xcodeproj'
xcodeproj 'QCBase/QCBase.xcodeproj'


target :QiChengNew do
    pod 'JSONModel'
    pod 'SDWebImage', '~>3.6'
    pod 'AutoNSCoding', '~> 0.1.3'

    platform :ios, '7.0'

    pod 'ProtocolBuffers', '~> 1.9'
    pod 'CocoaAsyncSocket', '~> 7.3'

    pod 'GBInfiniteScrollView', '~> 1.6'
    pod 'GBInfiniteScrollView/PageControl'

    pod 'UMengAnalytics', '~> 3.1.2'

    platform :ios, '7'
    pod 'MWPhotoBrowser', '1.4.0'

    xcodeproj 'QiChengNew/QiChengNew.xcodeproj'
end


target :QCBase do
    platform :ios, '7.0'
    pod "AFNetworking", "~> 2.0"

    pod 'SVPullToRefresh', :head

    pod 'Toast', '~> 2.3'

    xcodeproj 'QCBase/QCBase.xcodeproj'
end

【问题讨论】:

  • 它不应该为 i386 编译/链接任何东西,因为你的目标平台是 ios。您是否尝试过删除 platform :ios, '7' 行? target :QiChengNew中是多余的
  • i386 在这里很有意义,因为我是在 iOS 模拟器上编译我的项目。删除平台语句并没有太大区别,我仍然遇到同样的错误,感谢您的评论。

标签: ios xcode6 linker-errors cocoapods afnetworking-2


【解决方案1】:

我希望您现在已经找到了解决方案。如果不更新到 AFNetworking 2.4 为我解决了这个问题

【讨论】:

  • 最新的cocoapods和AFNetworking还是有问题。
  • 我的最终解决方案是放弃 BaseLib 级别并创建一个私有 pod 来维护我的逻辑代码,然后将其放入 podfile。
【解决方案2】:

在将“pod”文件安装到我的项目后,我遇到了此类问题。我使用下面的代码解决了这个问题。

[!] The `sftest [Debug]` target overrides the `OTHER_LDFLAGS` build setting defined in `Pods/Target Support Files/Pods-sftest/Pods-sftest.debug.xcconfig'. This can lead to problems with the CocoaPods installation

- Use the `$(inherited)` flag, or
- Remove the build settings from the target.

将“Other Linker Flags”更改为 $(inherited) 即可解决我的问题。

【讨论】: