好吧,也许我做了一件绝对错误的事情,所以请随意纠正我。让我解释一下我想要实现的目标。
我在一个有多个目标的项目上工作。每个目标用于创建单独的应用程序。目标共享许多核心功能,但是一些目标添加一些额外的代码或者仅使用"核心"的最小集合(例如一些web服务)。
目前,所有内容都打包在一个Xcode项目中,我使用的是" Target Membership"功能(在文件检查器中)标记哪个类属于哪个目标。核心类是所有目标的成员,特殊类只是一个目标的成员。
这很容易让人感到困惑,它带来了另一个问题。我想使用CI / CD服务器自动构建和发布Test Flight的更新。由于目前所有文件都在一个存储库中,因此无法自动检测需要更新的应用程序。
我现在的计划是将我的存储库和我的项目分成多个部分。我想过使用一个" 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
我的文件系统看起来像这样:
如果我现在在其中一个MyApp类中导入Core框架,我会收到一个构建错误,说“"缺少必需的模块' Firebase'"如果我添加" common_pods"对于MyApp目标,我可以构建但在运行时获得一堆"类xxx在Core.framework和/.../MyApp.app/MyApp中实现。将使用两者之一。哪一个未定义。"错误和我的应用程序崩溃。
我曾经读过,应该制作自定义框架pod并使用cocoapods添加它们,而不是通过项目目标嵌入二进制功能直接添加它们,但这并不意味着每次我对核心进行更改时,我需要构建框架,然后在最终构建和运行我的应用程序之前进行pod更新?这不是解决方案。
我错过了什么?我究竟做错了什么?我希望你能帮我搞清楚。
答案 0 :(得分:3)
在将我的应用分成框架时,我遇到了类似的问题。每个单独的目标必须包含它自己使用的pod的副本。目标之间不共享窗格。 http://samwize.com/2015/01/26/projects-workspace-embedded-framework-and-cocoapods/
将common_pods
添加到' MyApp'你试过为我工作的podfile中的目标,这让我相信你的问题可能是你的框架项目被添加到你的工作区。我按照这里的说明进行操作:http://www.splinter.com.au/2016/11/22/scalable-swift/
我的理解是您正在寻找的行为,其中链接到Core框架也将链接到Core框架的pod依赖项,只有当您将Core框架置于其自己的pod中时才有可能 - 但正如你所指出的那样,这样做会产生相当大的开销。
希望有一天Swift Package Manager让这更容易:)