2012-07-17 18 views
7

Sản phẩm iPhone/ipad của công ty tôi đã di chuyển qua nhiều thế hệ iOS và Xcode (hiện tại là 5.1 và 4.3) và có nhiều mục tiêu. Có lẽ vì những yếu tố này, có rất nhiều dòng giống hệt nhau cho mỗi tập tin nguồn trong phần PBXBuildFile, ví dụ:Có thể sao chép các tham chiếu tệp trong tệp project.pbxproj của XCode một cách an toàn không?

 
14EE4CD315A5E69000DCA763 /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = 14EE4CB615A5E68500DCA763 /* [email protected] */; }; 
14EE4CD415A5E69000DCA763 /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = 14EE4CB615A5E68500DCA763 /* [email protected] */; }; 
14EE4CD515A5E69000DCA763 /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = 14EE4CB615A5E68500DCA763 /* [email protected] */; }; 
14EE4CD615A5E69000DCA763 /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = 14EE4CB615A5E68500DCA763 /* [email protected] */; }; 
14EE4CD715A5E69000DCA763 /* [email protected] in Resources */ = {isa = PBXBuildFile; fileRef = 14EE4CB615A5E68500DCA763 /* [email protected] */; }; 

Lưu ý rằng các dòng cho một tập tin nguồn cho tất cả đều hoàn toàn (tôi đã sai, họ không khá ...) giống hệt nhau và số dòng trùng lặp thay đổi từ không đến nửa tá hoặc nhiều hơn. Do trùng lặp này, phần PBXBuildFile của project.pbxproj dài gần 5000 dòng, mặc dù chúng tôi chỉ thực sự có khoảng 1200 tệp duy nhất.

Trước khi tôi viết kịch bản để xóa tất cả các dòng trùng lặp này và yêu cầu kiểm tra hồi quy hoàn toàn trên tất cả các mục tiêu và xây dựng, tôi muốn chắc chắn rằng Xcode không cần những dòng trùng lặp này vì lý do phức tạp nào đó.

Tôi khá chắc chắn rằng điều này không phải do kiểm soát phiên bản được kiểm soát; các dòng trùng lặp chỉ xuất hiện trong phần PBXBuildFile và trong khi tôi không thích P4, chúng tôi gặp khó khăn khi kết hợp các thay đổi tệp project.pbxproj, mặc dù ở gần 20.000 dòng, nó hơi khó sử dụng. Tôi nghĩ rằng một số phát hành của Xcode đã làm điều này, có lẽ trong khi thêm mục tiêu mới, nhưng tôi đã không tìm thấy bất cứ ai khác phàn nàn về vấn đề này.

Câu hỏi phụ: Điều này xảy ra như thế nào? Có ai khác tìm thấy những dòng trùng lặp này không?

Trả lời

2

Đăng cho hậu thế, trong trường hợp những người khác cũng tham gia vào quá trình này.

Điều này xảy ra tất cả thời gian khi nhà phát triển đang làm việc trên các nhánh riêng biệt và ví dụ: di chuyển các tệp vào các thư mục khác nhau, thêm các nhóm mới trong cùng một thư mục con như một nhóm khác mà một nhà phát triển khác thực hiện thay đổi trên một nhánh riêng biệt, v.v ... và sau đó cần hợp nhất các thay đổi dự án của họ trở lại một nhánh cơ sở chung. Việc sáp nhập các tệp dự án Xcode là loại địa ngục đặc biệt của riêng nó và không có cách nào tốt để xác định tham chiếu nào trong số đó là thứ bạn muốn giữ; như @Maistor Kokir chỉ ra, id sẽ là duy nhất cho mỗi tham chiếu và điều quan trọng là bạn chọn đúng từ khi các nhóm tham chiếu đến tệp theo ID và quan trọng hơn là xây dựng các quy tắc và mục tiêu cũng tham chiếu đến id.

Cách duy nhất tôi đã tìm thấy để khắc phục sự cố này là xóa tất cả các tham chiếu đến tệp được đề cập (trong "Giai đoạn xây dựng" của mục tiêu xây dựng), sau đó thêm lại vào.

Và, để thực sự sửa lỗi tại nguồn, tôi đã đề nghị nhà phát triển thực hiện bất kỳ dự án nào thay đổi trên nhánh chung (ví dụ: git "master" branch), sau đó hợp nhất thay đổi đó vào chi nhánh phát triển của họ. Dự án bổ sung thường không yêu cầu điều trị tương tự; chỉ thay đổi "trong lý do", sẽ bao gồm (nhưng sẽ không bị giới hạn) di chuyển tệp sang một nhóm khác hoặc thậm chí đến một vị trí khác trong cùng một nhóm, đổi tên hoặc xóa nhóm, xóa hoặc sửa đổi tham chiếu mô-đun con , vv Kinh nghiệm sẽ là hướng dẫn thực sự của bạn.

5

Khi bạn thấy tệp được sao chép, nhưng id của tệp bên trong mỗi mục tiêu có một chút khác biệt 14EE4CD * * 15A5E69000DCA763, chữ số thứ 8 thay đổi.

+0

Chuột, tôi không thể tin rằng tôi đã bỏ lỡ điều đó ở biển gần như cùng một ID. Tôi đã từ bỏ bao giờ nhận được một câu trả lời trên này, tôi sẽ phải quay trở lại và xem làm thế nào các ID bản đồ để dự án biến thể. – Taryn

+1

Có, có vẻ như nếu bạn có nhiều mục tiêu xây dựng, phần này sẽ chỉ tham chiếu một lần cho mỗi mục tiêu. Loại có ý nghĩa. –

0

Cuối cùng tôi đã viết và chạy tập lệnh loại bỏ nhiều tham chiếu tệp trùng lặp. Làm như vậy có vẻ hoàn toàn vô hại, các bản dựng cục bộ của tôi vẫn tiếp tục hoạt động chính xác. Tôi chưa bao giờ kiểm tra trong các bản sửa lỗi đó, vì tôi đã thay đổi nhà tuyển dụng về sau đó, và có vẻ như thô lỗ khi ném một quả bom có ​​khả năng phá vỡ hàng tá đội trước khi rời đi.

0

Thông thường Xcode tạo tham chiếu duy nhất (ID) cho các tệp được tham chiếu trong nhiều mục tiêu. Tôi cho rằng bạn đang có nhiều hơn một mục tiêu xây dựng và LoginViewController tham chiếu trong cả hai mà kết thúc với ID fileRef khác nhau. Mặc dù nó trông giống hệt nhau nhưng loại bỏ chúng giả định rằng nó có thể vô hại có thể gây ra sự cố.

Bạn có thể đọc thêm về tệp pbxproj từ http://www.monobjc.net/xcode-project-file-format.html.

Các vấn đề liên quan