프로젝트를 열 수 없습니다… 프로젝트 파일을 구문 분석 할 수 없기 때문에 열 수 없습니다.


93

나는 아이폰 앱을 만들기 위해 한동안 일 해왔다. 오늘 배터리가 부족할 때 작업을하면서 소스 파일을 계속 저장했는데 전원이 꺼졌습니다.

이제 컴퓨터를 다시 연결하고 전원이 잘 들어 오면 프로젝트 파일을 열려고하면 오류가 발생합니다.

프로젝트를 열 수 없습니다

프로젝트 파일을 구문 분석 할 수 없기 때문에 ... 프로젝트를 열 수 없습니다.

내가 여기서 회복 할 수 있다는 것을 사람들이 아는 방법이 있습니까? 이전 프로젝트 파일을 사용하고 다시 삽입 한 다음 컴파일을 시도했습니다. 원하는 모든 파일을 찾지 못하기 때문에 아마도 펑키 한 오류가 발생합니다.

가능하면 프로젝트를 처음부터 다시 빌드하고 싶지 않습니다.


편집하다

좋아, 나는 이것과 작동하는 약간 오래된 프로젝트 파일을 비교했고 파일에 약간의 손상이 있음을 확인했습니다. 그것들 (좋은 부분과 최신 부분)을 병합 한 후 이제 작동합니다.

SVN에 대한 좋은 점. 나는 하나가 있지만 XCode를 그것과 동기화하려는 약간의 재미가 있습니다. 이제 더 많은 시간을 보내겠습니다 ... ;-)

여기에 이미지 설명 입력

답변:


228

나는이 문제를 발견했고 나의 선배는 나에게 해결책에 대해 말했다.

projectname.xcodeproj여기 에서 파일을 마우스 오른쪽 버튼으로 클릭 projectname하면 프로젝트 이름이됩니다. 이제 오른쪽 클릭 후 Show Packages Contents를 선택 합니다 . 그 후 projectname.pbxproj텍스트 편집기에서 파일 을 엽니 다 . 이제 포함하는 행을 검색 <<<<<<< .mine, =======>>>>>>> .r. 예를 들어 제 경우에는 다음과 같이 보였습니다.

<<<<<<< .mine
    9ADAAC6A15DCEF6A0019ACA8 .... in Resources */,
=======
    52FD7F3D15DCEAEF009E9322 ... in Resources */,
>>>>>>> .r269

이제 사람들을 제거 <<<<<<< .mine, =======그리고 >>>>>>> .r라인은 다음과 같을 것입니다 그래서

    9ADAAC6A15DCEF6A0019ACA8 /* BuyPriceBtn.png in Resources */,

    52FD7F3D15DCEAEF009E9322 /* discussionForm.zip in Resources */,

이제 Xcode 프로젝트를 저장하고 열고 빌드하십시오. 다 괜찮을거야.


11
감사합니다. 작동합니다. 제 경우에는 ".mine"또는 ".r"이 아니었지만 다른 말을했습니다 ... Ctrl-F로 "==="장소를 찾으십시오.
ck_

이것은 답으로 표시되어야합니다. 정말 좋은 물건, 감사
오웬 gerig

12
이런 일이 발생하는 이유를 말하면 : 버전 제어가 프로젝트 파일의 두 가지 충돌 버전을 병합하려고합니다. 적절한 병합이 무엇인지 버전 제어에 수동으로 알려야합니다. XCode가 이것을 우아하게 처리하지 못한다는 사실은 매일 저에게 큰 성가신 일입니다.
Thane Brimhall 2013 년

감사합니다. 내 문제는 <<<<<<<<< HEAD ======= >>>>>>> 형식으로 나왔습니다. .pbxproj 파일이 끝날 무렵 두 지점에있었습니다. 이 항목을 제거하면 .xcodeproj 파일을 다시 실행할 수있었습니다. 이러한 항목이 파일의 나머지 부분에서 눈에 띄게 벗어 났는지 확인합니다.
AgnosticDev

1
제 경우에는 <<<<<<< HEAD, ======, >>>>>>> 일부 영숫자입니다. 이 세 줄을 제거한 다음 저장하고 엽니 다. 매력처럼 일했다 !!! 감사합니다 Allot.
Gowrie Sammandhamoorthy

47

무함마드의 답변은 매우 도움이되었습니다 (그리고 내 문제를 해결하는 데 도움이되었습니다). 그러나 >>>>>>> ======= <<<<<<<를 제거하는 것만으로는 project.pbxproj (나를 위해)의 구문 분석 문제를 해결하기에 충분하지 않았습니다. 병합 후.

project.pbxproj 파일의 PBXGroup 섹션에서 병합 충돌이 발생했습니다 (시작은 다음과 같은 블록 주석으로 표시됩니다 : / * Begin PBXGroup section * /). 그러나 내가 만난 문제는 project.pbxproj 파일의 다른 위치에서도 발생할 수 있습니다.

다음은 내가 만난 병합 충돌의 단순화입니다.

    <<<<<<< HEAD
          id = {
            isa = PBXGroup;
            children = (
                 id
            );
            name = "Your Group Name";
    =======
          id = {
            isa = PBXGroup;
            children = (
                 id
            );
            name = "Your Group Name";
    >>>>>>> branch name
            sourceTree = "<group>";
          };

병합 충돌 마커를 제거했을 때 다음과 같이 남았습니다.

          id = {
            isa = PBXGroup;
            children = (
                 id
            );
            name = "Your Group Name";
          id = {
            isa = PBXGroup;
            children = (
                 id
            );
            name = "Your Group Name";
            sourceTree = "<group>";
          };

일반적으로 병합 충돌 마커를 제거하면 project.pbxproj 파일의 구문 분석 문제가 해결되고 작업 영역 무결성이 복원됩니다. 이번에는 그렇지 않았습니다.

다음은 문제를 해결하기 위해 내가 한 일입니다.

          id = {
            isa = PBXGroup;
            children = (
                 id
            );
            name = "Your Group Name";
            sourceTree = "<group>";
          };

          id = {
            isa = PBXGroup;
            children = (
                 id
            );
            name = "Your Group Name";
            sourceTree = "<group>";
          };

실제로 첫 번째 PBXGroup 끝에 두 줄을 추가해야했습니다.

Head 또는 병합 브랜치에서 변경 사항을 삭제하도록 선택했다면 구문 분석 문제가 없었을 것입니다! 그러나 제 경우에는 각 분기에서 추가 한 두 그룹을 모두 유지하고 싶었고 단순히 병합 마커를 제거하는 것만으로는 충분하지 않았습니다. 올바른 형식을 유지하려면 project.pbxproj 파일에 추가 줄을 추가해야했습니다.

따라서 병합 충돌을 모두 해결했다고 생각한 후 구문 분석 문제가 발생하는 경우 .pbxproj를 자세히 살펴보고 서식 문제가 없는지 확인하는 것이 좋습니다.


병합 충돌을 해결할 때 실수로 콜론 및 / 또는 중괄호를 제거했을 수 있습니다. 병합 충돌에서 적절한 부분 (또는 둘 다)을 신중하게 선택하고 마커를 제거해야합니다. 그게 다야.
Stas

sourceTree = "<그룹>"추가; }; 나를 위해 해결했습니다! 정말 도움이되었습니다! 감사!
니틴 Alabur

이것에 무언가를 추가하고 싶었습니다. 나는 이와 같은 문제가 있었지만 CocoaPods와 작업 공간으로 작업했습니다. Xcode가 수정 사항을 적용하려면 작업 공간을 핵으로 만들고 다시 만들어야했습니다.
Nico

@Nico : 핵무기 방법을 공유 하시겠습니까? 내가 여기에 유사한 문제에 직면하고 힘든 시간을 보내고있어
이삭

.pbxproj 파일을 수정 한 후 프로젝트를 닫고 다시 열어야 작동하지만 제대로 작동한다는 것을 알았습니다. 감사합니다 SnoopyProtocol!
KeithTheBiped 2019-04-23

28

Cordova를 사용하면 공백이있는 프로젝트를 만들 수 있고 Xcode는 처리 방법을 모르기 때문에 정확히 동일한 오류가 발생했습니다.


감사합니다. 이것이 답이었습니다. 공간이 생겼습니다.
Max

Cordova Phonegap 3.4와 동일
Miles M.

이것은 내가 가지고 있던 문제였습니다. 감사!
fray88

@ fray88 Xcode 프로젝트와 cordova 폴더 모두에 대해 폴더 이름의 공간을 제거했지만 이제 오류 : ENOENT : no such file or directory 오류가 발생합니다. 어떻게하면 공간을 꺼내 작업을 할 수 있나요? 감사합니다.
SaH

25

비슷한 문제가있었습니다.

스크린 샷 1

다음은이를 해결하는 단계입니다.

  1. 이동은 어디 폴더로 projectName.xcodeproj.

    스크린 샷 2

  2. 마우스 오른쪽 버튼을 클릭하고 ' Show Package Contents'를 선택 합니다. .pbxproj확장자 가있는 파일 목록을 볼 수 있습니다 .

    스크린 샷 3

  3. 을 선택 project.pbxproj합니다. ' Text Edit'를 사용하여이 파일을 마우스 오른쪽 버튼으로 클릭하고 엽니 다 .

    스크린 샷 4

  4. <<<<<< .mine, ============및 을 (를) 볼 수 있습니다 >>>>>>>>>> .r123. 일반적으로 SVN에서 업데이트 할 때 발생하는 충돌입니다. 이것을 삭제하고 파일을 저장하십시오.

    스크린 샷 5

    스크린 샷 6

  5. 이제 오류 메시지없이 프로젝트 수 있습니다 .


23

Xcode 프로젝트 파일의 시각적 분석은 병합 후 오류를 찾는 데 도움이되지 않았습니다. syslog를 살펴본 후 Xcode가 파일을 구문 분석하려고 할 때 다음 줄을 찾았습니다.

2/7/14 12:39:12.792 PM Xcode[9949]: CFPropertyListCreateFromXMLData(): Old-style plist parser: missing semicolon in dictionary on line 4426. Parsing will be abandoned. Break on _CFPropertyListMissingSemicolon to debug.

해당 프로젝트를 수정 한 후 정상적으로 열 수 있습니다.


2
감사합니다. 제 하루를 구했습니다. :)
Centurion

감사합니다 .. 이것은 육안 검사보다 훨씬 더 의미가 있습니다
Ciprian 2015

2
이것은 엄청난 도움이되었습니다. 난 그냥 "tail -f /var/log/system.log"하고 프로젝트를 열려고했습니다. system.log에서 구문 분석 예외가 발생한 줄 번호를 보여주는 오류 ( "Xcode"검색)가 표시되었습니다. 그런 다음 vi에서 파일을 열고 파일 (^ H)에서 제어 문자를보고 해당 단일 문자와 짜잔을 제거했습니다! 열 수있었습니다.
DustinB

최선의 대답은 치고 시도하는 것보다. 콘솔 로그를 읽습니다.
Urmil Setia

5
xcodebuild -project Project.xcodeproj build와 같이 터미널에서 빌드하십시오. 터미널에서 바로 오류를 볼 수 있습니다.
Slavko Coolesoff 2011

6

프로젝트 파일의 구문을 분석하십시오. 터미널의 프로젝트 내부에서 확인하십시오.

plutil -lint project.pbxproj

그러면 파서의 오류가 표시됩니다.

가능한 문제 : 일부 프로젝트 union는 프로젝트 파일에 대해 git 병합 전략 을 설정 합니다. 이것은 대부분의 경우 작동하지만 실패하면 프로젝트 파일을 자동으로 종료합니다. 이 전략은 .gitattributes저장소 의 파일에 정의 되어 있습니다.


3

최근에 내 지점을 원격 지점과 병합하려고 할 때 동일한 문제에 직면했습니다. 그러나 위의 솔루션 중 어느 것도 내 문제에 적합하지 않은 것 같습니다.

내 분기 또는 원격 분기의 project.pbxproj 파일간에 병합 충돌이 없었습니다. 그러나 내 projectName.xcodeproj 파일은 질문에 표시된 것과 같은 이유로 열리지 않습니다.

내 해결책은 텍스트 편집기를 사용하여 project.pbxproj를 살펴보고 파일 구문에 이상이 있는지 (예 : 추가 중괄호) 확인하는 것이 었습니다. 병합 된 파일과 비교하여 이전 파일에서 삽입되거나 삭제 된 줄에 집중하여이 프로세스를 가속화했습니다. 자세히 살펴보면 문제의 원인이 다음 줄의 반복이라는 것을 알았습니다.

xxxxxxxxxxxxx /* [CP] Check Pods Manifest.lock */ = {

병합 된 파일에서. 이로 인해 닫히지 않은 중괄호 및 결과적으로 잘못된 pbxproj 구문이 발생했습니다. 위의 줄을 삭제하면 문제가 해결되었습니다.


2

나는 방금 같은 문제에 부딪쳤다. 항상 git에 의해 생성 된 문자열을 제거했지만 Xcode는 여전히 .xcodeproj 파일 열기를 거부했습니다. 그러나 모든 것이 정확하고, 누락 된 괄호 등이 없습니다. 마지막으로 Xcode종료 하고 Xcode가 닫힐 때 프로젝트를 열려고 했습니다. 누군가에게 도움이되기를 바랍니다.

편집하다:

.xcodeproj 파일의 충돌을 해결하려면 다음과 같은 편리한 스크립트를 사용할 수 있습니다.

  1. 프로젝트 디렉토리에 빈 .sh 파일을 만듭니다 (예 : resolve_conflicts.sh).
  2. 다음은 스크립트입니다.

    projectfile = find -d . -name 'project.pbxproj' projectdir = echo *.xcodeproj projectfile = "$ {projectdir} /project.pbxproj"tempfile = "$ {projectdir} /project.pbxproj.out"savefile = "$ {projectdir} /project.pbxproj.mergesave"

    고양이 $ projectfile | grep -v "<<<<<<< HEAD"| grep -v "======="| grep -v "^ >>>>>>>"> $ tempfile mv $ tempfile $ projectfile

  3. sh 명령을 사용하여 터미널에서 실행하십시오. sh resolve_conflicts.sh


git에 의해 생성 된 문자열은 어디에 있습니까?
Harshil Kotecha

이러한 문자열은 "<<<<<<<", "======="및 ">>>>>>>"와 같은 충돌 마커입니다. 해결에 대한 자세한 정보를 원하시면 자식 충돌이 이쪽을 봐 : help.github.com/articles/...
보이 타

@Vojta, 요점에 그 스크립트를 던질 수 있습니까? 이 오류가 발생합니다.resolve_conflicts.sh: line 1: -d: command not found resolve_conflicts.sh: line 3: $tempfile: ambiguous redirect
Daniel



1

따라야 할 단계 :-1. projectName.xcodeproj가있는 폴더로 이동 2. 마우스 오른쪽 버튼을 클릭하고 '패키지 내용 표시'를 선택합니다. .pbxproj 확장자를 가진 파일 목록을 볼 수 있습니다. 3. project.pbxproj를 선택합니다. '텍스트 편집'을 사용하여이 파일을 마우스 오른쪽 버튼으로 클릭하고 엽니 다. 4. <<<<<<, =========== 및 >>>>>>>>>>를 볼 수 있습니다. 일반적으로 Sourcetree / SVN / GITLAB에서 업데이트 할 때 발생하는 충돌입니다. 이것을 삭제하고 파일을 저장하십시오. 5. 이제 오류 메시지없이 프로젝트를 열 수 있습니다.


0

Xcode에서 새 프로젝트를 만들고 이전 디렉토리로 이동 한 다음 모든 소스 파일, 펜촉 및 리소스를 새 프로젝트의 Xcode 파일 사이드 바로 끌어 야하는 것처럼 들립니다. 사용자 지정 빌드 설정 또는 대상으로 많은 작업을 수행하지 않는 한 몇 분 이상 걸리지 않아야합니다. 또는 소스 제어의 마지막 체크인으로 돌아가서 지금과 그 사이에 변경된 코드 파일을 수동으로 추가하십시오.


1
project.pbproject 파일을 확인하고 프로젝트 파일의 작업 버전과 비교하면됩니다.
Atma

0

그리고 일단 작업이 다시 시작되면 백업 및 수정 제어를 위해 Subversion 또는 수은과 같은 것을 사용하는 것을 고려해야합니다. 그는 전자가 항상 예정된 곳으로 이동하지 않고 조기에 자주 백업하는 것은 아닙니다!


최근 제가 가장 좋아하는 VCS는 git입니다.
Lily Ballard

0

현재 프로젝트 폴더 이름을 변경하고 모듈을 동일한 프로젝트로 체크 아웃 한 다음 현재 파일 변경 사항을 추가합니다.



0

줄 사이에서 HEAD와 _HEAD를 찾아서 project.pbxproj에서이 단어를 삭제하십시오. 이 작업을 수행하기 전에이 파일을 백업하십시오 ..


0

Goto PhoneGapTest >> platform 그런 다음 터미널로 이동하여 ios 폴더를 삭제 한 다음 다음을 입력합니다. sudo phonegap build ios 그 후에 프로젝트를 실행할 수 있습니다.


0

되 돌리면 가져온 코드를 실행 취소 할 수 있습니다.

풀 요청을 실행 취소하려면이 명령을 프로젝트 경로에 넣으십시오.

-> git merge --abort


0

Text === 또는 <<< 또는 >>>>에서 찾지 못한 경우 문제는 정말 간단하고 재미있었습니다. Xcode에서 App의 이름을 변경했지만 빌드 전에 UnityProjectSettings에서 변경하지 않았습니다. -그게 문제 였어 ...


-2

Subversion은 거의 매주 svn을 실행 한 후 내 프로젝트 파일을 손상시킵니다. 나는 그것이 지금 왜 이것을 하고이 문제를 발견했는지 알아 내려고 노력하고 있습니다.


내 생각 엔 당신이 엑스 코드가 같은 시간에 자동 저장하는 일 "IF"나는 약간의 손상이 발생할 수 있습니다 추측에는 요 ... 당신이 갱신을하거나 커밋 동시에 엑스 코드에서 열린 프로젝트를 가지고있다
epatel

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.