xcode “[CP]嵌入Pod框架”构建脚本排序

wsewodh2  于 2023-03-04  发布在  其他
关注(0)|答案(2)|浏览(152)

我在一个项目中使用了CocoaPods。作为CocoaPods设置的一部分,Xcode的“构建阶段”会得到两个Cocoapods脚本:

  • [CP] Embed Pods Frameworks
  • [CP] Copy Pods Resources

在同一个项目中,我使用了一个在[CP] Embed Pods Frameworks之后运行的脚本。我可以手动设置它,它可以使用

  • [CP] Embed Pods Frameworks
  • My Script
  • [CP] Copy Pods Resources

问题是运行pod deintegrate重新安装pod后,脚本顺序重置为:

  • My Script
  • [CP] Embed Pods Frameworks
  • [CP] Copy Pods Resources

由于这个项目的团队工作量很大,脚本顺序可能会被错误地重置,从而导致CI中断。
在Podfile中是否有办法控制脚本的顺序?

gk7wooem

gk7wooem1#

CocoaPods使用了一颗Ruby:https://github.com/CocoaPods/Xcodeproj来处理Xcode项目文件。因此,在它的帮助下,可以操纵项目中构建阶段的顺序。我做了一个快速测试,下面的脚本应该可以满足您的需要:

#fix_build_phases.rb
require 'xcodeproj'

def main
  begin
    proj = Xcodeproj::Project.open("YourProject.xcodeproj")
    target = proj.native_targets.select { |target| target.name == "YourTarget" }.first
    phase = target.build_phases.select { |phase| phase.display_name == "MyScript" }.first
    
    idx = -1
    target.build_phases.each_with_index do |phase, index| 
        if phase.display_name == "[CP] Embed Pods Frameworks"
            idx = index
        end
    end
    if idx > 0
        target.build_phases.move(phase, idx)
    end
    proj.save
  end
end

main

如果您希望确保脚本在pod安装后始终位于正确的位置,则需要将其添加到您的pod文件中:

post_install do |installer|
    system("(sleep 1 && ruby fix_build_phases.rb)&")
end

有一些延迟,因为它没有立即工作后安装,可能是由于Cocoapods更新项目本身在那一刻。

zaqlnxep

zaqlnxep2#

我还没有找到一种方法来决定一个特定的顺序。但是可以使用一个Cocoapods特性,允许在Podfile中指定用户脚本。
如果您在Podfile中使用script_phase,例如

target 'App' do
    all_your_pods

    script_phase :name => 'My Script', :script => 'echo "script"'
end

您将得到要插入到所有其他[CP]脚本之后的My Script,如下所示:

  • [CP] Embed Pods Frameworks
  • [CP] Copy Pods Resources
  • [CP-User] My Script

这解决了我的问题,即使不允许您声明特定的排序。

相关问题