Liz*_*zza 6 macos xcode build-process ios run-script
我想知道是否可以从我的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()
Run Code Online (Sandbox Code Playgroud)
现在,只需运行python脚本,您就应该做好了。
我的解决方案需要一点红宝石知识。Cocoapods 中包含一个名为xcodeproj的库
sudo gem install cocoapods
Run Code Online (Sandbox Code Playgroud)
或者,
gem install xcodeproj
Run Code Online (Sandbox Code Playgroud)
仅安装库。
要创建将运行脚本阶段添加到目标中的 ruby 文件:
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()
Run Code Online (Sandbox Code Playgroud)
你可以运行它:
ruby add_run_phase_script.rb
Run Code Online (Sandbox Code Playgroud)
编辑:在查找中将“=”替换为“==”,否则第一个脚本将被替换,我们需要一个附加
我实际上决定添加一个运行脚本。事实证明这很容易。首先,在 Xcode 中,将运行脚本添加到您的项目中,并通过 diff 工具观察更改。'buildPhases' 数组中有一个附加项(它嵌套在一些任意命名的字典中),然后添加到 'buildPhases' 数组的键也被添加到 'objects' 字典中,其中的字典为代表实际的运行脚本构建阶段格式。
因此,要以编程方式复制此内容,请将 pbxproj 文件的内容放入 NSDictionary 中,然后遍历字典查找 buildPhases 数组。然后,添加您的密钥。最后,使用键和镜像 Xcode 中格式的字典将对象添加到“objects”数组中。
将文件保存回磁盘中的同一位置,瞧!您已以编程方式添加了运行脚本构建阶段。
| 归档时间: |
|
| 查看次数: |
2998 次 |
| 最近记录: |