我想知道是否可能在我的Mac实用程序应用程序中向另一个Xcode项目添加运行脚本构建阶段。我可以看到当添加运行脚本时Xcode项目发生了什么(执行差异比较),但我不知道如何安全地在代码中添加等效内容。
我是不是应该手动解析它?是否有文档或库可用于此?如果我能确保安全和正确,这将是一个有用的功能。我不想搞乱人们的Xcode项目!
我想知道是否可能在我的Mac实用程序应用程序中向另一个Xcode项目添加运行脚本构建阶段。我可以看到当添加运行脚本时Xcode项目发生了什么(执行差异比较),但我不知道如何安全地在代码中添加等效内容。
我是不是应该手动解析它?是否有文档或库可用于此?如果我能确保安全和正确,这将是一个有用的功能。我不想搞乱人们的Xcode项目!
对于任何想要简单完成此操作的人,有一个很好的Python库使你可以修改.pbxproj
文件中各种类型的内容。你可以在这里查看它:https://github.com/kronenthaler/mod-pbxproj。
现在,如果您想添加运行脚本构建阶段,可以编写一个简单的Python脚本,例如:
from pbxproj import XcodeProject
import sys
project = XcodeProject.load('path/to/my-project.xcodeproj/project.pbxproj')
project.add_run_script('bash my_run_script.sh')
project.save()
我的解决方案需要一点 Ruby 知识。有一个叫做 xcodeproj 的库,它被包含在 Cocoapods 中。
sudo gem install cocoapods
或者,
gem install xcodeproj
require 'xcodeproj'
project = Xcodeproj::Project.open "./TargetTest.xcodeproj"
for target in project.targets
puts "Target -> " + target.name
phase = target.shell_script_build_phases().find {|item| item.name == "My run phase"}
if (phase.nil?)
puts "Creating script 'My run phase'"
phase = target.new_shell_script_build_phase("My run phase")
phase.shell_script = "echo Hello script"
else
puts "'My run phase' already exist"
phase.shell_script = "echo modified"
end
end
project.save()
你可以运行它:
ruby add_run_phase_script.rb
编辑:在查找中将“=”替换为“==”,否则第一个脚本将被替换,我们需要进行追加
gist
的平台分享一下吗? - Ali