XCode 서명 설정 의 빠 른 설정 도구

전에 무면허 로 컴퓨터 테스트 를 하 는 글 을 본 적 이 있어 서 매우 유용 합 니 다 ~
그러나 당시 에는 손 이 싸 서 기본 '아이 폰 개발 자' 서명 을 자신의 이름 으로 바 꿨 다.
나중에 모든 XCode 항목 을 직접 가 져 왔 습 니 다. 실제 컴퓨터 에서 효 과 를 보고 서명 설정 을 다시 설정 하고 싶 습 니 다.
물론, 그 문장 에 따라 이 이름 을 다시 수정 할 수 있 지만, 나 는 당시 에 게 을 러 서 줄곧 이렇게 하고 있 었 다.
지금 은 그렇게 오 랜 시간 이 지나 서 내 컴퓨터 에 저 장 된 많은 공사 들 이 이 알 의 아 픈 설정 을 계속 사용 하고 있다.
그래서 잠시 라 도 고 쳐 야 하 는 것 도 신경 쓰 이 는 일이 다.
그리고 최근 에 저희 팀 은 Versions 를 통 해 프로젝트 관 리 를 하고 협업 개발 을 하고 있 습 니 다.
여러 사람 이 충돌 문 제 를 어렵 게 해 결 했 지만 만 족 스 럽 지 못 한 점 이 있다.
그것 이 바로 서명 의 문제 입 니 다. 나의 또 다른 동료 가 컴퓨터 테스트 를 하면 그 자신의 합 법 적 인 서명 을 사용 합 니 다.
제 가 업 데 이 트 를 하거나 업 데 이 트 를 한 후에 각자 의 서명 이 망 가 져 서 반복 적 으로 서명 설정 을 했 습 니 다 ~
그리고 설상가상 입 니 다. XCode 가 서명 을 수정 할 때 수정 이 안 될 때 도 있 습 니 다. 끄 고 열 어야 고 칠 수 있 는 동작 입 니 다. bug 입 니 다 ~
저번 에 관찰 한 이후로 procject. pbxproj 파일 이후 에 저 는 서명 한 설정 데이터 도 이 안에 명문 으로 저장 되 어 있다 는 것 을 알 게 되 었 습 니 다 ~
그렇다면 충분히 사용 할 수 있 습 니 다. 자바 가 텍스트 처리 도 구 를 써 서 서명 설정 을 텍스트 로 바 꾸 고 제 가 자주 사용 하 는 서명 설정 으로 바 꿉 니 다.
내 가 생각 하 는 것 을 사용 하기 시작 하 다. 자바 의 정규 표현 식 이지 만 하나 도 성공 하지 못 했 습 니 다.
주로 제 가 정규 표현 식 의 적용 범 위 를 잘 모 르 기 때 문 입 니 다.
정규 표현 식 은 텍스트 의 줄 내 처 리 를 잘 하 는데 여러 줄 의 텍스트 를 뛰 어 넘 는 경우 정규 로 는 좋 은 효 과 를 얻 을 수 없습니다.
주로 자바 정규 표현 식 의 마스크 때 문 입 니 다. "이외 의 모든 문자 만 일치 할 수 있 습 니 다.
나중에 나 는 서명 설정 의 시작 과 끝 에 고정 적 인 주석 을 하 는 것 을 보 았 다.
이렇게 되면 저 는 정규 표현 식 의 해결 방안 을 버 리 고 String. indexOfString () 으로 이 루어 졌 습 니 다.
다음은 기본적으로 매우 간단 한 일이 다. 몇 줄 의 코드 가 모든 문 제 를 해결 했다. 아래 의 코드 는:
RepairWonderPipe.java
package org.bruce.xcproj.codesign.repair;

import java.io.File;
import java.io.InputStream;



/**
 * @author Bruce Yang
 *       WonderPipe   (             )~
 */
public class RepairWonderPipe {
	public static final String PROJECT_DIR = "/Users/user/SVN/WonderPipe";
	

	/**
	 *                  ~
	 * @param dirProject
	 * @return
	 */
	public static boolean isProjectDir(String strProjectDir) {
		File dirProject = new File(strProjectDir);
		if(dirProject.exists() && dirProject.isDirectory()) {
			for(File fileItem : dirProject.listFiles()) {
				if(fileItem.getName().endsWith(".xcodeproj")) {
					return true;
				}
			}
		}
		System.out.println("       ~");
		return false;
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		// 1.          ~
		if(!isProjectDir(PROJECT_DIR)) {
			System.err.println("   XCode         ~");
			return;
		}
		
		// 2.                ~
		StringBuffer sbPath = new StringBuffer(PROJECT_DIR);
		sbPath.append(File.separator).append("WonderPipe.xcodeproj");
		sbPath.append(File.separator).append("project.pbxproj");
		String strPath = sbPath.toString();
		
		File f = new File(strPath);
		if(!f.exists()) {
			System.err.println("     : " + strPath);
			return;
		}
		
		// 3.          ~
		String fContents = StringFileBridge.file2String(f, "utf-8");
//		System.out.println(fContents);
		
		// 4.  ~
		String strBegin = "/* Begin XCBuildConfiguration section */";
		int iBeginIndex = fContents.indexOf(strBegin);
		
		String strEnd = "/* End XCBuildConfiguration section */";
		int iEndIndex = fContents.indexOf(strEnd) + strEnd.length();
		
		String strToBeReplaced = fContents.substring(iBeginIndex, iEndIndex);
//		System.err.println(strToBeReplaced);
		
		String strResPath = "/org/bruce/xcproj/codesign/repair/XCBuildConfigurationBakup.txt";
		InputStream is = RepairWonderPipe.class.getResourceAsStream(strResPath);
		String strCfgTemplate = StringFileBridge.stream2String(is, "utf-8");
//		System.err.println(strCfgTemplate);
		
		String strOutput = fContents.replace(strToBeReplaced, strCfgTemplate);
		
		// 5.             ~
		StringFileBridge.string2File(strOutput, f);
		
		
//		test0();
//		test1();
//		test2();
	}
	
	
	/**
	 *      *    ,       ~
	 */
	public static void test0() {
		String str = "* sdfsdfsd *";
		String reg = "\\* sdfsdfsd \\*";
		if(str.matches(reg)) {
			System.out.println("no!");
		}
	}
	
	public static void test1() {
		String str = "/  /";
		String reg = "/.*/";
		if(str.matches(reg)) {
			System.out.println("  ");
		}
	}
	
	/**
	 *   :                 ~
	 */
	public static void test2() {
//		String str = "123123
/* */
1231231"; String str = "
/* */
"; String reg = "[.
]*/\\* \\*/[.
]*"; if(str.matches(reg)) { System.out.println(" "); } } }

StringFileBridge.java
package org.bruce.xcproj.codesign.repair;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.io.Reader;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;

/**
 *             
 * @author leizhimin 2009-7-14 15:54:18
 */
public class StringFileBridge {
	/**
	 *             ,           
	 * @param file     
	 * @param charset        
	 * @return         
	 */
	public static String file2String(File file, String charset) {
		StringBuffer sb = new StringBuffer();
		try {
			FileInputStream fis = new FileInputStream(file);
			InputStreamReader isr = new InputStreamReader(fis, charset);
			BufferedReader br = new BufferedReader(isr);
			LineNumberReader reader = new LineNumberReader(br);
			
			String line;
			while ((line = reader.readLine()) != null) {
				sb.append(line).append(System.getProperty("line.separator"));
			}
			reader.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return sb.toString();
	}
	
	
	/**
	 * @author Bruce Yang
	 *               。
	 * @param unicodeStr
	 * @return
	 */
	public static String changeEncode(String unicodeStr, String charset) {
		String utf8Str = null;
		try {
			utf8Str = new String(unicodeStr.getBytes(charset));
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return utf8Str;
	}
	
	
	/**
	 *            ,        ,       ,        ,       ,     ,           。
	 * @param text    
	 * @param distFile        
	 * @return           true,    false
	 */
	public static boolean string2File(String text, File distFile) {
		if (!distFile.getParentFile().exists()) {
			distFile.getParentFile().mkdirs();
		}
		BufferedReader br = null;
		BufferedWriter bw = null;
		boolean flag = true;
		try {
			br = new BufferedReader(new StringReader(text));
			bw = new BufferedWriter(new FileWriter(distFile));
			char buf[] = new char[1024 * 64]; //      
			int len;
			while ((len = br.read(buf)) != -1) {
				bw.write(buf, 0, len);
			}
			bw.flush();
			br.close();
			bw.close();
		} catch (IOException e) {
			flag = false;
			e.printStackTrace();
			System.out.println("            !");
		}
		return flag;
	}
	
	/**
	 *         
	 * @param in 		   
	 * @param charset 	      
	 * @return 			    
	 */
	public static String stream2String(InputStream in, String charset) {
		StringBuffer sb = new StringBuffer();
		try {
			Reader reader = new InputStreamReader(in, charset);
			int length = 0;
			for (char[] c = new char[1024]; (length = reader.read(c)) != -1;) {
				sb.append(c, 0, length);
			}
			reader.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return sb.toString();
	}
	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String x = file2String(new File("/Users/user/Desktop/123.java"), "GBK");
		System.out.println(x);
		boolean b = string2File(x, new File("/Users/user/Desktop/1234.java"));
		System.out.println(b);
	}
}

XCbuildConfiguration Bakup. txt (PS: 앞의 두 종류 와 같은 package 아래 에 놓 습 니 다 ~)
/* Begin XCBuildConfiguration section */
		BAAEAE4815A89BC600FF66D7 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
				CODE_SIGN_ENTITLEMENTS = "";
				CODE_SIGN_IDENTITY = "";
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_OPTIMIZATION_LEVEL = 0;
				GCC_PREPROCESSOR_DEFINITIONS = (
					DEBUG,
					"COCOS2D_DEBUG=1",
				);
				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
				GCC_VERSION = com.apple.compilers.llvmgcc42;
				GCC_WARN_ABOUT_RETURN_TYPE = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 4.3;
				"PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
				SDKROOT = iphoneos;
			};
			name = Debug;
		};
		BAAEAE4915A89BC600FF66D7 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
				CODE_SIGN_ENTITLEMENTS = "";
				CODE_SIGN_IDENTITY = "";
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_PREPROCESSOR_DEFINITIONS = NDEBUG;
				GCC_VERSION = com.apple.compilers.llvmgcc42;
				GCC_WARN_ABOUT_RETURN_TYPE = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 4.3;
				OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
				"PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
				SDKROOT = iphoneos;
			};
			name = Release;
		};
		BAAEAE4B15A89BC600FF66D7 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = YES;
				CODE_SIGN_ENTITLEMENTS = Entitlements.plist;
				CODE_SIGN_IDENTITY = yang3wei;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = yang3wei;
				COPY_PHASE_STRIP = NO;
				GCC_DYNAMIC_NO_PIC = NO;
				GCC_PRECOMPILE_PREFIX_HEADER = YES;
				GCC_PREFIX_HEADER = WonderPipe/Prefix.pch;
				"GCC_THUMB_SUPPORT[arch=armv6]" = "";
				GCC_VERSION = com.apple.compilers.llvmgcc42;
				INFOPLIST_FILE = WonderPipe/Resources/Info.plist;
				IPHONEOS_DEPLOYMENT_TARGET = 4.3;
				OTHER_LDFLAGS = "-lz";
				PRODUCT_NAME = "$(TARGET_NAME)";
				PROVISIONING_PROFILE = "";
				"PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
				TARGETED_DEVICE_FAMILY = "1,2";
				USER_HEADER_SEARCH_PATHS = "\"WonderPipe/libs\"";
				WRAPPER_EXTENSION = app;
			};
			name = Debug;
		};
		BAAEAE4C15A89BC600FF66D7 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = YES;
				CODE_SIGN_ENTITLEMENTS = Entitlements.plist;
				CODE_SIGN_IDENTITY = yang3wei;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = yang3wei;
				COPY_PHASE_STRIP = YES;
				GCC_PRECOMPILE_PREFIX_HEADER = YES;
				GCC_PREFIX_HEADER = WonderPipe/Prefix.pch;
				"GCC_THUMB_SUPPORT[arch=armv6]" = "";
				GCC_VERSION = com.apple.compilers.llvmgcc42;
				INFOPLIST_FILE = WonderPipe/Resources/Info.plist;
				IPHONEOS_DEPLOYMENT_TARGET = 4.3;
				OTHER_LDFLAGS = "-lz";
				PRODUCT_NAME = "$(TARGET_NAME)";
				PROVISIONING_PROFILE = "";
				"PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
				TARGETED_DEVICE_FAMILY = "1,2";
				USER_HEADER_SEARCH_PATHS = "\"WonderPipe/libs\"";
				VALIDATE_PRODUCT = YES;
				WRAPPER_EXTENSION = app;
			};
			name = Release;
		};
/* End XCBuildConfiguration section */

좋은 웹페이지 즐겨찾기