Không thể mở dự án… không thể mở vì không thể phân tích cú pháp tệp dự án


93

Tôi đã làm việc một thời gian để tạo một ứng dụng iPhone. Hôm nay, khi pin yếu, tôi đang làm việc và liên tục lưu các tệp nguồn của mình thì nguồn điện bị mất ...

Bây giờ khi tôi cắm lại máy tính của mình và nó đang hoạt động tốt, tôi cố gắng mở tệp dự án của mình và tôi gặp lỗi:

Không thể mở dự án

Dự án ... không thể mở được vì không thể phân tích cú pháp tệp dự án.

Có cách nào để mọi người biết rằng tôi có thể phục hồi sau điều này không? Tôi đã thử sử dụng tệp dự án cũ hơn và chèn lại rồi biên dịch. Nó mang lại cho tôi một lỗi thú vị có thể là do nó không tìm thấy tất cả các tệp nó muốn ...

Tôi thực sự không muốn xây dựng lại dự án của mình từ đầu nếu có thể.


BIÊN TẬP

Ok, tôi đã thực hiện sự khác biệt giữa tệp này và tệp dự án cũ hơn một chút đã hoạt động và thấy rằng có một số lỗi trong tệp. Sau khi hợp nhất chúng (những phần tốt và mới nhất), nó đang hoạt động.

Những điểm tuyệt vời về SVN. Tôi có một cái, nhưng có một số người thích thú khi cố gắng đồng bộ hóa XCode với nó. Tôi chắc chắn sẽ dành nhiều thời gian hơn cho nó bây giờ ... ;-)

nhập mô tả hình ảnh ở đây

Câu trả lời:


228

Tôi gặp vấn đề này và tiền bối của tôi đã nói với tôi về một giải pháp, tức là:

Nhấp chuột phải vào projectname.xcodeprojtệp của bạn ở đây projectnamesẽ là tên của dự án của bạn. Bây giờ sau khi nhấp chuột phải, hãy chọn Hiển thị Nội dung Gói . Sau đó, mở projectname.pbxprojtệp của bạn trong một trình soạn thảo văn bản. Bây giờ tìm kiếm cho các dòng có chứa <<<<<<< .mine, =======>>>>>>> .r. Ví dụ trong trường hợp của tôi, nó trông giống như thế này

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

Bây giờ loại bỏ những <<<<<<< .mine, =======>>>>>>> .rdòng vì vậy nó sẽ giống như thế này

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

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

Bây giờ hãy lưu và mở dự án Xcode của bạn và xây dựng nó. Mọi thứ sẽ ổn thôi.


11
CẢM ƠN BẠN. Những công việc này. Trong trường hợp của tôi, đó không phải là ".mine" hoặc ".r" mà đã nói điều gì đó khác ... Ctrl-F cho "===" để tìm địa điểm.
ck_

điều này nên được đánh dấu là câu trả lời. Thực sự tốt, cảm ơn
owen gerig

12
Chỉ để nói TẠI SAO điều này đang xảy ra: Kiểm soát phiên bản của bạn đang cố gắng hợp nhất hai phiên bản xung đột của tệp dự án. Bạn phải cho kiểm soát phiên bản của bạn biết cách hợp nhất thích hợp theo cách thủ công. Thực tế là XCode không xử lý điều này một cách khéo léo là một sự khó chịu lớn đối với tôi hàng ngày.
Thane Brimhall

Cảm ơn bạn. Vấn đề của tôi ở dạng <<<<<<<<< HEAD ======= >>>>>>>. Nó nằm ở hai vị trí ở cuối tệp .pbxproj. Sau khi xóa các mục này, tôi có thể thực thi lại tệp .xcodeproj. Tìm những mục này có vẻ khác biệt so với phần còn lại của tệp.
AgnosticDev

1
Trong trường hợp của tôi <<<<<<< HEAD, ======, >>>>>>> một số chữ và số. Loại bỏ ba dòng này, sau đó lưu và mở. Làm việc như người ở!!! Cảm ơn Allot.
Gowrie Sammandhamoorthy

47

Câu trả lời của Muhammad rất hữu ích (và đã giúp tôi sửa chữa). Tuy nhiên, chỉ cần xóa >>>>>>> ======= <<<<<<< là không đủ để khắc phục sự cố phân tích cú pháp trong project.pbxproj (đối với tôi) khi giữ các thay đổi từ cả hai nhánh sau khi hợp nhất.

Tôi đã có xung đột hợp nhất trong phần PBXGroup (phần đầu của nó được biểu thị bằng nhận xét khối như sau: / * Bắt đầu phần PBXGroup * /) của tệp project.pbxproj. Tuy nhiên, sự cố tôi gặp phải cũng có thể xảy ra ở những nơi khác trong tệp project.pbxproj.

Dưới đây là đơn giản hóa xung đột hợp nhất mà tôi gặp phải:

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

Khi tôi xóa các điểm đánh dấu xung đột hợp nhất, đây là những gì tôi còn lại:

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

Thông thường, việc xóa các dấu xung đột hợp nhất sẽ khắc phục sự cố phân tích cú pháp trong tệp project.pbxproj và khôi phục tính toàn vẹn của không gian làm việc. Lần này thì không.

Dưới đây là những gì tôi đã làm để giải quyết vấn đề:

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

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

Tôi thực sự đã phải thêm 2 dòng vào cuối PBXGroup đầu tiên.

Bạn có thể thấy rằng nếu tôi chọn loại bỏ các thay đổi từ Head hoặc nhánh hợp nhất, thì sẽ không có vấn đề phân tích cú pháp! Tuy nhiên, trong trường hợp của tôi, tôi muốn giữ lại cả hai nhóm mà tôi đã thêm từ mỗi nhánh và chỉ xóa các điểm đánh dấu hợp nhất là không đủ; Tôi đã phải thêm các dòng bổ sung vào tệp project.pbxproj để duy trì định dạng chính xác.

Vì vậy, nếu bạn đang gặp phải sự cố phân tích cú pháp sau khi bạn nghĩ rằng bạn đã giải quyết tất cả các xung đột hợp nhất, bạn có thể muốn xem xét kỹ hơn .pbxproj và đảm bảo rằng không có bất kỳ sự cố định dạng nào!


bạn có thể đã vô tình loại bỏ dấu hai chấm và / hoặc dấu ngoặc nhọn khi giải quyết xung đột hợp nhất. Bạn nên cẩn thận lấy phần thích hợp (hoặc cả hai) khỏi các xung đột hợp nhất và xóa các điểm đánh dấu. Đó là nó.
Stas

thêm sourceTree = "<group>"; } giải quyết nó cho tôi! Thật hữu ích! Cảm ơn!
Nitin Alabur

Chỉ muốn thêm một cái gì đó vào điều này. Tôi gặp sự cố tương tự nhưng đang làm việc với CocoaPods và không gian làm việc. Tôi phải xóa không gian làm việc và tạo lại nó để Xcode nhận bản sửa lỗi.
Nico

@Nico: Bạn có phiền chia sẻ về cách nuke nó không? Tôi đang phải đối mặt với vấn đề tương tự ở đây và có một thời gian khó khăn
Isaac

Tôi thấy rằng sau khi sửa tệp .pbxproj mà tôi cần đóng và mở lại dự án để nó hoạt động, nhưng nó đã hoạt động. Cảm ơn SnoopyProtocol!
KeithTheBiped

28

Tôi gặp chính xác lỗi này vì Cordova sẽ cho phép bạn tạo một dự án có khoảng trắng trong đó và Xcode không biết cách giải quyết.


Cảm ơn rất nhiều, đây là câu trả lời, tôi có một khoảng trống.
Tối đa

Tương tự với Cordova Phonegap 3,4
Miles M.

Đây chính xác là vấn đề tôi đang gặp phải. Cảm ơn!
fray88

@ fray88 Tôi đã loại bỏ khoảng trống trong tên thư mục của mình cho cả dự án Xcode và thư mục cordova, nhưng bây giờ tôi nhận được Lỗi: ENOENT: không có lỗi tệp hoặc thư mục như vậy. Làm thế nào tôi có thể lấy ra không gian và làm cho mọi thứ hoạt động?
SaH

25

Tôi đã có vấn đề tương tự.

Ảnh chụp màn hình 1

Dưới đây là các bước để giải quyết nó:

  1. Điều hướng đến thư mục nơi của bạn projectName.xcodeproj.

    Ảnh chụp màn hình 2

  2. Nhấp chuột phải và chọn ' Show Package Contents'. Bạn sẽ có thể xem danh sách các tệp có .pbxprojphần mở rộng.

    Ảnh chụp màn hình 3

  3. Chọn project.pbxproj. Nhấp chuột phải và mở tệp này bằng cách sử dụng ' Text Edit'.

    Ảnh chụp màn hình 4

  4. Bạn sẽ có thể thấy <<<<<< .mine, ============>>>>>>>>>> .r123. Đây thường là những xung đột phát sinh khi bạn cập nhật từ SVN. Xóa chúng và lưu tệp.

    Ảnh chụp màn hình 5

    Ảnh chụp màn hình 6

  5. Bây giờ, bạn sẽ có thể mở dự án mà không có bất kỳ thông báo lỗi nào .


23

Phân tích trực quan tệp dự án Xcode không giúp tôi xác định được lỗi sau khi hợp nhất. Sau khi xem nhật ký hệ thống, đã tìm thấy dòng như vậy khi Xcode cố gắng phân tích cú pháp tệp:

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.

Sau khi sửa xong dự án đó có thể mở được.


2
Cảm ơn, bạn đã cứu ngày của tôi :)
Centurion

Cảm ơn bạn .. này có ý nghĩa hơn nhiều so với kiểm tra trực quan
Ciprian

2
Điều này đã giúp rất nhiều. Tôi chỉ "tail -f /var/log/system.log" và cố gắng mở dự án. Trong system.log, nó hiển thị lỗi (tìm kiếm "Xcode") hiển thị số dòng nơi xảy ra ngoại lệ phân tích cú pháp. Sau đó, tôi mở tệp bằng vi và thấy một ký tự điều khiển trong tệp (^ H) và chỉ cần xóa ký tự đơn đó và thì đấy! nó đã có thể được mở.
DustinB

Câu trả lời tốt nhất, thay vì cố gắng thực hiện hit và thử. Đọc Nhật ký Bảng điều khiển.
Urmil Setia

5
Chỉ cần cố gắng xây dựng nó từ Terminal như xây dựng xcodebuild -project Project.xcodeproj. Bạn sẽ thấy lỗi ngay trong Terminal.
Slavko Coolesoff vào

6

Phân tích cú pháp của tệp dự án của bạn. Kiểm tra nó bên trong dự án của bạn trong thiết bị đầu cuối:

plutil -lint project.pbxproj

Điều này sẽ cho bạn thấy các lỗi từ trình phân tích cú pháp.

Sự cố có thể xảy ra : Một số dự án đặt chiến lược hợp nhất git unioncho các tệp dự án. Điều này thường hoạt động, nhưng sẽ âm thầm giết tệp dự án của bạn nếu nó không thành công. Chiến lược này được xác định trong .gitattributestệp trong kho lưu trữ của bạn.


3

Gần đây tôi gặp phải vấn đề tương tự khi cố gắng hợp nhất chi nhánh của mình với một chi nhánh ở xa. Tuy nhiên, không có giải pháp nào ở trên có vẻ phù hợp với vấn đề của tôi.

Không có xung đột hợp nhất nào giữa tệp project.pbxproj trong chi nhánh của tôi hoặc chi nhánh từ xa. Tuy nhiên, tệp projectName.xcodeproj của tôi sẽ từ chối mở vì lý do tương tự như được hiển thị trong câu hỏi đã hỏi.

Giải pháp của tôi là xem qua project.pbxproj bằng trình soạn thảo văn bản và tìm xem có bất kỳ điểm bất thường nào trong cú pháp tệp hay không (ví dụ: thêm một dấu ngoặc nhọn). Tôi đẩy nhanh quá trình này bằng cách tập trung vào các dòng đã được chèn hoặc xóa trong tệp cũ so với tệp đã hợp nhất. Khi kiểm tra kỹ hơn, tôi thấy nguyên nhân của sự cố của mình là do sự lặp lại của dòng sau:

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

trong tệp đã hợp nhất của tôi. Điều này dẫn đến một dấu ngoặc nhọn không được đóng và do đó cú pháp pbxproj không hợp lệ. Xóa dòng trên đã khắc phục sự cố của tôi.


2

Tôi vừa gặp phải vấn đề tương tự. Tôi đã xóa các chuỗi được tạo bằng git như mọi khi nhưng Xcode vẫn từ chối mở tệp .xcodeproj. Nhưng mọi thứ đều chính xác, không có dấu ngoặc nào bị thiếu vv Cuối cùng tôi đã cố gắng thoát Xcode và mở dự án khi Xcode bị đóng .. sau đó nó hoạt động. Tôi hi vọng điêu nay se giup được ai đo.

BIÊN TẬP:

để giải quyết xung đột trong tệp .xcodeproj của bạn, bạn có thể sử dụng tập lệnh hữu ích này:

  1. Tạo tệp .sh trống trong thư mục dự án của bạn (ví dụ: Resolution_conflicts.sh)
  2. Đây là kịch bản:

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

    cat $ projectfile | grep -v "<<<<<<< ĐẦU" | grep -v "=======" | grep -v "^ >>>>>>>"> $ tempfile mv $ tempfile $ projectfile

  3. Chạy nó từ thiết bị đầu cuối bằng lệnh sh: sh giải quyết_conflicts.sh


chuỗi được tạo bởi git ở đâu?
Harshil Kotecha

Các chuỗi này là các dấu xung đột: "<<<<<<<", "=======" và ">>>>>>>". Để biết thêm về giải quyết xung đột git xem ở đây: help.github.com/articles/...
Vojta

@Vojta, bạn có thể đưa đoạn mã đó vào ý chính không? Tôi nhận được lỗi này:resolve_conflicts.sh: line 1: -d: command not found resolve_conflicts.sh: line 3: $tempfile: ambiguous redirect
Daniel



1

Các bước cần thực hiện: - 1. Điều hướng đến thư mục chứa projectName.xcodeproj của bạn 2. Nhấp chuột phải và chọn 'Show Package Contents'. Bạn sẽ có thể xem danh sách các tệp có phần mở rộng .pbxproj. 3. chọn project.pbxproj. Nhấp chuột phải và mở tệp này bằng 'Chỉnh sửa Văn bản'. 4.Bạn sẽ có thể xem <<<<<<, ============ và >>>>>>>>>>. Đây thường là những xung đột phát sinh khi bạn cập nhật từ Sourcetree / SVN / GITLAB. Xóa chúng và lưu tệp. 5.Bây giờ, bạn sẽ có thể mở dự án mà không có bất kỳ thông báo lỗi nào.


0

Có vẻ như bạn sẽ phải tạo một dự án mới trong Xcode, truy cập vào thư mục cũ và kéo tất cả các tệp nguồn, ngòi và tài nguyên của bạn vào thanh bên của tệp Xcode trong dự án mới. Sẽ không mất quá vài phút, trừ khi bạn thực sự đã làm rất nhiều việc với các mục tiêu hoặc cài đặt xây dựng tùy chỉnh. Hoặc là hoàn nguyên về lần đăng ký cuối cùng trong điều khiển nguồn của bạn và thêm thủ công bất kỳ tệp mã nào đã thay đổi từ bây giờ đến sau đó.


1
Chỉ cần kiểm tra tệp project.pbproject và tạo sự khác biệt với phiên bản đang hoạt động của tệp dự án.
Atma

0

Và một khi bạn bắt đầu hoạt động trở lại, bạn nên xem xét sử dụng một cái gì đó như lật đổ hoặc thương mại để kiểm soát sao lưu và sửa đổi. Hãy nhớ rằng anh ta không phải lúc nào các electron cũng đi đến nơi mà chúng phải đến, hãy sao lưu sớm và thường xuyên!


VCS yêu thích của tôi gần đây là git.
Lily Ballard

0

thay đổi tên thư mục dự án hiện tại của bạn và mô-đun thanh toán cùng một dự án. sau đó thêm các thay đổi tệp hiện tại.



0

Cố gắng tìm HEAD và _HEAD giữa các dòng và xóa các từ này trong project.pbxproj. Sao lưu tệp này trước khi thực hiện việc này ..


0

Goto PhoneGapTest >> platform Sau đó xóa thư mục ios sau đó vào terminal rồi gõ: sudo phonegap build ios sau đó bạn có thể chạy dự án


0

Bằng cách hoàn nguyên, bạn có thể hoàn tác mã đã kéo.

Nếu bạn muốn hoàn tác yêu cầu kéo đó, chỉ cần đặt lệnh này trên đường dẫn dự án

-> git merge --abort


0

Trong trường hợp nếu bạn không tìm thấy trong Text === hoặc <<< hoặc >>>> thì như đối với tôi, vấn đề thực sự đơn giản và thú vị ... Tôi đổi tên Ứng dụng trong Xcode, nhưng không thay đổi nó trong UnityProjectSettings trước khi xây dựng - đó là vấn đề ...


-2

subversion sẽ làm hỏng tệp dự án của tôi sau khi svn lên trên cơ sở gần như hàng tuần. Tôi đang cố gắng tìm hiểu lý do tại sao nó hoạt động như vậy ngay bây giờ và gặp sự cố này.


Tôi đoán là bạn có dự án mở trong Xcode cùng một lúc bạn làm một bản cập nhật hoặc cam kết ... "NẾU" Xcode xảy ra để tự động lưu cùng một lúc tôi đoán một số tham nhũng có thể xảy ra
epatel

-3

Điều này là do tên dự án không được giả sử có khoảng trống ở giữa chúng

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.