我试图通过命令行将plist文件添加到xcode项目,一些博客建议编辑project.pbxproj
文件。我搜索了project.pbxproj
文件,但无法获得有关它的更多信息。任何人都可以让我知道xcode中project.pbxproj
文件的用途是什么?如何添加条目?
我正在使用this repo来处理它。
我写的脚本如下:
import sys
import os
from mod_pbxproj import XcodeProject
def addPlistInProject(corodova_proj_name, xcode_proj_name, plist_file_name):
print "Cordova project name : " + corodova_proj_name
present_directory = os.getcwd()
path_to_xcode_proj = present_directory + '/' + corodova_proj_name + '/platforms/ios/' + xcode_proj_name + '.xcodeproj/project.pbxproj'
print "Xcode Project Path : " + path_to_xcode_proj
project = XcodeProject.Load(path_to_xcode_proj)
project.get_or_create_group('new group')
project.add_file(plist_file_name)
if __name__ == "__main__":
corodova_proj_name = sys.argv[1]
xcode_proj_name = sys.argv[2]
plist_file_name = sys.argv[3]
print "Xcode Project Name = : " + xcode_proj_name
print "Plist File Path = : " + plist_file_name
addPlistInProject(corodova_proj_name, xcode_proj_name, plist_file_name)
我将调用脚本:
python myscript.py hello HelloWorld manisha-rules_camdo.plist
myscript.py
是我写的脚本,hello
是现有的cordova项目,HelloWorld
是使用cordova platform add iOS
创建的Xcode项目。
我将遵循的命令序列如下:
cordova create hello com.example.hello HelloWorld
cordova platform add iOS
py myscript.py hello HelloWorld manisha-rules_camdo.plist
其中hello
是cordova项目的名称和iOS目标的HelloWorld
名称。
答案 0 :(得分:6)
Cocoapods提供了一个用于编辑Xcode项目的Ruby API。它还有一个活跃的开发者社区:
答案 1 :(得分:6)
另一个很好的选择,特别是对于Cordova项目,是使用XCODE节点模块:node-xcode;你可以通过NPM轻松添加它。
一旦到位,您可以创建 after_prepare 挂钩来修改pbxproj,在每个构建上注入自定义源文件,其他框架等。实际上,Cordova本身在自己的构建过程中利用了这个模块。
在我的解决方案中,我首先通过npm添加模块:
npm install xcode --save-def
然后我创建并使用after_prepare钩子将额外的框架添加到我的XCode项目中:
var xcode = require('xcode'),
fs = require('fs'),
rootdir = process.argv[2],
projectPath = rootdir + '/platforms/ios/my-project/project.pbxproj',
proj = new xcode.project(projectPath);
proj.parse(function(err) {
if (err) {
console.log("Oh noes! XCODE project failed to parse:");
console.log(err);
} else {
proj.addFramework('Fabric.framework', {customFramework:true});
proj.addFramework('Crashlytics.framework', {customFramework:true});
proj.addFramework('AdSupport.framework');
proj.addFramework('FacebookSDK.framework', {customFramework:true});
fs.writeFileSync(projectPath, proj.writeSync());
console.log("Updated XCODE project with references to social libs!");
}
});
XCODE模块非常智能,可以知道您尝试添加的框架/文件/等是否已经存在,并且不会再尝试添加它们。
答案 2 :(得分:3)
你要做的不是最简单的事情。 Xcode pbxproj文件格式看起来像XML,但我认为它有相当多的专有/未记录的部分(很像iOS)。据我所知,Xcode没有办法从命令行添加文件。
我确实找到了一个可以用来修改XCode项目文件的Python脚本,但它已经有几年了,可能已经过时了。
Here is the Blog post that talks about it和here is the current GitHub repo(五个月前的最后更新,截至我输入此答案的日期)。
尝试一下,让我知道它是否适合你。