2017-07-24 52 views
1

好吧,或許我正在做一些絕對錯誤的事情,請隨時糾正我。讓我解釋我想達到的目標。在iOS Framework和App Projects中在同一工作區中使用Cocoapods

我在一個有多個目標的項目上工作。每個目標都用於創建一個單獨的應用程序。目標共享許多核心功能,但是一些目標添加一些額外的代碼或僅使用「核心」的最小集合(例如一些網絡服務)。

當前所有內容都打包到一個Xcode項目中,並使用「目標成員」功能(在File Inspector中)標記哪個類屬於哪個目標。核心類是所有目標的成員,特殊類只是一個目標的成員。

這很容易混淆,並帶來另一個問題。我想使用CI/CD服務器自動構建併發布更新到測試飛行。由於目前所有文件都在一個存儲庫中,因此無法自動檢測哪個應用程序需要更新。

我現在的計劃是將我的存儲庫和我的項目分成多個部分。我想過爲每個應用程序使用一個「Core」項目以及一個項目。每個項目都將駐留在它自己的GIT存儲庫中。

然後我創建一個「主」存儲庫,並使用GIT子樹添加其他存儲庫。然後,我可以分別爲每個存儲庫設置觸發器,以構建相應的應用程序(或者如果我在覈心中更改了某些內容,則可以同時創建所有應用程序

該結構目前看起來不錯,但我有一個正確設置cocoapods的問題。我的問題是我在我的核心中使用cocoapod依賴關係,現在是一個框架。我Podfile目前看起來是這樣的:

source 'https://github.com/CocoaPods/Specs.git' 
workspace 'Master.xcworkspace' 

platform :ios, '10.0' 
use_frameworks! 

project 'core/Core' 
project 'app/MyApp' 

def common_pods 
    pod 'Firebase/Core' 
    pod 'Alamofire' 
end 

target 'Core' do 
    project 'core/Core' 
    common_pods 

    target 'CoreTests' do 
    inherit! :search_paths 
    end 
end 

target 'MyApp' do 
    project 'app/MyApp' 
end 

而且我的文件系統是這樣的:

  • 碩士(文件夾)
    • Master.xcworkspace
    • Podfile
    • 核心(文件夾)
      • Core.xcproject
      • 核心(包含文件夾中的文件)
    • 應用程式(文件夾)
      • MyApp.xcproject
      • MyApp的(包含文件夾中的文件)

如果我現在將Core框架導入到t他MyApp類,我得到一個構建錯誤,說「缺少必需的模塊'Firebase'」,如果我添加「common_pods」到MyApp目標,我可以建立,但在運行時得到一堆「類xxx在Core.framework和/.../MyApp.app/MyApp。將使用兩者之一。哪一個是未定義的。「錯誤和我的應用程序崩潰。

我曾經讀過應該製作自定義框架pod並使用cocoapods來添加它們,而不是直接通過項目目標嵌入二進制文件功能來添加它們,但這並不意味着每次我對核心進行更改時,我都會是否需要構建框架,然後在最終構建和運行我的應用程序之前進行pod更新?這不可能是解決方案。

我缺少什麼?我究竟做錯了什麼?我希望你能幫我弄明白。

回答

2

雖然我的應用程序分解爲框架,但我遇到了類似的問題。每個單獨的目標都必須包含它自己使用的豆莢副本。豆莢不在目標之間共享。 http://samwize.com/2015/01/26/projects-workspace-embedded-framework-and-cocoapods/

在你已經嘗試了我工作的podfile,這使我相信添加common_pods的「MyApp的」目標也許你的問題是你的框架項目是如何添加到您的工作空間。我遵循這裏的說明:http://www.splinter.com.au/2016/11/22/scalable-swift/

我的理解是你正在尋找的行爲,其中鏈接到核心框架也將鏈接到核心框架的pod依賴關係,只有當你將核心框架放入它自己的pod - 但正如你所指出的那樣,這樣做有相當多的開銷。

希望斯威夫特包管理器有朝一日更容易:)

相關問題