2015-04-02 62 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"