Cảnh báo Xcode: Nhiều lệnh xây dựng cho tập tin đầu ra


494

Tôi nhận được một lỗi như thế này:

[WARN] Cảnh báo: Nhiều lệnh xây dựng cho tệp đầu ra /Developer/B/Be/build/Release-iphonesimulator/BB.app/no.png

[WARN] Cảnh báo: Nhiều lệnh xây dựng cho tệp đầu ra /Developer/B/Be/build/Release-iphonesimulator/BB.app/d.png

[WARN] Cảnh báo: Nhiều lệnh xây dựng cho tệp đầu ra /Developer/B/Be/build/Release-iphonesimulator/BB.app/n.png

Nhưng tôi đã kiểm tra Xcode và tôi không thấy bất kỳ bản sao nào của các tệp như vậy cả. Như bài đăng này trong Danh sách gửi thư của Apple nói, không có bản sao.

Câu trả lời:


809

Trong Trình điều hướng dự án, chọn tệp Dự án Xcode của bạn. Điều này sẽ cho bạn thấy các cài đặt dự án cũng như các mục tiêu trong dự án. Xem trong Giai đoạn xây dựng "Sao chép tài nguyên gói". Bạn nên tìm các tập tin vi phạm trong danh sách đó hai lần. Xóa tham chiếu trùng lặp.

Xcode đang phàn nàn rằng bạn đang cố gắng gói cùng một tệp với ứng dụng của bạn hai lần.


1
Xảy ra với tôi khi tôi xóa một số tài sản khỏi thư mục bản dựng (sử dụng Finder). Các tài sản được thay thế bằng các tài sản được cập nhật có cùng tên và kéo chúng trong các tùy chọn "thêm vào mục tiêu" gắn cờ XCode. Có vẻ như XCode không đồng bộ sao chép các mục đó trong Copy Bundle Resources
brainondev

1
Tôi muốn thêm một điều vào đây. Nếu bạn kết thúc với một tấn các tham chiếu trùng lặp bằng cách nào đó (như tôi đã làm), bạn chỉ cần nhấp vào "Xác thực cài đặt" và nó sẽ tự động xóa các tham chiếu trùng lặp. Dễ dàng hơn nhiều so với việc tìm kiếm chúng một cách thủ công
Jon Mattingly

1
Tôi đã có một vấn đề tương tự. Câu trả lời này là gần nhất. Tệp <projName> .xcodeproj / project.pbxproj có các mục trùng lặp mặc dù dự án chỉ hiển thị các tệp một lần. Đây là một vấn đề hợp nhất. chỉnh sửa bằng vi đã lừa :) Cảm ơn đã chỉ cho tôi đi đúng hướng :)
javatarz

11
Đáng lưu ý rằng nếu bạn có một số lượng lớn các tệp trùng lặp trong giai đoạn Sao chép tài nguyên gói, bạn có thể nhấp vào 'Xác thực cài đặt' ở dưới cùng của trang này và XCode sẽ nhắc bạn về các bản sao và sẽ xóa tất cả chúng nếu bạn nhấp vào ' Thực hiện thay đổi '. Địa ngục nhanh hơn rất nhiều so với việc săn lùng chúng riêng lẻ.
Yeti42

1
Tôi gặp vấn đề tương tự với các mẫu SpriteBuilder khi tôi thêm lại "Đã xuất bản iOS" vào dự án. Hóa ra nó muốn nó là một "tham chiếu thư mục" chứ không phải một nhóm, và đã thêm toàn bộ thư mục đó vào "Sao chép tài nguyên gói". Vì vậy, ngay cả khi tài nguyên riêng lẻ không xuất hiện trong danh sách đó, hãy kiểm tra để đảm bảo rằng tài nguyên đó không được thêm vào từ một thư mục.
samkass

127

Điều này dễ dàng gây ra khi bạn thêm các tiểu dự án dựa trên git. Xcode không đủ thông minh để bỏ qua thư mục con .git mặc dù bạn không thể nhìn thấy nó từ công cụ tìm, do đó, sẽ rất bối rối khi có nhiều tệp có tên "master" hoặc "loại trừ", (tệp git repo tiêu chuẩn). Với Xcode4, đi đến dự án (gốc của cây bên trái), sau đó nhấp vào mục tiêu ứng dụng của bạn và mở rộng "Sao chép tài nguyên gói", sau đó xóa tất cả các tham chiếu đến .git, dù sao bạn cũng không cần phải nướng chúng vào ứng dụng của mình.


43
Tôi dò dẫm trong một giây, vì vậy điều này có thể giúp ai đó: mục tiêu ứng dụng -> xây dựng các giai đoạn -> sao chép tài nguyên gói
jaime

2
Tôi đã có nhiều tệp có cùng tên (nhưng trong các thư mục khác nhau) trong dự án Xcode của tôi. Chính xác, một trong hai tôi đã có cả hai trong bước Sao chép Tài nguyên Gói, điều này sẽ dẫn đến việc một trong số chúng bị ghi đè trong gói ứng dụng kết quả. Chỉ cần loại bỏ một trong số họ.
BastiBen

112

Thật ra, câu trả lời cho điều này khá đơn giản.

Trong dự án Xcode của bạn, tìm kiếm các tệp đưa ra cảnh báo và chỉ cần xóa một trong số chúng.

Xcode sẽ chỉ hiển thị một tham chiếu của tệp đó trong kết quả tìm kiếm, nhưng đừng dừng lại ở đó, hãy tiếp tục và xóa nó. (tốt hơn là tạo một bản sao lưu của tệp dự án của bạn trước khi xóa nó)

Bây giờ xây dựng lại dự án. Cảnh báo sẽ biến mất ngay bây giờ. (câu trả lời này dành cho phiên bản trước của xcode)


Nhưng các tệp không xuất hiện trong các nhóm và ngăn tệp của XCode nữa. Thỏa thuận với cái này là gì?
Tejaswi Yerukalapudi

1
Nếu bạn tiếp tục gặp sự cố với điều này, chỉ cần xóa tất cả các tệp khỏi Xcode (không xóa chúng trên đĩa). Sau đó kéo tất cả chúng trở lại. Nếu bạn vẫn gặp sự cố sau đó thì bạn thực sự có một số tài nguyên có cùng tên (có thể trong các thư mục khác nhau) - tìm và đổi tên / xóa. Đầu ra Xcode đi vào một thư mục phẳng để cấu trúc thư mục bị bỏ qua.
n13

52

Đây không phải là lỗi Xcode, mặc dù thông báo cảnh báo không đủ hữu ích để mô tả nguyên nhân thực sự.

Thông báo lỗi này xảy ra khi bạn có một vài tệp trong dự án có cùng tên. Bạn chỉ cần xóa hoặc đổi tên các tệp có tên trùng lặp và vấn đề được giải quyết.


1
Vâng, đây là câu trả lời chính xác. Và tình huống có thể dễ dàng đến khi bạn có các tệp tài nguyên, ví dụ như png có cùng tên nhưng trong các thư mục riêng biệt trên hệ thống tệp của bạn - trong quá trình xây dựng, tất cả chúng đều được sao chép vào 1 thư mục, cụ thể là gói ứng dụng.
Brynjar

@Brynjar có cách nào để cho phép hình ảnh có cùng tên không? hoặc để ngăn chặn các hình ảnh được bó lại với nhau?
Andy

Trên thực tế tôi đã tìm ra rằng bạn có thể tạo Tài liệu tham khảo để tránh gói.
Andy

Đây là một cách để tìm các tệp có tên trùng lặp, bất kể thư mục nào find . | grep -v \.git | rev | cut -d/ -f1 | rev | sort | uniq -c | sort, tuy nhiên, điều này không giải quyết được vấn đề của tôi
William Entriken

26

Điều này xảy ra nếu bạn có 2 tệp có cùng tên trong dự án. Mặc dù các tệp nằm trong các nhóm trong XCode khi dự án được biên dịch tất cả các tệp kết thúc trong cùng một thư mục. Nói cách khác, nếu bạn có /group1/image.jpg và /group2/image.jpg dự án được biên dịch sẽ chỉ có một trong hai tệp image.jpg.


17

Như đã đề cập trước đây, vấn đề này có thể được nhìn thấy nếu bạn có nhiều tệp có cùng tên, nhưng trong các nhóm khác nhau (thư mục màu vàng) trong trình điều hướng dự án. Trong trường hợp của tôi, điều này là có chủ ý vì tôi có nhiều thư mục con với mỗi "preview.jpg" mà tôi muốn sao chép vào gói ứng dụng:

tài liệu tham khảo nhóm

Trong tình huống này, bạn cần đảm bảo rằng Xcode nhận ra thư mục tài liệu tham khảo (màu xanh biểu tượng thư mục), không chỉ các nhóm.

Xóa các tệp vi phạm và chọn "Xóa tham chiếu" (vì vậy chúng tôi không xóa chúng hoàn toàn):

xóa tham chiếu nhóm


Thêm lại chúng vào dự án bằng cách kéo chúng trở lại vào trình điều hướng dự án. Trong hộp thoại xuất hiện, chọn "Tạo tham chiếu thư mục cho mọi thư mục đã thêm":

thêm làm tài liệu tham khảo


Lưu ý rằng các tệp hiện có biểu tượng thư mục màu xanh trong trình điều hướng dự án:

tài liệu tham khảo thư mục


Nếu bây giờ bạn xem phần "Sao chép tài nguyên gói" trong các giai đoạn xây dựng của mục tiêu, bạn sẽ nhận thấy rằng có một mục nhập duy nhất cho toàn bộ thư mục, thay vì các mục nhập cho mỗi mục có trong thư mục. Trình biên dịch sẽ không phàn nàn về nhiều lệnh xây dựng cho các tệp đó.


15

Đây không phải là một lỗi. Xcode hỗ trợ có thể hỗ trợ bạn. Chọn mục tiêu, ở bên trái trong Điều hướng dự án. Nhấp vào "Xác thực cài đặt" ở cuối cài đặt. Xcode sẽ kiểm tra các cài đặt và loại bỏ trùng lặp nếu có thể.


14

một phiên bản khác của tình huống này có thể xảy ra khi có các bản sao trong giai đoạn xây dựng Tiêu đề .

để sửa lỗi này

  1. đi đến mục tiêu dự án của bạn
  2. chọn Build Phases
  3. chọn Headersgiai đoạn xây dựng
  4. nhập tên hiển thị trong cảnh báo
  5. chú ý hai mục (hoặc nhiều hơn)
  6. tìm các +|-hộp ở góc dưới bên trái
  7. chọn một trong các mục và nhấp vào -nút

7

Trong trường hợp của tôi, vấn đề được gây ra bởi cùng tên của mục tiêu và thư mục trong một nhóm.

Chỉ cần đổi tên tập tin hoặc thư mục bị xung đột để giải quyết vấn đề.


6

Tôi tìm thấy một giải pháp khá dễ dàng cho việc này:

  1. Chọn tệp gây ra sự cố từ trình điều hướng dự án
  2. Bỏ chọn thành viên mục tiêu từ trình kiểm tra tệp
  3. Xây dựng dự án
  4. Kiểm tra lại tư cách thành viên mục tiêu cho tệp một lần nữa

Cảnh báo đã biến mất! Kiểm tra hình ảnh này để tham khảo.

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


5

Tôi khá chắc chắn rằng điều này có thể do lỗi XCode 4 gây ra, ít nhất là trong các trường hợp mà tôi gặp phải.

Nó xảy ra nếu bạn thêm nhiều tệp phụ thuộc ngôn ngữ vào dự án cùng một lúc. Tôi tìm thấy điều này bằng cách xem qua sự khác biệt git. Tôi không làm gì trong cam kết nhưng thêm một số tệp ngòi cục bộ mới. Nhưng nhìn lại sự khác biệt của tệp project.pbxproj, nó cho thấy một loạt các tham chiếu trùng lặp mới được thêm vào cho các tệp đã có trong dự án trước đó. Các tập tin nó làm điều này dường như quá ngẫu nhiên đối với tôi.

Tôi đã tái tạo hành vi chính xác này nhiều lần.

Xóa các tệp này khỏi dự án không khắc phục được sự cố vì nó chỉ xóa tham chiếu ban đầu và để lại các bản sao. Cách duy nhất để khắc phục là quay trở lại một cam kết và bắt đầu lại, hoặc chỉnh sửa tệp dự án, đây là cách thực sự tốt để vặn nó nhiều hơn vì khó có thể loại bỏ trùng lặp nào và bạn phải thực hiện nó trong một tấn của những nơi khác nhau.

Xcode 4 chỉ là một sự thất vọng lớn đối với tôi.


Có vẻ như điều này được cố định trong XCode 4.2. Trong các phiên bản trước, bạn có thể tránh lỗi này bằng cách trước tiên đặt tệp bạn sắp thêm nội địa hóa vào "Nhóm" của riêng nó (thư mục ảo trong dự án). Khi bạn đã hoàn tất việc thêm bản địa hóa, bạn có thể đặt nó trở lại vị trí cũ và xóa Nhóm tạm thời mà bạn đã tạo.
Steve

Đây không phải là một lỗi. Đó là do có nhiều hơn một tệp có cùng tên trong dự án của bạn.
Todd Hopkinson

1
Khi bạn bản địa hóa một tệp bạn phải có cùng tên tệp cho mỗi bản địa hóa, ngoại trừ trong các thư mục khác nhau. Đây thực sự là một lỗi.
Steve

4

Điều này xảy ra vì ur "no.png" "d.png" và "n.png" được nhân đôi trong tài nguyên. Chỉ cần tìm cách xóa các tập tin công khai và xóa.


3

Lỗi dường như xuất hiện khi bạn có nhiều hơn một tham chiếu của cùng một tệp. Tôi đã có 2 tập tin cùng tên và gặp lỗi này. Khi tôi xóa một trong số chúng, lỗi sẽ biến mất ..


2

Một biến thể khác về vấn đề này. Tôi đã có cùng một thông báo đưa ra không có giải pháp được đề xuất nào trước đây đã giải quyết vấn đề (tôi chắc chắn chỉ có một bản sao của tệp vi phạm).

Giải pháp của tôi là chỉnh sửa tệp project.pbxproj trong trình soạn thảo văn bản (sau khi thoát XCode và sao lưu tệp tất nhiên) và xóa tất cả các tham chiếu đến tệp vi phạm. Sau đó, sau khi bắt đầu lại XCode, tôi đã tự thêm tệp vào dự án và mọi thứ đều ổn.

(Sự nghi ngờ của tôi là vấn đề này xảy ra với tôi vì một hướng dẫn, tức là: không phải XCode, hợp nhất tệp dự án.)


1

Mở thư mục Framework trong dự án của bạn và đảm bảo chỉ có các khung bên trong. Tôi đã thêm nhầm lẫn toàn bộ thư mục Nhà phát triển!


1

Tôi đã có cùng một vấn đề phút trước. Tôi đã đề cập đến việc thay đổi 'mục tiêu triển khai' đã khắc phục vấn đề của tôi.


1

Đối với tôi Mục tiêu> Cài đặt bản dựng> Đóng gói> Tên sản phẩm được đặt giống với giá trị khác được tham chiếu trong tệp .plist được tùy chỉnh cho ứng dụng của tôi. Cuối cùng do quá trình xây dựng của chúng tôi, điều này tạo ra các tệp trùng lặp.


1
Đây là vấn đề đối với tôi, cảm ơn!
Leon

0

Swift 3 : (nhưng cũng là phiên bản cũ hơn) xảy ra khi tôi có tài sản với các bản sao. Chỉ cần đổi tên các tập tin với vấn đề này và tất cả đều tốt.

Điều này cũng có thể xảy ra khi bạn đã tạo Assets.xcassetsvà bạn đã đổi tên các bản sao với tên mới để sau một thời gian bạn quên nó và xóa nó để thêm các tham chiếu thư mục nhưng điều này trở lại vấn đề tệp trùng lặp ..


0

Một trong những cách đơn giản là,

  • Đi đến mục tiêu ứng dụng
  • Chuyển đến giai đoạn xây dựng
  • Tập tin đầu ra
  • Xóa đường dẫn ra tập tin, sau đó xây dựng dự án. Nó sẽ chạy thành công.

0

Điều quan trọng là phải làm pod deintegraterm *.workspacenộp! Thật là lãng phí thời gian !


0

Người dùng React-Native. tệp goto -> cài đặt không gian làm việc -> hệ thống xây dựng -> thay đổi nó thành hệ thống xây dựng cũ. và nó nên xây dựng tốt bây giờ. React-Native chưa tương thích với hệ thống tệp mới.


0

Bình luận use_frameworks! trong PodFile làm việc cho tôi.

#use_frameworks!

Lưu ý: Đã làm điều này trên XCode 10.1, phiên bản pod 1.8.4


-1

Mặc dù tôi chắc chắn có một cách tốt hơn, nhưng chỉ mất chưa đến 60 giây và đó là điều duy nhất tôi có thể thấy nó hoạt động.

  1. Kéo repo vào thùng rác.
  2. sao chép lại repo của bạn.
  3. thiết lập repo của bạn với theo dõi từ xa chính xác. git remote add <url.git>, hoặc làgit remote set-url <url.git>
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.