2011-11-30 30 views
14

Tôi có một Ứng dụng iPhone sẽ chạy trên armv7 cũng như armv6. Để gỡ lỗi ứng dụng cũng nên chạy trong trình mô phỏng.

Tiêu chuẩn trong Xcode 4.2 là thế này:

ARMv7 ($(ARCHS_STANDARD_32_BIT))

Nó không phải là rõ ràng với tôi những gì $(ARCHS_STANDARD_32_BIT) là viết tắt của và nếu tôi nên sử dụng hai:

  1. $ (ARCHS_STANDARD_32_BIT)
  2. armv6

Hoặc cả ba như thế này

  1. ARMv6
  2. ARMv7
  3. i386

lựa chọn tốt nhất cho điều này trong trường hợp của tôi là gì? Và cách thức Architectures hoạt động với Valid Architectures

+0

Bây giờ tôi có thể biên dịch nó cho armv6 khi sử dụng 'armv6' và' armv7' làm 'kiến trúc' (không có' i386'). Vì vậy, hiện tại tôi không sử dụng '$ (ARCHS_STANDARD_32_BIT)' – Besi

+4

$ (ARCHS_STANDARD_32_BIT) được định nghĩa trong mẫu mặc định Xcode mà bạn không thể sửa đổi, mặc dù bạn có thể ghi đè lên bằng cách tạo cấu hình của riêng bạn.Nó được sử dụng để được định nghĩa là "armv6 arv7" nhưng họ đã thay đổi nó trong 4,2 thành "armv7". Tôi đã có thể khôi phục hành vi cũ bằng cách chỉ sử dụng kỹ thuật đầu tiên của bạn, nhưng chỉ trên các mục tiêu sử dụng SDK iOS (bạn phải nhấp vào nút "(+)" nhỏ trong cài đặt xây dựng để thêm dòng cho SDK iOS vs trình mô phỏng và chỉ thay đổi nó cho iOS). –

+0

Có ai biết thiết bị iOS nào cần armv6 không? Nó chủ yếu chỉ là iPod Touch 3G như đã đề cập trong phần bình luận dưới đây? – mpontillo

Trả lời

16

Để chạy trong trình mô phỏng, bạn không phải làm gì cả.

Bạn có thể để lại các thiết lập Valid Architectures tại armv6 armv7, bởi vì, theo các tài liệu:

Trong xây dựng, danh sách này được giao với giá trị của Vòm xây dựng thiết

Để hỗ trợ armv6 và armv7, đặt kiến ​​trúc thành $(ARCHS_STANDARD_32_BIT) armv6, $ (ARCHS_STANDARD_32_BIT) hiện đang mở rộng đến armv7.

Đồng thời kiểm tra xem có cài đặt "Khả năng thiết bị bắt buộc" = UIRequiredDeviceCapabilities trong tệp plist của bạn hay không, vì Xcode sẽ thêm armv7 cho các dự án mới tại đó.

+0

có ý nghĩa hoàn chỉnh. Đối với một số lý do - vẫn chưa biết - Xcode bắt đầu phàn nàn với [BEROR] Không có kiến ​​trúc nào để biên dịch (ARCHS = armv6, VALID_ARCHS = i386). Đó là chỉ cho việc xây dựng mô phỏng. Thêm i386 vào danh sách các kiến ​​trúc hợp lệ đã gây ra một lỗi khác "mã thoát gcc 255". Vì vậy, câu trả lời của bạn là bang trên. Tôi đưa vào $ (ARCHS_STANDARD_32_BIT) bao gồm các mô phỏng và armv7, và thêm một dòng armv6 đặc biệt cho iPod Touch 3G 8GB. –

+0

Tôi đã có cùng một vấn đề chính xác như @MaxMacLeod và điều này cố định nó - ARCHS được đặt thành $ (ARCHS_STANDARD_32_BIT) nhưng VALID_ARCHS đến armv7. Thay đổi cả hai thành $ (ARCHS_STANDARD_32_BIT) hoạt động - mặc dù tôi không thực sự hiểu cách i386 là mục tiêu hợp lệ khi nó không được liệt kê! –

+0

@ k1th câu trả lời tốt đẹp .. một tham chiếu sẽ không làm tổn thương mặc dù .. tôi muốn biết nơi bạn tìm ra những gì ARCHS_STANDARD_32_BIT có nghĩa là (đã cho bạn một anyways +1 :) – abbood

8

Cập nhật với Xcode 4.5: Apple đã thêm các kiến ​​trúc mới armv7s, mà thêm optimisations cho phần cứng mới của iPhone 5.

Vì tôi không thể thử nghiệm ứng dụng của chúng tôi trên iPhone5 mới, tôi loại bỏ kiến ​​trúc này từ ứng dụng của chúng tôi bằng cách thay đổi kiến ​​trúc được hỗ trợ từ $(ARCHS_STANDARD_32_BIT) (có nghĩa là armv7 + armv7s) chỉ với armv7.

Nếu bạn muốn hoặc phải hỗ trợ iPhone 3G cũ hơn, bạn cũng cần phải thêm armv6.

Bạn cần thực hiện việc này cho cả hai cấu trúc Kiến trúcKiến trúc hợp lệ.

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