数百个目标,xcode配置中的相同代码库

Mik*_*ynn 5 xcode ios

我们在xcode中有400多个目标.它仍然可以正常工作,但必须有一个更好的方法来设置它,通过保持相同的代码库,但没有所有那些可能减慢xcode的目标.

Android Studio允许您更新appname,该名称从磁盘加载该文件夹,因此只加载该项目以运行和编程.在XCode中并非如此,所有目标都可用.

这已经好几年了,但现在有更好的方法,有数百个目标不涉及Git或Branching?关于这个的问题是陈旧的,只有少数项目,我们在这里谈论数百个.

Bra*_*red 4

您的问题缺乏足够的背景来提出具体建议,但总的来说......

使用框架

如果可以的话,将合理的事物组合到单个(或多个)框架目标中。框架不仅仅是动态库的精美包装,它们还可以包含辅助工具等。

使用工作区

如果现有目标有逻辑分组,您可以将它们分离到自己的 Xcode 项目中。一旦将它们放入自己的项目中,您就可以创建一个引用这些单独项目的工作区。即使组合工作区预先加载所有内容(我不认为它会加载),您仍然可以打开并使用单独的项目,以便在处理组件时获得快速、流畅的体验。

使用静态库

如果您有大量目标,其中一个需要AB、 和C,但另一个需要BCD那么您实际上可以将ABCD放在一个静态库中,并依靠链接器从每个单独的目标中删除未使用的代码。这显然不会减少您拥有的目标数量,但您可以将静态库设为自己的项目并将其包含在公共工作区中。这也将加快编译速度,因为文件只需要编译一次。

参数化目标或使用方案

如果您的目标只是用硬编码参数包装一些外部构建工具/脚本(我实际上已经看到了这一点),您实际上可以将大量现有变量从 xcode 传递到这些外部工具并消除“重复”目标。同样,如果您的某些目标只是彼此的排列,您可以添加新方案。我见过的一个很好的例子是,对于“清理”(地址清理程序等)构建有单独目标的人,您可以创建一个清理方案而不是目标。

使用“脚本”构建阶段

如果您的某些目标正在执行诸如 linting 之类的操作,那么您可以使用脚本构建阶段来调用 linter,而不是使用单独的目标来执行此操作。

将目标卸载到外部构建系统

Xcode 可以拥有使用脚本构建阶段(并使用如上所述的可变参数)简单地调用外部工具/脚本的目标。如果您已经为另一个平台使用另一个构建系统(make、cmake 等),那么这样做是有意义的。仅将 Xcode 用于 Mac/iOS 特定目标,并将其他所有内容卸载到跨平台构建系统。

如果构建系统以 Xcode 理解的格式输出错误,它甚至会显示与本机 Xcode 目标相同的文件和行错误。我见过人们围绕外部工具编写薄包装器来捕获解析错误并将错误重新打印为这种格式。