2012-04-23 63 views
3

我看到在哪裏我的應用程序已經通過一個特設的部署安裝了iOS 4.3.5手機這個錯誤(通過HTTP下載):找不到符號從靜態庫錯誤在iOS 4.3.5

dyld的錯誤信息:

Symbol not found: _OBJC_CLASS_$_NSJSONSerialization 
    Expected in: /System/Library/Frameworks/Foundation.framework/Foundation 

我在應用程序代碼不調用iOS 5庫,除非一類已被證明存在(即if(NSClassFromString(@"NSJSONSerialization")!=nil),因此問題不在於呼叫被以iOS 5庫做出了iOS 4的設備上。

該應用程序本身包含一個靜態庫這是我自己的代碼,並在NSJSONSerialization引用存在。

如果直接從xcode中運行該應用程序的作品完美的iOS 4.3設備上(即,經由USB電纜連接到顯影機的iPhone)。但是,當通過adhoc部署在同一臺設備上運行時,我看到了崩潰。

adhoc歸檔文件是通過Product->Archivexcode 4中構建的,然後使用「分發」按鈕創建Ad-Hoc部署.ipa文件。

的應用程序崩潰,幾乎瞬間,讓我覺得,也許沒有我的代碼被稱爲可言的,它是我的檔案建立的設置,可能是不正確的嗎?

非常感謝您提前幫助您!

+1

http://stackoverflow.com/questions/8342411/getting-dyld-symbol-not-found-objc-class-nsjsonserialization-on-ios4 – rishi 2012-04-23 13:37:24

+0

主項目和靜態項目的部署目標是4.3。此外,iOS 5設備庫不會被調用/使用。 – 2012-04-23 13:47:57

+1

@RIP - 這實際上是一個不同的,比這裏描述的更微妙的問題。正如我在我的回答中所描述的那樣,正常的基於類的弱連接在靜態庫和構建檔案或分發中失敗。 – 2012-04-23 16:40:04

回答

11

這聽起來像是我在this answer跑進完全相同的問題。處理構建和存檔上的靜態庫與通過Xcode直接安裝時處理弱鏈接的方式稍有不同。後者似乎處理類應用程序和函數級弱鏈接(因爲Xcode 4.3)。但是,在歸檔包含靜態庫的項目時,該弱鏈接沒有正確使用。

就我而言,我需要,以便它建立特設或App Store,分配工作時手動薄弱環節問題的iOS框架中使用我的靜態庫的應用程序。爲此,請轉到項目的構建設置,轉到「構建階段」選項卡,然後展開「鏈接二進制庫」分組。找到有問題的框架(在我的例子中是CoreVideo.framework,但聽起來您可能需要爲Foundation.framework執行此操作),並將其從Required改爲Optional。

這應該清理你的弱鏈接的問題。我正在進一步調查,看看是否有我缺少的構建設置,或者這是否是鏈接器錯誤。

+0

布拉德現貨。我弱化了基金會的框架,它工作得很好。非常感謝您的幫助! – 2012-04-23 21:13:26

+0

非常感謝。 :) – 2013-03-12 06:18:48