问题 通过命令行将文件添加到Xcode项目?在Xcode中使用project.pbxproj文件?


我试图通过命令行将一个plist文件添加到xcode项目,一些博客建议编辑 project.pbxproj 文件。我搜索了一下 project.pbxproj 文件,但无法获得有关它的大量信息。任何人都可以让我知道什么是使用 project.pbxproj 文件在xcode?如何添加条目?

我在用 这个回购 使用它。

我写的脚本如下:

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 是使用创建的Xcode项目 cordova platform add iOS

我将遵循的命令序列如下:

cordova create hello com.example.hello HelloWorld
cordova platform add iOS
py myscript.py hello HelloWorld manisha-rules_camdo.plist

哪里 hello 是cordova项目的名称和 HelloWorld iOS目标的名称。


7687
2017-10-22 23:02


起源



答案:


Cocoapods提供了一个用于编辑Xcode项目的Ruby API。它还有一个活跃的开发者社区:

https://github.com/CocoaPods/Xcodeproj


6
2018-04-25 19:27





另一个很好的选择,特别是对于Cordova项目,是使用XCODE节点模块: 节点的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模块非常智能,可以知道您尝试添加的框架/文件/等是否已经存在,并且不会尝试再次添加它们。


4
2017-07-14 19:34





你要做的不是最直接的事情。 Xcode pbxproj文件格式看起来像XML,但我认为它有很多专有/未记录的部分(很像iOS)。据我所知,Xcode没有任何方法可以从命令行添加文件。

我确实找到了一个Python脚本,您可以使用它来修改XCode的项目文件,但它已经有几年了,可能已经过时了。

这是博客文章,讨论它 和 这是目前的GitHub回购 (最近更新于五个月前,截至我输入此答案的日期)。

尝试一下,让我知道它是否适合你。


3
2017-10-22 23:14



我已经用你的博客了!编辑了这个问题,说明我已经完成了!请检查我是否正在编写,因为我没有将文件添加到项目中 - Nilesh Agrawal
我无法在xcode 6中使用相同的脚本添加文件 - Nilesh Agrawal
妈的!听起来你需要打开一些 Git中的“问题”(即错误报告) 供作者看一下。 - Michael Dautermann
谢谢:)这是很好的帮助。 - Nilesh Agrawal
我已经邮寄了作者我在等待回复。 - Nilesh Agrawal


答案:


Cocoapods提供了一个用于编辑Xcode项目的Ruby API。它还有一个活跃的开发者社区:

https://github.com/CocoaPods/Xcodeproj


6
2018-04-25 19:27





另一个很好的选择,特别是对于Cordova项目,是使用XCODE节点模块: 节点的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模块非常智能,可以知道您尝试添加的框架/文件/等是否已经存在,并且不会尝试再次添加它们。


4
2017-07-14 19:34





你要做的不是最直接的事情。 Xcode pbxproj文件格式看起来像XML,但我认为它有很多专有/未记录的部分(很像iOS)。据我所知,Xcode没有任何方法可以从命令行添加文件。

我确实找到了一个Python脚本,您可以使用它来修改XCode的项目文件,但它已经有几年了,可能已经过时了。

这是博客文章,讨论它 和 这是目前的GitHub回购 (最近更新于五个月前,截至我输入此答案的日期)。

尝试一下,让我知道它是否适合你。


3
2017-10-22 23:14



我已经用你的博客了!编辑了这个问题,说明我已经完成了!请检查我是否正在编写,因为我没有将文件添加到项目中 - Nilesh Agrawal
我无法在xcode 6中使用相同的脚本添加文件 - Nilesh Agrawal
妈的!听起来你需要打开一些 Git中的“问题”(即错误报告) 供作者看一下。 - Michael Dautermann
谢谢:)这是很好的帮助。 - Nilesh Agrawal
我已经邮寄了作者我在等待回复。 - Nilesh Agrawal