AFNetworking 无法编译
AFNetworking won't compile
我完全无法尝试使用 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)
我确定这是问题的一部分,但我不知道如何解决它:
这是有问题的 .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 安装了依赖项。这是我的播客文件:
# 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 并重新安装,却发现完全相同的错误。谁能帮我解决这个问题?谢谢!
不要在pod文件中给出AFNetworking之后的版本。然后再试一次。确保你也删除了逗号。
好吧,我解决了这个问题,但我不确定它为什么起作用。我正在尝试构建设置中的其他链接器标志。我删除了 CocoaPods 安装(大概)放置在那里的标志,并通过从 .xcconfig
文件复制标志来替换它。具体来说,我在 -ObjC
之后添加了此文本:-l"Pods-WeRun-AFNetworking"
作为第二个标志。在我看来,它正是我刚刚删除的内容,所以我真的很犹豫是否建议将其作为 'answer',但它现在可以使用了,所以一定是有些地方发生了变化。
如果有人能阐明这一点或告诉我我在自欺欺人,请告诉我。感谢您的建议。
我建议您将 $(inherited) 标志添加到 "Build settings"。
- 点击蓝色项目图标
- Select "Build settings" 选项卡
- 在 "Linking" 下,您会找到一个名为 "Other Linker Flags"
的设置
- 将 $(inherited) 添加到文本字段中
一个简单的方法。下载存储库文件。拖放 AFnetworking 文件夹的内容(如有必要,您可以创建组)然后使用该库。 (使用#import "AFnetworking.h" )
我花了几个小时来解决这个完全相同的问题,浏览了我能找到的所有 Google 匹配项。为设备构建工作正常,但为模拟器构建却不行。
以下是最终为我解决问题的步骤:
清除 XCode 缓存:
rm -rf ~/Library/Developer/Xcode/DerivedData/
清除 CocoaPods 缓存并重新安装依赖项:
rm -rf "${HOME}/Library/Caches/CocoaPods"
rm -rf "`pwd`/Pods/"
pod update
最后转到 "Pods" 项目并将 Build Active Architectures Only
设置为 No
也用于 "Debug" 配置。
我遇到了同样的问题,当时我已经在 Other linker flags
上设置了 -lc++
用于 cpp 库使用目的。
我在 Other linker flags
上添加了这两个标志 -ObjC -l"AFNetworking"
,它们工作并成功编译。这是两个标志 -ObjC
和 -l"AFNetworking"
。您同时扫描添加 -ObjC -l"AFNetworking"
.
这也发生在我身上。我只修复了一步:
杀掉Xcode,右击Xcode显示信息,用Rosetta打开,然后打开项目构建。有用!!!
对了,我用的是M1芯片Mac Mini。
在此之前,我尝试了从 google 获得的所有内容,例如:清理缓存、检查其他链接标志等。它们对我不起作用。
希望对大家有所帮助!
我完全无法尝试使用 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)
我确定这是问题的一部分,但我不知道如何解决它:
这是有问题的 .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 安装了依赖项。这是我的播客文件:
# 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 并重新安装,却发现完全相同的错误。谁能帮我解决这个问题?谢谢!
不要在pod文件中给出AFNetworking之后的版本。然后再试一次。确保你也删除了逗号。
好吧,我解决了这个问题,但我不确定它为什么起作用。我正在尝试构建设置中的其他链接器标志。我删除了 CocoaPods 安装(大概)放置在那里的标志,并通过从 .xcconfig
文件复制标志来替换它。具体来说,我在 -ObjC
之后添加了此文本:-l"Pods-WeRun-AFNetworking"
作为第二个标志。在我看来,它正是我刚刚删除的内容,所以我真的很犹豫是否建议将其作为 'answer',但它现在可以使用了,所以一定是有些地方发生了变化。
如果有人能阐明这一点或告诉我我在自欺欺人,请告诉我。感谢您的建议。
我建议您将 $(inherited) 标志添加到 "Build settings"。
- 点击蓝色项目图标
- Select "Build settings" 选项卡
- 在 "Linking" 下,您会找到一个名为 "Other Linker Flags" 的设置
- 将 $(inherited) 添加到文本字段中
一个简单的方法。下载存储库文件。拖放 AFnetworking 文件夹的内容(如有必要,您可以创建组)然后使用该库。 (使用#import "AFnetworking.h" )
我花了几个小时来解决这个完全相同的问题,浏览了我能找到的所有 Google 匹配项。为设备构建工作正常,但为模拟器构建却不行。
以下是最终为我解决问题的步骤:
清除 XCode 缓存:
rm -rf ~/Library/Developer/Xcode/DerivedData/
清除 CocoaPods 缓存并重新安装依赖项:
rm -rf "${HOME}/Library/Caches/CocoaPods" rm -rf "`pwd`/Pods/" pod update
最后转到 "Pods" 项目并将
Build Active Architectures Only
设置为No
也用于 "Debug" 配置。
我遇到了同样的问题,当时我已经在 Other linker flags
上设置了 -lc++
用于 cpp 库使用目的。
我在 Other linker flags
上添加了这两个标志 -ObjC -l"AFNetworking"
,它们工作并成功编译。这是两个标志 -ObjC
和 -l"AFNetworking"
。您同时扫描添加 -ObjC -l"AFNetworking"
.
这也发生在我身上。我只修复了一步:
杀掉Xcode,右击Xcode显示信息,用Rosetta打开,然后打开项目构建。有用!!! 对了,我用的是M1芯片Mac Mini。 在此之前,我尝试了从 google 获得的所有内容,例如:清理缓存、检查其他链接标志等。它们对我不起作用。
希望对大家有所帮助!