Xcode 5.1 - Không có kiến ​​trúc nào để biên dịch cho (ONLY_ACTIVE_ARCH = YES, active arch = x86_64, VALID_ARCHS = i386)


168

Sau khi cập nhật lên Xcode 5.1, tôi không còn có thể xây dựng dự án của mình cho trình giả lập 64 bit, nhận được lỗi này:

 No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386).

Đây là các cài đặt xây dựng mục tiêu của tôi:

Cài đặt xây dựng mục tiêu Xcode

Tôi đã thử thay đổi "Build Active Architecture" thành No, cũng như thêm "i386" vào "Kiến trúc hợp lệ", rất tiếc là không hoạt động. Cảm ơn cho bất kỳ đề nghị!


4
Tôi đã thấy khá nhiều câu hỏi tương tự sau khi cập nhật iOS 7.1 mới nhất và giải pháp là loại bỏ arm64. Phải thừa nhận rằng điều đó không giải quyết được vấn đề cụ thể của bạn nhưng có lý do để tin rằng Apple đã làm hỏng điều gì đó.
dandan78

Cảm ơn, điều đó hợp lý, tôi đoán tôi sẽ không sử dụng 64-bit cho đến khi Apple phát hành bản cập nhật cho việc này.
ebi


Vấn đề tương tự trên Xcode 6.1, đã thử tất cả các giải pháp được đưa ra dưới đây, chúng không hoạt động. Tôi có Cốc Cốc trong dự án của mình. Bất kỳ giải pháp nào về cách sửa lỗi trên Xcode 6.1
Vinayaka Karjigi

Câu trả lời:


102

Tôi đã có thông báo lỗi tương tự sau khi nâng cấp lên XCode 5.1. Bạn đang sử dụng CocoaPods? Nếu vậy, điều này sẽ khắc phục vấn đề:

  1. Xóa dự án "Pods" khỏi không gian làm việc trong khung bên trái của Xcode và đóng Xcode.
  2. Chạy "pod install" từ dòng lệnh để tạo lại dự án "Pods".
  3. Mở lại Xcode và đảm bảo "Chỉ xây dựng kiến ​​trúc hoạt động" được đặt thành "Không" trong cài đặt bản dựng của cả dự án "Pods" và dự án của riêng bạn.
  4. Làm sạch và xây dựng.

1
Đã sửa lỗi bằng cách xóa arm64 khỏi kiến ​​trúc Pods.
ebi

Tôi cũng đã giải quyết được vấn đề tương tự trong dự án Cordova / PhoneGap. Cảm ơn
Rocco

182

Những gì bạn cần làm là chỉ cần thiết lập ONLY_ACTIVE_ARCHđể NO(ít nhất là công trình đối với tôi). Dưới đây là một ảnh chụp màn hình cho nó:


BIÊN TẬP:

Theo như tôi biết ( vui lòng chỉ ra nếu có gì đó không ổn, cảm ơn ), nếu bạn đặt ONLY_ACTIVE_ARCHthành YES, điều đó có nghĩa là Xcode sẽ chỉ xây dựng cho kiến ​​trúc hoạt động (hiện đang đề cập đến thiết bị đang hoạt động trong Xcode). Có vẻ như cài đặt mặc định của Xcode được đặt Gỡ lỗi YES, do đó, nó sẽ không xây dựng nhị phân cho các kiến ​​trúc khác khi bạn chỉ muốn xây dựng cho một thiết bị đặc biệt được kết nối với máy Mac của mình.

Lý do không thể xây dựng có thể là vì dự án không hỗ trợ kiến ​​trúc của thiết bị bạn đã kết nối. Vì vậy, giải pháp tốt nhất là thêm kiến ​​trúc phù hợp cho thiết bị của bạn. Dưới đây là danh sách các kiến ​​trúc & các thiết bị hỗ trợ:

  • ARMv8 / ARM64: iPhone 6, iPhone 5s, iPad Air,Retina iPad Mini
  • ARMv7s: iPhone 5, iPhone 5c,iPad 4
  • ARMv7: iPhone 3GS, iPhone 4, iPhone 4S, iPod 3G/4G/5G, iPad, iPad 2, iPad 3,iPad Mini
  • ARMv6: iPhone, iPhone 3G,iPod 1G/2G

Vậy tại sao "thiết lập ONLY_ACTIVE_ARCHđể NO" công trình? Bởi vì thiết bị vẫn có thể chạy nhị phân được xây dựng cho tất cả các kiến ​​trúc bạn đã thêm (vượt qua bản dựng), nhưng sẽ mất một số hiệu suất. Đây chỉ là một giải pháp nhanh chóng, nhưng không tốt nhất.


Lưu ý : Bạn càng thêm nhiều kiến ​​trúc, nhị phân sẽ được tạo ra càng lớn. Vì vậy, thật tốt khi chọn kiến ​​trúc phù hợp cho dự án của bạn. ;)


@EmilMarashliev chỉ là mục tiêu xây dựng. Bạn sẽ thấy nó khi bạn chọn dự án gốc của bạn (với biểu tượng màu xanh).
Kjuly

@Praveen không chắc chắn, có vẻ như tùy chọn này được thay đổi trong Xcode 5.1.
Kjuly

Đây là câu trả lời đúng, bạn đã cứu tôi cả đời ở đây, cảm ơn :)
Bikramjit Singh

2
Đây là câu trả lời rõ ràng và đầy đủ nhất. Chắc chắn nên là người được phê duyệt !!! Cảm ơn bạn
MeV

1
điều này rất hữu ích câu trả lời sẽ hoàn tất, nếu bạn có thể thêm cách tải xuống kiến ​​trúc cần thiết.
Kalpesh Popat

29

Thêm arm64vào mục tiêu valid architectures. Có vẻ như nó thêm x86-64kiến trúc để mô phỏng kiến ​​trúc hợp lệ là tốt.


27

Nếu bạn đang sử dụng CocoaPods, vấn đề rất có thể là do Dự án xây dựng dự án Pods của bạn cho Build Active Architecture Only được đặt thành Yes cho Debug.

Giải pháp rất đơn giản. Thay đổi nó thành Không .

Tương tự, thay đổi thành Không cho dự án ứng dụng của bạn.


12

Tôi đã có vấn đề tương tự. Đã giải quyết bằng cách thay đổi "Kiến trúc" thành " $ (ARCHS_STANDARD_32_BIT) " trong Cài đặt bản dựng cho dự án.

Bây giờ, bạn phải chọn Kiến trúc tiêu chuẩn (armv7, arm64) - $ (ARCHS_STANDARD) vì apple khuyến nghị các ứng dụng được xây dựng trên kiến ​​trúc 64 bit. Bấm: Tài liệu Apple


@JayprakashDubey, cái này thì sao? $(ARCHS_STANDARD_INCLUDING_64_BIT)?
Hemang

Tôi nên sử dụng $(ARCHS_STANDARD_32_BIT)hay $(ARCHS_STANDARD_INCLUDING_64_BIT)?
Hemang

@hagile: Đi với $ (ARCHS_STANDARD_INCLUDING_64_BIT)
Jayprakash Dubey

10

Thêm: Kiến trúc: $ (ARCHS_STANDARD_INCLUDING_64_BIT)

Kiến trúc hợp lệ: arm64 armv7 armv7s


Hmm, bạn đã thử thiết lập lại mọi thứ, nội dung giả lập, giả lập, dọn dẹp dự án, khởi động lại xCode và Mac, vì tôi có xCode5.1 và trình giả lập của tôi đang hoạt động tốt
AntonijoDev

Bạn có đang chạy ứng dụng / trình giả lập của mình bằng iPhone 4 inch 64 bit không?
ebi

5

Trong trường hợp, đối với bất kỳ ai vẫn gặp phải sự cố mặc dù đã làm theo các điều trên, hãy kiểm tra xem trình giả lập bạn đang chạy cũng là trình hỗ trợ. Tôi đã chỉ định cho arm7 và arm7 nhưng đang cố chạy ứng dụng trên trình giả lập 64 bit.


+1 Có, đây là một trong những! Sau khi kiểm tra và kiểm tra lại và kiểm tra ba lần rằng mọi thứ vẫn ổn, đây là vấn đề!
JOM

1
Ồ Tôi phải thực sự cắm vào thiết bị tôi muốn xây dựng để có được mã đích thích hợp được biên dịch? Tôi chỉ mút một chút trong miệng. Bài viết của bạn đã giải quyết vấn đề này cho tôi, cảm ơn.

5

Để tránh việc "cài đặt pod" thiết lập lại only_active_arch để gỡ lỗi mỗi khi nó chạy, bạn có thể thêm phần sau vào tệp pod của mình

# Append to your Podfile
post_install do |installer_representation|
    installer_representation.project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
        end
    end
end

3

Chỉ cần thêm arm64 trong kiến ​​trúc hợp lệ. Tôi hy vọng nó sẽ làm việc cho bạn.


3

Vấn đề của tôi là dự án Pods đã nhắm mục tiêu OS X, mặc dù Podfile của tôi có platform :ios. Tôi đang sử dụng cocoapods 0.35.0.rc2.

Để khắc phục, hãy chọn dự án Pods trong trình điều hướng dự án và kiểm tra xem nút Pods PRO DỰ ÁN (lưu ý bạn, không phải mục tiêu Pods) đang nhắm mục tiêu iOS. Đó là, các thiết lập xây dựng kiến ​​trúc nên là:

  • Kiến trúc: $(ARCHS_STANDARD)
  • SDK cơ sở: iOS 8.1
  • Nền tảng được hỗ trợ: iOS
  • Kiến trúc hợp lệ: $(ARCHS_STANDARD)

Tôi cũng muốn xây dựng tất cả các kiến ​​trúc, vì vậy tôi đã thêm phần sau vào Podfile:

post_install do | installer |
    installer.project.build_configurations.each do |config|
        config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
    end
end

3

Tôi đã có thêm những điều sau i386x86_64đến Valid Architectures. Tôi đang chạy Xcode 7.2 và nhắm mục tiêu iOS 8+. Tôi đã có armv7, armv7sarm64ở đó và nó đang hoạt động trong Xcode 6.4.


2

Tôi gặp phải vấn đề tương tự khi chạy ứng dụng của mình trên iPad bằng xcode 5.1. Nó đã được giải quyết bằng cách xóa armv7 khỏi 'kiến trúc hợp lệ' và đặt giá trị 'chỉ xây dựng kiến ​​trúc hoạt động' thành Không. Cả hai trường này có thể được tìm thấy trong ứng dụng của bạn-> mục tiêu-> xây dựng cài đặt-> kiến ​​trúc.


2

Tôi đã đến câu hỏi này do một vấn đề với việc xây dựng dòng lệnh cho trình giả lập trong Xcode 7.2. Trong trường hợp bất kỳ ai khác đến đây với cùng một vấn đề, tôi sẽ chia sẻ giải pháp tôi tìm thấy:

Rõ ràng có một lỗi trong Xcode 7.2 gây ra xcodebuildlỗi khi cố gắng xây dựng cho trình giả lập. Giải pháp là chỉ định tùy chọn "-destination", ví dụ:

xcodebuild -project TestBuildCmd.xcodeproj -scheme TestBuildCmd -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 6' build

Cập nhật

Lệnh ví dụ trên sẽ xây dựng một nhị phân bao gồm cả đồ họa cho iPhone 6. Nếu nhị phân được chạy trên các trình giả lập khác, đồ họa iPhone 6 được chia tỷ lệ cho nền tảng. Một cách giải quyết tốt hơn chứa tất cả đồ họa cho tất cả các nền tảng là chỉ định tham số PLATFORM_NAME=iphonesimulator, ví dụ:

xcodebuild -project TestBuildCmd.xcodeproj -scheme TestBuildCmd -sdk iphonesimulator -arch i386 PLATFORM_NAME=iphonesimulator build

0

Hãy thử xóa tất cả các kiến ​​trúc trước đó (nghĩa là xóa cài đặt ARCHS_STANDARD) cùng lúc với khi bạn thêm i386 vào Kiến trúc. Điều này sẽ thay đổi kiến ​​trúc hoạt động thành i386. Tôi đã gặp một vấn đề tương tự khi tôi cố gắng xây dựng cho armv7 theo mặc định, nhưng nó vẫn cố gắng xây dựng cho arm64. Tôi đã thay đổi ARCHS_STANDARD thành ARCHS_STANDARD_32_BIT và điều này đã thay đổi kiến ​​trúc hoạt động được chọn.


0

Trong acrhiecture - đôi khi để hỗ trợ 6.0 và 7.0, chúng tôi loại trừ arm64

Trong kiến ​​trúc -> acrch architecture - chọn kiến ​​trúc tiêu chuẩn arm64 armv7 armv7s. Ngay bên dưới trong Kiến trúc hợp lệ làm cho người dùng arm64 armv7 armv7 được bao gồm. Điều này làm việc cho tôi.


0

Tôi đã giải quyết vấn đề này bằng cách sử dụng câu trả lời của @ Kjuly và dòng cụ thể:

"Lý do không thể xây dựng có thể là vì dự án không hỗ trợ kiến ​​trúc của thiết bị bạn đã kết nối."

Khi tải Xcode, nó tự động đặt ứng dụng iPad của tôi thành iPad Air

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

Điều này gây ra lỗi phân tích phụ thuộc.

Thay đổi loại thiết bị ngay lập tức giải quyết vấn đề:

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

Tôi không biết lý do tại sao điều này hoạt động nhưng đây là một câu trả lời rất nhanh đã giúp tôi tiết kiệm rất nhiều vấn đề xung quanh và ngay lập tức ứng dụng hoạt động để kiểm tra. Tôi sẽ không bao giờ nghĩ rằng đây có thể là một điều và một cái gì đó đơn giản sẽ khắc phục nó nhưng trong trường hợp này nó đã làm.


0

Tôi thấy rằng cần phải nhập tên kiến ​​trúc bằng tay:

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

Tôi không biết tại sao điều này lại cần thiết, tức là tại sao những giá trị này không được kế thừa từ chính Xcode. Nhưng ngay khi tôi làm điều này, vấn đề đã biến mất.


0

Trong Kiến trúc hợp lệ: Chọn từng mục (phát hành, gỡ lỗi) và xây dựng và nhấn backspace. Nó nên hoạt độ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.