2012-04-21 126 views
5

我正在研究iOS上的大型項目,我想將獨立模塊分成幾個可加載的包。但是,官方文檔指出iOS上不支持可加載包。另外,我打算使用內部分發,因此應用商店批准不是問題。iOS上的可加載包,有沒有什麼辦法可以實現呢?

現在我的問題是:我在代碼中調用[_bundle principalClass]來訪問可裝入包的入口類。它可以在越獄的iOS設備上正常工作。對於未破解的設備,當我在Xcode中使用調試模式時,它也可以正常工作。但是當我從跳板上獨立運行它時,它會崩潰到背景。

我真的想知道:

1)爲什麼它是在越獄/ unjailbroken設備運行加載束如此不同?
2)應用程序的XCode調試模式和正常運行模式之間的主要區別?

在unjailbreak的iOS設備上使用動態庫還有其他棘手的方法嗎?

回答

1

iOS不允許所有不是系統組成部分的可執行代碼的動態加載;這包括框架,dylibs,使用mmap的可執行內存頁面等等。希望他們有一天會允許動態包,但是暫時你需要將你的模塊構建爲靜態庫並在構建時與它們鏈接。圍繞這個限制沒有已知的方法。

很多人都寫過關於如何操作(例如,http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4/),或者您可能想要使用現有的項目爲例。我喜歡的一個是GData objc API,它爲OS X構建動態框架時的目標以及構建iOS時的靜態庫:http://code.google.com/p/gdata-objectivec-client/

相關問題