通过命令行向Xcode项目添加文件?在Xcode中使用project.pbxproj文件的目的?

15

我试图通过命令行向Xcode项目添加一个plist文件,一些博客建议编辑project.pbxproj文件。我搜索了关于project.pbxproj文件的信息,但是没有得到太多的信息。请问有人知道在Xcode中使用project.pbxproj文件的用途吗?如何向其中添加条目?

我正在使用这个仓库来处理它。

以下是我编写的脚本:

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 项目的名称,HelloWorld 是 iOS 目标的名称。

3个回答

9

8
另一个很好的选择是使用XCODE节点模块,特别适用于Cordova项目:node-xcode,你可以通过NPM轻松添加它。
一旦安装完成,你可以创建一个“after_prepare”钩子来修改pbxproj,在每次构建时注入自定义源文件、额外的框架等。事实上,Cordova在其构建过程中利用了这个模块。
在我的解决方案中,我首先通过npm添加了该模块:
npm install xcode --save-dev

然后我创建了一个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模块足够智能,它会知道你想要添加的框架/文件等是否已经存在,并且不会重复添加。

3
你所要求的并不是最直接的事情。Xcode的pbxproj文件格式看起来像XML,但我认为其中有很多专有/未记录的部分(就像iOS中的所有内容一样)。据我所知,Xcode没有任何方法可以通过命令行添加文件。
我找到了一个Python脚本,你可能可以用它来修改Xcode的项目文件,但它已经几年没更新了,可能已经过时。这里是谈论它的博客文章这里是当前的GitHub库(截至我打这个答案的日期,最后更新于五个月前)。
试试这个,让我知道是否适用于你。

我已经使用了你的博客!我已经通过明确说明我所做的事情来编辑问题!请检查我是否正确,因为我无法将文件添加到项目中。 - Nilesh Agrawal
我无法在Xcode 6中使用相同的脚本添加文件。 - Nilesh Agrawal
该死!看起来你需要在 Git 中打开一些“问题”(即错误报告)供作者查看。请访问以下链接:https://github.com/kronenthaler/mod-pbxproj/issues - Michael Dautermann
谢谢 :) 这非常有帮助。 - Nilesh Agrawal
我已经给作者发了邮件,正在等待回复。 - Nilesh Agrawal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接