2012-06-17 40 views
7

我不想將此應用程序提交給AppStore。我已經嘗試了很多次,但遇到了很多問題:(iOS如何使用私有API?

我使用class-dump來獲取UIKit.framework的所有頭文件。在由class-dump生成的UIApplication.h中,我看到了方法I想要使用---- launchApplicationWithIdentifier

然後我把UIApplication.h放到我的項目中並導入它。編譯後,我得到了很多「重新定義枚舉器....」的錯誤,因爲在UIKit.framework中我使用以前,還有另一個UIApplication.h,但該文件沒有方法launchApplicationWithIdentifier。

如果我刪除以前的UIKit.framework並導入由類轉儲生成的文件夾中。然後,它看起來像一個框架,但如果一世 展開它,它是空的。

然後我想讓所有生成的頭文件成爲一個框架文件來替換之前的UIKit.framework。但我不知道如何。正如我們所看到的,在系統框架目錄下,有一個與框架具有相同名稱的文件,並具有「執行的shell腳本」圖標。我怎樣才能製作這個文件?

我真的很困惑。有人可以幫我一把嗎?謝謝。

+0

OMG,我只是在你的另一個問題中添加對你的問題的答案:http://stackoverflow.com/questions/11047176/ios-how-can-i-use-uiapplication-launchapplicationwithidentifier-which-is-in -priv –

回答

7

只要指定在上面的類實現一個類別界面,你想用它的私有方法,像這樣:

@interface UIApplication (Private) 

- (BOOL)launchApplicationWithIdentifier:(id)identifier suspended:(BOOL)suspended; 

@end 

不導入全班轉儲文件和鏈接與原來的UIKit框架。

使用私有API時必須非常小心。這些方法可以在未來的iOS版本中更改或刪除!

在運行時檢查方法是否確實存在與respondsToSelector:並準備好它不存在的情況。

我在我自己的應用程序中使用了一個祕密的MapKit功能,並且我知道私有方法只存在於iOS 5中。所以我的應用程序仍然適用於所有iOS版本,但此功能僅適用於iOS 5(Apple已刪除或更改它在iOS 6 beta 1中)。

+1

它的工作原理。非常感謝:-)另外,我必須讓我的應用程序成爲deb文件,使用dpkg工具然後安裝它。只有這樣,我的應用程序才能啓動另一個應用程序。 – wyp