2015-04-02 57 views
8

我完全卡住尝试使用AFNetworking在模拟器上运行项目。我之前在其他项目中使用过这种依赖关系,所以我不明白这里出了什么问题。首先,当我尝试运行项目的错误: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 

我不知道要寻找别的什么。我已经完全删除了该吊舱并重新安装,只是为了找到完全相同的错误。任何人都可以帮我解决这个问题吗?谢谢!

+0

https://github.com/AFNetworking/AFNetworking/issues/2324 – Klevison 2015-04-02 16:20:35

+0

仅将构建活动架构设置为是 – Jassi 2015-04-02 16:28:28

+0

@Jassi - 没有工作。 – Alex 2015-04-02 16:30:04

回答

24

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

下面是终于解决了这个问题对我来说步骤:

  1. 清除的XCode缓存:

    rm -rf ~/Library/Developer/Xcode/DerivedData/ 
    
  2. 清除的CocoaPods缓存和重新安装依赖:

    rm -rf "${HOME}/Library/Caches/CocoaPods" 
    rm -rf "`pwd`/Pods/" 
    pod update 
    
  3. 最后进入“豆荚”项目并设置Build Active Architectures OnlyNo也适用于“调试”配置。

+0

非常有帮助。谢谢。 – SAHM 2016-06-30 03:05:14

+0

就像一个魅力工作! – 2016-07-20 14:11:55

+0

它的工作原理,谢谢!这应该是正确的答案。 – Marku 2016-10-25 14:55:02

0

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

+0

谢谢,但它没有解决问题。 – Alex 2015-04-02 16:23:21

+0

我的Podfile中没有版本号。仍然不起作用。 – Questioner 2017-04-24 12:53:01

0

嗯,我解决了这个问题,但我不确定它为什么起作用。我在Build Settings中尝试了其他链接器标志。我删除了CocoaPods安装的那个标志(推测是),并通过复制.xcconfig文件中的标志来替换它。具体来说,我在-ObjC之后添加了这个文本:-l"Pods-WeRun-AFNetworking"作为第二个标志。它看起来与我刚刚删除的完全一样,所以我毫不犹豫地建议这是一个“答案”,但它现在起作用,所以一定会发生变化。

如果任何人可以摆脱这种情况或告诉我,我是愚弄自己,请让我知道。感谢您的建议。

4

我建议你将$(继承)标志添加到“生成设置”中。

  • 点击蓝色项目图标
  • 选择“构建设置”选项卡
  • 在“链接”,你会发现一个名为“其他链接器标记”
  • 加$设置(继承)进入textfield
+0

这根本不起作用。 – Questioner 2017-04-24 12:52:43

-2

一个简单的方法。下载存储库文件。拖放AFnetworking文件夹的内容(如果需要可以创建组),然后使用该库。 (使用#import“AFnetworking.h”)

0

我有同样的问题,当我有-lc++已经为CPP库的使用目的设置Other linker flags
我在Other linker flags上添加了这两个标志-ObjC -l"AFNetworking",这两个标志成功地工作和编译。这两个标记是-ObjC-l"AFNetworking"。您同时扫描添加-ObjC -l"AFNetworking"