在开发iOS应用的时候,大部分都是直接采用Xcode进行开发,但有时候需要用命令行来创建工程,比如最近在做ci的持续集成,就只能通过命令行的方式,这时候就需要了解一下工程文件的构成。我们知道工程文件的相关信息保存在project.pbxproj,因此可以通过脚本创建出pbxproj文件,完成基础工程的创建。
pbxproj
下面介绍一下pbxproj文件,可以拖动.xcodeproj文件到文本编辑器,如sublime,查看pbxproj文件的组成方式,主要包括:
- PBXBuildFile PBXFileReference
这两个section保存中工程文件相关的信息:包含文件的类型,路径,名称等
1 | /* Begin PBXBuildFile section */ |
- PBXGroup
这个section保存着工程文件的分组信息:分组的名称,以及该组内含有的文件,比如下面的例子,一个TestChat分组里面还有一个Supporting Files子分组,同时该组包含AppDelegate的.h和.m两个文件,该分组对应的路径为TestChat:
1 | * Begin PBXGroup section */ |
- PBXNativeTarget
该section保存工程创建的target信息:包含target的对应的配置信息、创建规则、依赖、名称和类型等信息
1 | /* Begin PBXNativeTarget section */ |
- XCBuildConfiguration XCConfigurationList
这两个section保存着工程相关的配置信息:下面对应的是debug模式下的配置信息,可以看到里面包含CODE_SIGN_IDENTITY,sdk,framework的搜索路径等信息。
1 | /* Begin XCBuildConfiguration section */ |
通过上面分析一个pbxproj文件的过程可以看出,要创建一个工程,首先需要添加相关的文件,然后设置需要生成的target以及对应的配置信息就行了。
命令行生成pbxproj
上面大概了解了一个pbxproj文件的整体构造,要想生成一个这样的文件,可以自己按照对应的格式书写,或者借助一些脚本工具,这里推荐cocoapods的Xcodeproj,项目的地址:Xcodeproj ,该工具是用ruby语言实现的,可以用它来修改和创建pbxproj文件,下面是自己用ruby生成project文件的一部分示例代码:
1 | #创建 Example.xcodeproj工程文件,并保存 |
通过上面的脚本生产的工程如下:
由于对ruby不太熟悉,因此有错误的地方欢迎提出!