如何使用 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 的安装后部分自动添加文件引用并设置该文件的目标?的主要内容,如果未能解决你的问题,请参考以下文章

gpcc启动后部分agent启动失败

gpcc启动后部分agent启动失败

Jquery Ajax Post 后部分视图刷新

Mac Charles 使用后部分Https网页无法打开

云展网教程 | PDF上传后部分页面内容不显示/文字图片错位/PDF转换很慢或者失败

ajax调用后部分视图变为空