通过脚本修改xcode pbxproj文件

分析 xcode pbxproj 文件格式

创建一个新的iOS工程demo, 进入工程目录, 找到project.pbxproj

1
2
3
4
5
demo git:(main) ✗ ls
demo demo.xcodeproj demoTests demoUITests
demo git:(main) ✗ cd demo.xcodeproj
demo.xcodeproj git:(main) ✗ ls
project.pbxproj project.xcworkspace xcuserdata

通过code打开看看文件内容。

The Xcode project file is an old-style plist (Next style) based on braces to delimit the hierarchy. The file begins with an explicit encoding information, usually the UTF-8 one.

project.pbxproj文件格式是旧式的plist,通过plutil将project.pbxproj转换为json

1
plutil -convert json project.pbxproj

通过可视化工具分析json内容

rootObject 对应的value是24位16进制的UUID。

展开objects 找到FEF5F49A2829212600E85303对应的object

buildConfigurationList 保存了配置信息,对应的UUID为 FEF5F49D2829212600E85303

buildConfigurations是个数组,我们分析第一个。找到FEF5F4CF2829212700E85303对应的object

展开buildSettings看一看

在xcode-build settings中可以找到对应的设置。

说明:

  1. objects数组包含了所有object 对象的信息, 包含rootObject, rootObject 的isa 是PBXProject

  2. 通过rootObject,根据UUID在objects数组找到对应的object, 可以构建一棵树,这棵树描述了xcode工程的所有配置信息。

通过脚本修改pbxproj文件的方法

  1. 通过plutil将pbxproj转换为json或xml, 编辑转换后的json或者xml。虽然文件内容会被转换为json或者xml, 但是xcode 依然可以加载修改后的pbxproj文件。 通过xcode 修改任何配置信息后,pbxproj会被重新改写为旧式的plist文件格式。

  2. 通过现成的一些工具

Xcodeproj 使用介绍

  1. 安装

    1
    gem install xcodeproj
  2. 写ruby脚本,不会的可以去学一下ruby, 入门很很简单

    1
    2
    3
    4
    5
    6
    7
    8
    9
    require 'xcodeproj'
    project_path = '/your_path/your_project.xcodeproj'
    project = Xcodeproj::Project.open(project_path)
    project.targets.each do |target|
    target.build_configurations.each do |config|
    config.build_settings['MY_CUSTOM_FLAG'] ||= 'TRUE'
    end
    end
    project.save

参考:

Let’s Talk About project.pbxproj

Xcode Project File Format


通过脚本修改xcode pbxproj文件
https://yxibng.github.io/2022/05/11/2022-05-11-命令行修改 xcode pbxproj 文件/
作者
yxibng
发布于
2022年5月11日
许可协议