2014-03-01 43 views
7

Hubspot blogpost的啓發,我將iOS項目拆分爲一個主項目和幾個使用CocoaPods添加到主項目中的子項目。使用CocoaPods模塊化iOS應用程序

我有一個主項目和幾個子項目(每個在一個單獨的git存儲庫和podspec文件中)。其優點是每個子項目都可以自行編譯,運行和測試。除了共享靜態字符串,全局協議,子項目之間的基本類(如SomeProtocol.h,constants.h)之類的全局項外,該方法運行良好。我在主項目中定義了靜態字符串,協議和基類,並在包含全局項目的主項目中創建了一個pod規範,這些項目被添加到子項目的pod文件中。

子項目編譯和使用運行這種方法,但主要項目不編譯,因爲每個子項目吊艙將包括像

#import <SomeProtocol.h> 
#import <constants.h> 

文件(雖然主要項目的一部分)不能當個人的pod庫被編譯時被發現。

是否有最佳做法如何將大型iOS項目拆分爲幾個較小的項目?

+1

「是否有最佳做法如何將大型iOS項目拆分爲幾個較小的項目?」這是你真正的問題嗎?或者,你的問題是沒有找到你的可可豆莢頭? – quellish

+0

我只是想知道 - 爲什麼豆莢?爲什麼不同的儲存庫?項目可以重複使用嗎? – Sulthan

+0

他正在遵循博客文章中提出的示例,這可能是不同回購的原因。 – Brandon

回答

0

您是否擁有Build Phases/Target Dependencies中的所有較小項目?

4

是否有最佳做法如何將大型iOS項目拆分爲幾個較小的項目?

絕對!你有兩個選擇:庫和框架。通常,每個庫或框架都是它自己的項目,並且會與使用這些工具的應用程序共享。方案將用於將這些項目建立爲應用程序的依賴關係。

這或多或少說明,你會想做什麼: Static Libraries in Xcode

請注意,您的靜態庫的目標應該有SKIP_INSTALL設置爲YES。否則,您在存檔應用程序時會遇到問題。

對於許多開發人員來說,方案似乎是一個盲點,但對於理解您的工具和擴展工作流程來說,這些方案非常重要。因此,重要的是,蘋果確實在2011方案一WWDC會話,然後又重複了一遍,幾乎是一個字一個字,the next year

靜態字符串,全球協議,基類子項目

靜態字符串之間應該很容易 - 使用NSLocalizedString,然後使用該庫由應用程序加載值。

我不確定你的意思是「全球協議」。 「共享全球項目」雖然聽起來不太好。這是一般你想避免的事情。

基類將進入它們自己的庫或框架,而其他使用它們的東西則取決於它們。如果庫B和C都使用FooController作爲基類,則FooController將進入庫A,B和C將鏈接到該庫。

+0

這就是我最終做的,它爲我工作。將我的主項目中的框架鏈接到框架 –

+0

在實際創建框架之前應仔細考慮。因爲他們的預期目的是用於我的幾個應用程序,而不僅僅是一個。這裏有一個鏈接 - 「你的框架包含什麼」https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/CreationGuidelines.html#//apple_ref/doc/uid/20002254- BAJHGGGA儘管OSX的指導原則可以應用於IMO, – Rabiees

+0

@hajder框架只是一種打包可重用組件的方式,並且長期以來一直將框架構建到應用程序中,即使它們不會被共享或由其他應用程序加載。框架具有與庫相同的用途以及更多,因爲它們可以包含資源。 「什麼是框架?」框架編程指南的一部分解釋了這一點。 – quellish

3

你是否正在重新定義這些類的重複符號或錯誤?這是我猜測發生了什麼事。如果情況確實如此,我會藉此思考。

我在一個使用相同方法的大型項目上工作,儘管我們的項目有點不同。基本上,我們從一個應用程序開始,然後開始構建其他具有相同功能的應用程序,以便將這些常見事物分解到自己的項目中。想想像網絡代碼,自定義的alertviews,自定義導航欄等等。

從你所描述的那聽起來你的全局項目聽起來像是字符串,常量,基類等等屬於他們自己的項目,這就是你在做什麼,但沒有它在它自己的項目中。是否有可能將這些對象分解爲另一個回購並讓cocoapods解決依賴關係?這就是我們對我們的項目所做的事情 - 任何在多個地方使用的東西都會被放到公共項目中,並通過cocoapods包含在內。

我對最近發生的事情的猜測是,在你的主項目(讓我們稱之爲主項目)沒有cocoapods的情況下包括它們(讓它們通用),那麼子項目A依賴於'common',所以cocoapods會帶來共同的當它被拉進主。

還有一點你可能還沒學到的東西是,你可以把所有的豆莢從本地磁盤中取出,而不是通過Git拉入。

pod 'common', :path => '~/dev/common' 
1

也許你需要在哪裏放共享SomeProtocol.hconstants.h代碼一個共同的「基地」波德:在你podfile像它看起來會。

此Base Pod將作爲您所有其他Pod的必需依賴項,如this庫對theseother庫所要求的依賴項。