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