有没有人知道要读取/写入Xcode项目文件的库 .xcodeproj / .pbxproj?欢迎任何语言。
提前致谢。
答案 0 :(得分:29)
Xcode项目的表面语法是“旧式plist”。您可以使用命令
轻松将其转换为XML plistplutil -convert xml1 -o - myproj.xcodeproj/project.pbxproj
请注意,这不是“真正的XML”,而是以XML语法表示的Mac OS X plist结构;它几乎完全由键值对字典和数组组成。 Xcode将读取XML表示,但在项目打开时将其转换回“旧式plist”。
plist中项目的结构和关系遵循项目的结构。 UUID用于交叉引用项目与其目标之间的项目,以及项目与项目包装器中的用户文件之间的项目。
'isa'键标识每种对象。 PBXProject包含PBXFileReference,PBXGroup,PBXNativeTarget和PBXBuildConfiguration对象。
目标包含PBXBuildPhase对象,这些对象包含对文件引用的交叉引用; BuildConfigurationLists,用于存储目标的构建设置,以及其他目标设置,如目标类型和名称。
buildConfigurationLists交叉引用buildConfigurations,后者又包含buildSettings的字典。
我建议首先查看旧式plist文本,因为它更具可读性,实际上有内联注释来告诉你什么是什么。然后,您可以使用XML工具根据自己的喜好编辑或编写项目文件。
答案 1 :(得分:21)
我最终创建了一个,它在github上托管:
https://github.com/jasperblues/XcodeEditor
允许列出标题,文件,添加源文件,将源文件设置为目标成员,添加图像,创建组等。
它的工作原理是操作project.pbxproj文件的内容。用于:
答案 2 :(得分:5)
我刚刚发现了这个:https://github.com/alunny/node-xcode我还没有使用过它,但对于Node.js的开发人员而言看起来很有希望。
答案 3 :(得分:3)
您还可以考虑使用PlistBuddy命令:
答案 4 :(得分:3)
试试这个:https://github.com/sap-production/XcodeProjectJavaAPI
它可以读取和写入任何Property List文件,并包含一个语义模型来读取和操作Xcode Project文件。语义模型处于早期阶段,但可以很容易地扩展。
它也在SAP的Xcode Maven插件中大量使用,该插件将于本月发布。
答案 5 :(得分:3)
CocoaPods现在有一个ruby库来操作pbxproj文件:
答案 6 :(得分:2)
这是一个很好的Python包。文档不是很好,但源代码非常有条理,你可以找到你需要的东西。
答案 7 :(得分:-1)
对于PHP(轻松移植到您需要的任何语言),非常基本的只写:
function modifyPlistXCodeProject($file_path,$app_name,$bundle_identifier,$latest_version,$bundle_version)
{
$data = file_get_contents($file_path);
$changes = Array();
$changes['PRODUCT_BUNDLE_IDENTIFIER'] = $bundle_identifier;
foreach ($changes as $key => $value){
$data = oldStylePlistReplace($data,$key,$value);
}
file_put_contents($file_path, $data);
}
function oldStylePlistReplace($data,$key,$value){
$e = explode($key,$data);
for ($i=1;$i<count($e);$i++){
$row_i = $e[$i];
$nextline_pos = stripos($row_i,"\n");
$text_i = '= '.$value.';'.substr($row_i, $nextline_pos);
$e[$i] = $text_i;
//var_dump(substr($text_i,0,100));exit();
}
return implode($key,$e);
}