2009-06-12 37 views
42

我想在我的2.0應用程序中運行3.0設備時使用iPhone OS 3.0的某些功能。我不想一直走到3.0,因爲有客戶不想更新。如何在2.0兼容的應用程序中選擇使用iPhone OS 3.0功能?

我嘗試了一下MapKit.framework(-weak_framework MapKit)的弱鏈接。我發現它非常麻煩,因爲我不得不欺騙編譯器/鏈接器使用2.0 SDK以及除了使用MapKit的代碼之外的所有代碼。

有沒有人有這方面的經驗?你在做什麼來編譯/鏈接。是否有人已經向蘋果提交了一個應用程序,該應用程序與其他操作系統版本的框架弱連接?

回答

36

蘋果如何做到這一點,特別是使得使用MFMailComposeViewController 2.x版本的兼容應用程序的例子....

http://developer.apple.com/iphone/library/samplecode/MailComposer/index.html

答案涉及與3.0 SDK編譯,設置部署目標設置爲2.x,確保3.0框架被標記爲「弱」引用,然後做正確的事情,使您的代碼可以工作,如果您使用的設備不存在新框架。

1

這可能不是你正在尋找的答案,但我使用的方法是隻有兩個單獨的應用程序。我沒有用3.0升級更新現有應用程序,而是將其作爲新應用程序發佈。舊用戶可以使用2.0應用程序,只要他們想要,而需要3.0功能的用戶可以升級。

+0

這就是我會用如果我的應用程序是免費的。但既然有客戶以前付過錢,我不能要求他們再次購買應用來獲得3.0的功能。 – 2009-06-12 13:45:46

+2

當然可以。除非您爲應用程序收取鉅額費用,否則定價升級非常普遍。您將更多的工作投入到該計劃中,並且應該爲此付費。蘋果公司正在收取另外29美元的升級費用... – 2009-06-12 14:05:12

+0

upvote for making my more more money! – 2009-06-12 15:58:59

-1

我不認爲你可以。 3.0和2.x使用完全不同的SDK,並鏈接到一組完全不同的文件和庫。我不確定,但我不認爲你可以鏈接到3.0 SDK,仍然是2.X兼容。

(如果我錯了,請添加註釋)。

+0

好吧,看起來它正在工作,至少在我的設備上。我在一臺iPhone 2.2.1上嘗試了它,而另一臺則使用了3.0 GM。 該框架具有完全相同的名稱(框架版本的東西似乎被丟棄在iPhone OS上:路徑中沒有'versions/A')。看來,蘋果公司試圖保持OS與操作系統兼容的框架,現在它們具有非脆弱的實例變量。 – 2009-06-12 14:02:46

5

您可以使用dlopen函數始終鏈接到不屬於當前SDK的框架。當然,這不建議用於非公開的框架(在這種情況下,不建議在應用商店中禁止==)。但是,隨着OS未發佈版本的新框架公開化,這是一個選擇。只需檢查您的版本號,並打開框架即可。如果你正在大量使用新的東西,那麼對個人功能很有用。

0

上弱鏈接大HOWTO(包括庫和框架)這裏:

http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WeakLinking.html#//apple_ref/doc/uid/20002378-107262

雖然這是過時的一點點... ...與最新的X-代碼爲弱連接的整個框架的過程其實簡單:

  1. 右鍵單擊目標,並選擇獲取信息
  2. 進入「常規」選項卡
  3. 在底部的鏈接庫部分中,將所需庫的「類型」從「需要」更改爲「弱」鏈接。
  4. 利潤
相關問題