2013-03-11 18 views
101

我有一個現有的iOS應用程序,並希望添加一大塊代碼,我一直在開發另一個項目,以方便測試。新的塊基本上處理圖像保存到各種共享服務等。因爲共享代碼需要大量的測試和未來的更新,我想知道什麼是最好的方式將該代碼塊合併到我的現有應用程序。圖書館?靜態的?動態?還是框架?另一個項目內的項目

我不知道它應該是一個靜態庫,動態庫還是一個框架,老實說,我不確定它們有什麼不同,或者我應該如何去設置它並讓它在Xcode中。

我所知道的是,我需要/希望爲共享代碼保留一個單獨的測試和更新應用程序,並讓主應用程序使用它。

如果你不能告訴我,我不是git wiz。我只是一個簡單的人開發者。

任何幫助或方向將不勝感激。謝謝!

+0

您可以創建類似'框架內框架'的傘框架http://stackoverflow.com/a/27638841/1582217 – 2014-12-24 16:40:05

+0

[如何在iOS sdk中創建Umbrella框架?](http:/ /stackoverflow.com/questions/27484997/how-to-create-an-umbrella-framework-in-ios-sdk) – 2014-12-25 07:59:31

回答

150

首先,一些一般定義(特定於iOS):

靜態庫 - 在編譯時鏈接的代碼單元,其不改變。

但是,iOS靜態庫是而不是允許包含圖像/資產(僅限代碼)。不過,您可以使用媒體套件來解決這個難題。

在Wikipedia here上可以找到更好更正式的定義。

動態庫 - 在運行時鏈接的代碼和/或資產單位可能更改。

但是,只有Apple被允許爲iOS創建動態庫。您不允許創建這些內容,因爲這會讓您的應用遭到拒絕。 (請參閱this其他SO帖子以進行確認和推理)。

軟件框架 - 編譯組代碼完成某項任務......因此,你其實可以有一個靜態框架動態的框架,這是典型的只以上的編譯版本。

查看Wiki on Software Framework瞭解更多詳情。

因此,在iOS上,您唯一的選擇基本上是使用靜態庫或靜態框架(主要區別在於靜態框架最常分佈爲已編譯的.a文件,而靜態庫可以簡單地作爲子項目 - 您可以看到所有代碼 - 首先編譯的代碼及其生成的.a文件被項目用作依賴項)。

現在我們對這些術語很清楚(呃),爲iOS設置一個靜態庫和支持媒體包並不是太困難,並且有很多關於如何做這些的教程。我個人會推薦這一個:

https://github.com/jverkoey/iOS-Framework

這是一個非常直接的指導,沒有涉及「假靜態庫」的缺點......看看更多信息.. 。

一旦你創建了你的靜態庫,它就像在Git中包含一個子模塊一樣簡單,以便在不同的項目中使用。

祝你好運。

編輯

關於子項目一個項目中,據我所知,要得到這個工作/編譯正確,實際上需要建立在子項目首先編譯一個編譯鏈,它創建一個靜態框架.a文件,該文件被項目用作依賴項。

下面是其中談到這另一個有用的教程:

http://www.cocoanetics.com/2011/12/sub-projects-in-xcode/

EDIT 2

由於iOS 8的,蘋果現在允許開發人員創建動態的框架! (注意:您的應用必須具有iOS 8的最低目標才能包含動態框架...不允許使用背面移植。)

這已添加爲新的項目模板。在Xcode 6.1,這可以發現在:

New Project -> iOS -> Framework & Library -> Cocoa Touch Framework 
+0

到目前爲止,似乎該子項目是我想要的,該文章是完美的。我注意到了一個奇怪的副作用:我在我的主項目中拖動的子項目也有我的測試代碼(viewcontroller和nib,appdelegate等),並且確保我只想在主項目被檢查用於靜態庫中。但由於某種原因,當我去附加我的主項目的nib文件時,它還顯示了我的子項目中的出口和動作。這肯定會導致一些混亂。任何提示擺脫這些?謝謝! – pizzafilms 2013-03-11 16:26:09

+0

動態項目是否可以拖放到靜態項目中,從而使其成爲靜態項目?我很困惑,有些澄清會非常棒!在此先感謝:-) – 2013-08-26 01:54:37

+1

@ JRG-Developer如果遵循以下規則,則允許使用動態框架:https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html #// apple_ref/doc/uid/TP40014214-CH21-SW3 – klefevre 2015-04-17 13:41:03