如何使用 Podfile 的安装后部分自动添加文件引用并设置该文件的目标?
Posted
技术标签:
【中文标题】如何使用 Podfile 的安装后部分自动添加文件引用并设置该文件的目标?【英文标题】:How can add a file reference and set that file's target automatically using the post install portion of the Podfile? 【发布时间】:2016-06-03 19:45:45 【问题描述】:我有一个使用 CocoaPods 的项目,其中我的一个 Pod 需要在 pod update
生成 Pods 项目后添加一个 .framework 文件作为对 Pods 项目的引用。 .framework 文件现在位于主项目目录中,我正在添加对它的引用。目前,我可以在构建 pod 后进入 Xcode 中的项目导航器,右键单击并将文件添加到项目中。然后我必须选择框架文件并将其目标设置为需要使用它的 pod。
为了让我的 CI 服务器能够自动构建,我正在尝试通过使用 Podfile 中的 post_install 挂钩来自动化添加文件和选择其目标的过程。这就是我遇到问题的地方。
我已设法将文件引用添加到实际 Pod 的组中,但这似乎不起作用,因为该 pod 中的文件似乎希望从其组之外导入框架。当我手动将文件引用添加到 Pods 项目但不在相关 Pod 的实际组中时,它可以正常工作。
第一个问题: 有没有一种适当的方法可以将文件引用添加到 Pods 项目本身,而无需将其添加到特定的 Pod 组?或者也许是一种在添加文件引用时为文件引用创建新组的方法?
第二个问题: 将文件自动添加到 Pods 项目后,我将如何设置文件的目标?
这是将文件引用添加到 Pod 组本身的代码:
post_install do |installer|
dir = Dir.pwd + '/app/VPX.framework'
group = installer.pods_project.pod_group('OGVKit')
installer.pods_project.add_file_reference(dir, group)
end
【问题讨论】:
【参考方案1】:您可以通过获取对目标的引用并将文件引用添加到它来实现第二个。这是tl;博士;解决方案
post_install do |installer|
dir = Dir.pwd + '/app/VPX.framework'
project = installer.pods_project
group_name = 'OGVKit'
group = project.pod_group(group_name)
reference = project.add_file_reference(dir, group)
project.targets.select |target|
target.add_file_references([ reference ]) if target.display_name.eql? group_name
end
这里有一个小故障:
project.add_file_reference(dir, group)
这会返回一个 PBXFileReference,这只是表示对文件系统中文件的引用。
我们可以使用这个引用将它添加到构建目标中。
project.targets.select |target|
循环和迭代可用的目标
target.add_file_references([ reference ]) if target.display_name.eql? group_name
目标add_file_references
接受PBXFileReference
对象的数组,太好了,我们可以使用之前获得的那个。
Cocoapods 目标名称与组名称相同,因此我们只需要执行条件检查来验证这一点。
希望这会有所帮助。
【讨论】:
以上是关于如何使用 Podfile 的安装后部分自动添加文件引用并设置该文件的目标?的主要内容,如果未能解决你的问题,请参考以下文章