是否可以在Xcode项目的Build Phases部分中对Compile Sources列表进行排序?

med*_*med 17 xcode

我想根据他们的名字对我的Xcode项目的'Compile Sources'部分中的文件进行排序.可能吗?

小智 26

是的,您可以重新排序Xcode中的Compile Sources部分,但不能重新排序GUI - 考虑到这已经是IDE的第6版并且他们仍然没有接触到这个基本功能,这是一种耻辱.

由于A-现场说,你需要编辑project.pbxproj的内部文件yourproject.xcodeproj文件.使用Finder选择yourproject.xcodeproj文件,然后使用上下文菜单显示包内容.之后用文本编辑器打开project.pbxproj文件.

找到PBXSourcesBuildPhase部分并复制files =()之间的所有内容; 进入一个新的文本文件.删除前导标签/空格.将该文件保存在磁盘上的某个位置.打开终端并执行以下操作:

 sort -bf -t " " -k 3 PBXSourcesBuildPhase.txt > PBXSourcesBuildPhase.sorted.txt
Run Code Online (Sandbox Code Playgroud)

在文本编辑器中打开新的PBXSourcesBuildPhase.sorted.txt文件,将已排序的行复制到project.pbxprojPBXSourcesBuildPhase部分(覆盖先前复制的行)并保存.

现在,您应该能够看到在Xcode 的Compile Sources部分中排序的所有文件.

我已经在Xcode 6.0.1中使用一个小项目(~150个源文件)对此进行了测试,并且没有任何问题.

小心:在尝试之前,您应该备份项目文件(或者更好:使用版本控制).以防万一.

  • 奇迹般有效.如果您是vim用户,只需突出显示该部分并执行`:'<,'>!sort -bf -t"" - k 3` (2认同)

Fab*_*ano 5

我认为这是不可能的。

作为大多数情况下的解决方法,您可以使用文件列表右上角的搜索过滤器。

例如,我需要在许多文件中添加一个编译器标志(幸运的是,所有文件都以相同的前缀开头)。这样做,如前所述在这里,你必须在文件上双击。

然后,我为前缀过滤了文件,按住Shift并单击以选择所有文件,然后释放Shift并双击其中的一个。这样我就可以一次将标志添加到所有文件


Chr*_*nis 5

接受的解决方案工作正常,但它需要手动步骤(打开项目文件,找到你想要的目标的部分等)所以它有点麻烦,如果你需要保持每个部分的排序,它不能自动化执行构建或提交的时间。我遇到了同样的问题,我创建了一个ruby 脚本来对这些部分进行排序。该脚本对指定或所有目标的“编译源”、“复制捆绑资源”和“构建阶段”下的所有“复制文件”部分进行排序。

#!/usr/bin/env ruby
require 'xcodeproj'
require 'set'

project_file, target_name = ARGV

# open the project
project = Xcodeproj::Project.open(project_file)

# find the target
targets_to_sort = project.native_targets.select { |x| x.name == target_name || target_name.nil? }

phases_to_sort = [Xcodeproj::Project::Object::PBXSourcesBuildPhase, Xcodeproj::Project::Object::PBXCopyFilesBuildPhase, Xcodeproj::Project::Object::PBXResourcesBuildPhase]

targets_to_sort.each do |target|
  puts "sorting files for target #{target.name}"
  phases_to_sort.each do |phase_to_sort|
    target.build_phases.select { |x| x.class == phase_to_sort }.each do |phase|
      phase.files.sort! { |l, r| l.display_name <=> r.display_name }
    end
  end
end

puts 'saving project'
project.save
Run Code Online (Sandbox Code Playgroud)

对所有目标进行排序:

./sort_sources.rb MyProject.xcodeproj
Run Code Online (Sandbox Code Playgroud)

或者只对一个目标进行排序:

./sort_sources.rb MyProject.xcodeproj My_Target
Run Code Online (Sandbox Code Playgroud)

它需要 gem xcodeproj:

gem install xcodeproj
Run Code Online (Sandbox Code Playgroud)

  • 这太棒了!感谢那! (2认同)