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 */
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
awk 상용 명령awk 는 모든 입력 줄 을 하나의 기록 으로 인식 하고 그 줄 의 모든 단어 도 메 인 을 하나의 필드 로 인식 합 니 다. ARGC 명령 줄 에 awk 스 크 립 트 가 들 어 오 는 매개...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.