2012-05-24 60 views
1

我正在爲iPhone OS 3.1.3開發,我需要使用Dropbox API。如何在程序啓動時取消鏈接框架

問題是Dropbox API至少需要iOS 4.2。好。

我決定拯救3.1.3使用程序的可能性,但如果是4.2以上,就會有Dropbox的功能。

要使用Dropbox的框架,我需要鏈接另一框架:

  • Security.framework
  • QuartzCore.framework

我已經做到了這一點。

當我鏈接Dropbox.framework到我的項目,該項目工程iPhone模擬器很大,但它不能在我的iPhone 3.1.3開始。有一個在輸出錯誤:


使dyld:找不到符號:_kSecAttrAccessible 從參考:在/ var /移動/應用/ C1FC10E5-0A36-4DEB-BD27-5028C205C89D /總線Time.app/Bus時間 在/ var /移動/應用/ C1FC10E5-0A36-4DEB-BD27-5028C205C89D /總線Time.app/Bus時間


所以/System/Library/Frameworks/Security.framework/Security :預計問題是:

我可以嗎在程序啓動時檢測iOS版本並取消鏈接框架? 或者你可以提供另一種方式使用Dropbox的3.1.3?

謝謝你的回答。我很感激。

+3

你爲什麼瞄準3.x?仍然運行3.x的iOS設備的數量非常小。大約一年前,3.x僅在iOS設備的約11%上運行。那是5.x之前,而6.x就在眼前。 – CrimsonDiego

+0

謝謝你的回答!因爲我正在使用iPhone第一代。這一款擁有令人難以置信的設計,它已經爲我工作了4年多。我知道是時候購買新的4S了,但現在不是。我需要先開發一些東西。 –

+0

您無法以編程方式在運行時取消鏈接。你必須以相反的方式做到這一點,如果可能的話,以編程方式將其鏈接 - 這也意味着以編程方式訪問類和選擇器和/或C符號。通常,您可以使用弱框架鏈接來使運行時爲您做所有困難的事情,因此您必須手動執行的唯一部分是在使用它們之前爲空的複選符號。正確的答案取決於你是否想要指向弱鏈接的指針,所以你可以這樣嘗試,或者你知道這是行不通的,並想知道如何動態加載。 – abarnert

回答

2

您不能以編程方式取消鏈接在運行時框架。

您可以通過編程鏈接在運行時框架,例如通過使用NSBundle API或dlopen或其他各種方式。如果這樣做,則必須手動加載所需的ObjC對象和/或C符號。

或者,您可以弱鏈接的框架,這使得運行時做的大部分工作的爲您服務。如果它在那裏,它將在啓動時加載,並且它的所有ObjC對象和C符號將可供您使用。否則,它的所有ObjC對象和C符號都將爲空。所以,你所要做的就是檢查null來決定是否運行需要該框架的代碼。

2
  1. 選擇您的文件列表中的安全框架。
  2. 展開右側邊欄(視圖>實用程序>顯示實用程序)。
  3. 在「目標成員」下將「必需」更改爲「可選」。
相關問題