项目文件读取pbxproj格式的文件
在本文中,我们主要介绍项目文件的内容,自我感觉有个不错的建议和大家分享下
ios项目,会都有一个名为project.pbxproj的文件,这里头保存了项目的基本配置,例如你的项目有几个target,用什么证书之类。
笔者之前因项目须要,须要从这个文件中读取target、configuration等息信,本来想自己写程序现实。后来发当初github下面,经已有人现实了。用起来较比便方,不敢独享,在此分享。
一、途用(示例码代)
/*
* #%L
* xcode-project-reader
* %%
* Copyright (C) 2012 SAP AG
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
package com.sap.prd.mobile.ios.mios.xcodeprojreader;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import com.sap.prd.mobile.ios.mios.xcodeprojreader.buildphases.BuildPhase;
import com.sap.prd.mobile.ios.mios.xcodeprojreader.buildphases.PBXShellScriptBuildPhase;
import com.sap.prd.mobile.ios.mios.xcodeprojreader.jaxb.JAXBPlistParser;
import com.sap.prd.mobile.ios.mios.xcodeprojreader.jaxb.JAXBPlistParserTest;
public class UsageExamples
{
@Test
public void usage() throws Exception
{
JAXBPlistParser parser = new JAXBPlistParser();
// Optional step, if project file is not already in XML format.
// parser.convert(JAXBPlistParserTest.fileName, JAXBPlistParserTest.fileName)
Plist plist = parser.load(JAXBPlistParserTest.fileName);
ProjectFile projectFile = new ProjectFile(plist);
assertEquals("46", projectFile.getObjectVersion());
Project project = projectFile.getProject();
Target target = project.getTargets().get(0);
assertEquals("MyTest", target.getName());
target = project.getTargets().getByName("MyTest");
assertEquals("MyTest", target.getName());
BuildConfiguration config =
project.getBuildConfigurationList().getBuildConfigurations().get(0);
assertEquals("Debug",
config.getName());
config = project.getBuildConfigurationList().getBuildConfigurations().getByName("Release");
assertEquals("Release", config.getName());
BuildSettings buildSettings = config.getBuildSettings();
assertEquals("5.1",
buildSettings.getDict().getString("IPHONEOS_DEPLOYMENT_TARGET"));
assertEquals("YES",
buildSettings.getDict().getString("VALIDATE_PRODUCT"));
// LOW LEVEL (not recommended)
Array buildPhaseRefs = project.getTargets().get(0).getDict().getArray("buildPhases");
String ref = projectFile.generateReference();
buildPhaseRefs.add(ref);
Dict phase = projectFile.createDict();
phase.put("isa", "PBXShellScriptBuildPhase");
phase.put("files", projectFile.createArray());
phase.put("inputPaths", projectFile.createArray());
phase.put("outputPaths", projectFile.createArray());
phase.put("runOnlyForDeploymentPostprocessing", "0");
phase.put("shellPath", "/bin/sh");
phase.put("shellScript", "env > test.txt");
projectFile.setObjectByReference(ref, phase);
// HIGH LEVEL
ReferenceArray<BuildPhase> buildPhases = project.getTargets().get(0).getBuildPhases();
PBXShellScriptBuildPhase phase2 = new PBXShellScriptBuildPhase(projectFile);
phase2.setDefaultValues();
phase2.setShellScript("env > test.txt");
buildPhases.add(phase2);
/*
* Note: Collections are created on the fly.
*
* project.getTargets().get(0).getBuildPhases().size() would create a collection of targets and
* a collection of build phases if they don't exist. This is important to know, if you intend to
* save the property list later. If you don't want this behavior, you have to use the low level
* APIs.
*/
// Save back to disk
// parser.save(plist, JAXBPlistParserTest.fileName);
}
}
二、如何获得
项目的github网址:https://github.com/sap-production/XcodeProjectJavaAPI
文章结束给大家分享下程序员的一些笑话语录: 问:你觉得让你女朋友(或者任何一个女的)从你和李彦宏之间选一个,你觉得她会选谁?
答:因为李艳红这种败类,所以我没女友!

浙公网安备 33010602011771号