AFNetworking不会编译

时间:2015-04-02 16:15:19

标签: ios xcode afnetworking cocoapods

我完全不敢尝试使用AFNetworking在模拟器上运行项目。我之前在其他项目上使用过这种依赖关系,所以我不明白这里出了什么问题。首先,我尝试运行项目时出错:

Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_AFHTTPSessionManager", referenced from:
      _OBJC_CLASS_$_SharedNetworkObject in SharedNetworkObject.o
  "_OBJC_CLASS_$_AFJSONResponseSerializer", referenced from:
      objc-class-ref in SharedNetworkObject.o
  "_OBJC_METACLASS_$_AFHTTPSessionManager", referenced from:
      _OBJC_METACLASS_$_SharedNetworkObject in SharedNetworkObject.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我确定这是问题的一部分,但我不知道如何解决它:

enter image description here

这是违规的.h文件:

#import <Foundation/Foundation.h>
#import <AFNetworking/AFNetworking.h>
#import "SharedSessionKey.h"

@interface SharedNetworkObject : AFHTTPSessionManager

+ (SharedNetworkObject *) sharedNetworkObject;   // class method to return the singleton object

@end

值得注意的是,当我开始输入AFNetworking的导入行时,该行会在几个字符后填写,所以我知道有一些AFNetworking依赖存在的意识。

我使用CocoaPods安装了依赖项。这是我的Podfile:

# Uncomment this line to define a global platform for your project
platform :ios, '8.0'

source 'https://github.com/CocoaPods/Specs.git'

target 'WeRun' do
pod "AFNetworking", "2.5.2"
end

target 'WeRunTests' do

end

当然,我正在.xcworkspace工作(不是.xcodeproj)。

还有一件事,我的xcconfig文件看起来像这样,与其他成功的AFNetworking版本匹配:

GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking"
OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking"
OTHER_LDFLAGS = -ObjC -l"Pods-MyApp-AFNetworking" -framework "CoreGraphics" -framework "MobileCoreServices" -framework "Security" -framework "SystemConfiguration"
OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS)
PODS_ROOT = ${SRCROOT}/Pods

我不知道还有什么要找的。我已经完全删除了pod并重新安装,但却发现完全相同的错误。任何人都可以帮我解决这个问题吗?谢谢!

6 个答案:

答案 0 :(得分:25)

我花了几个小时与这个完全相同的问题进行斗争,经历了我能找到的所有Google点击。设备的构建工作正在进行,但是模拟器的构建却没有。

以下是最终为我解决问题的步骤:

  1. 清除XCode缓存:

    to_remove = {'A', 'B:C', 'D'}
    lines[:] = [line for line in lines if line not in to_remove]
    
  2. 清除CocoaPods缓存并重新安装依赖项:

    rm -rf ~/Library/Developer/Xcode/DerivedData/
    
  3. 最后转到“Pods”项目并将rm -rf "${HOME}/Library/Caches/CocoaPods" rm -rf "`pwd`/Pods/" pod update 设置为Build Active Architectures Only以进行“调试”配置。

答案 1 :(得分:4)

我建议你将$(继承)标志添加到&#34; Build设置&#34;。

  • 点击蓝色项目图标
  • 选择&#34;构建设置&#34;标签
  • 在&#34;链接&#34;您将找到一个名为&#34; Other Linker Flags&#34;
  • 的设置
  • 将$(继承)添加到文本字段

答案 2 :(得分:1)

我遇到同样的问题,当我-lc++已经设置Other linker flags cpp库使用目的时。
我在-ObjC -l"AFNetworking"上添加了这两个标志Other linker flags,它们已成功运行和编译。这两个标志是-ObjC-l"AFNetworking"。您同时扫描添加-ObjC -l"AFNetworking"

答案 3 :(得分:0)

不要在pod文件中给AFNetworking后的版本。然后再试一次。确保你也删除了逗号。

答案 4 :(得分:0)

嗯,我解决了这个问题,但我不确定为什么会这样。我正在构建设置中尝试其他链接器标志。我删除了CocoaPods安装(可能是)放置的标志,并通过复制.xcconfig文件中的标志来替换它。具体来说,我在-l"Pods-WeRun-AFNetworking"之后添加了此文字:-ObjC作为第二个标记。在我看来,这正是我刚删除的内容,所以我真的犹豫是否建议将其作为一个答案,但它现在有效,所以必须改变。

如果有人能对此有所了解或告诉我自己在欺骗自己,请告诉我。感谢您的建议。

答案 5 :(得分:-2)

一种简单的方法。下载存储库文件。拖放AFnetworking文件夹的内容(如有必要,可以创建组),然后使用该库。 (使用#import&#34; AFnetworking.h&#34;)