Câu trả lời:
Hôm nay tôi vừa xây dựng một cái gì đó xác định mục tiêu triển khai của iOS 4.0. Chỉ với armv7 được chỉ định trong Architectures, Xcode đã cảnh báo tôi rằng để hỗ trợ bất kỳ thứ gì bên dưới iOS4.2, tôi phải đưa armv6 vào Architectures. Chỉ cần chỉnh sửa trường đó, nhấp vào nút "+" khi hộp thoại bật lên và nhập "armv6" theo nghĩa đen.
Trong trường hợp của tôi, chúng tôi muốn ứng dụng của mình hoạt động trên iOS4 và iOS5. Chúng tôi đã phải thực hiện một số sửa đổi để nó hoạt động chính xác trong iOS5, nhưng tất cả những thay đổi đó đều được thực hiện với các thay đổi mã thân thiện với iOS4.
Chúng tôi cũng đã thêm một số tính năng dành riêng cho iOS5 theo cách cho phép ứng dụng chạy mà không gặp sự cố trong iOS4. Cụ thể, chúng tôi đã kiểm tra các khả năng của iOS5 trước khi cố gắng sử dụng chúng và liên kết các thư viện chỉ dành cho iOS5 là Tùy chọn.
Vì vậy, việc hỗ trợ iPhone3G trong thế giới iOS5 có thể dễ dàng có nghĩa là "chúng tôi muốn ứng dụng của mình chạy trên iOS4 trở lên (bất kể sử dụng tính năng iOS5 nào)" chứ không phải "chúng tôi muốn đảm bảo ứng dụng của mình chạy trên thiết bị cũ hơn chạy iOS5 ". Có một sự khác biệt ở đây; nghĩ về nó. :-)
Dù sao, việc thêm hỗ trợ armv6 trở lại là rất dễ dàng. Và tôi đoán vấn đề ở đây là: Tại một thời điểm nào đó, khi không còn thiết bị armv6 nào ngoài kia để lo lắng (vì bất cứ lý do gì), bạn sẽ không phải xây dựng cho nó. Quan điểm của Apple là mọi người nên nâng cấp lên phần cứng mới nhất càng sớm càng tốt. Vì vậy, trong thế giới đó, không cần phải có các công cụ mặc định cho bất cứ thứ gì ngoài những thứ mới nhất và lớn nhất. :-) May mắn thay (hoặc không), các nhà phát triển của chúng tôi sống trong thế giới thực và nhận ra rằng bạn phải hỗ trợ những thứ cũ hơn một thời gian. Và tôi đoán nhóm nhà phát triển Xcode cũng biết điều này, đó là lý do tại sao bạn có thể thêm hỗ trợ armv6 trở lại khá đơn giản.
Câu trả lời đơn giản là bạn phải thay đổi cài đặt hiện tại từ "Standard (armv7) - $ (ARCHS_STANDARD_32_BIT)" thành "armv6" và "armv7". Xem hình ảnh bên dưới. Bạn phải xóa dòng có cài đặt trước đó để nó hoạt động.
cũng đảm bảo rằng bạn đặt điều này trong Dự án VÀ Mục tiêu ... tôi mất một giờ để tìm ra điều đó. đã đặt nó cho cái này chứ không phải cái khác. hi vọng điêu nay co ich. GLTA
Tôi nghĩ rằng có một lý do tại sao Apple bỏ armv6 khỏi cài đặt tiêu chuẩn.
Tôi đã biên dịch armv7 / armv6 với iOS5 SDK, tuy nhiên, trình biên dịch armv6 đã tạo sai mã trong chế độ phát hành. Sau nhiều giờ tìm cách giải quyết (thử llvm hoặc gcc với các mức tối ưu hóa khác nhau), tôi bỏ cuộc.
Vì vậy, tôi sẽ quay lại iOS SDK 4.x miễn là tôi hỗ trợ các thiết bị armv6 cũ hơn.
Ví dụ về mã:
// myView center=(160, 100)
CGPoint p=myView.center;
// now p=(100,100) (what the heck?)
p.x=myView.center.x;
p.y=myView.center.y;
// now p=(160,100)
p.y+=100;
// now p =(200,200) (what the heck?)
Có thể tôi bị hỏng bộ nhớ, tuy nhiên, trên trình biên dịch armv7 và trên iOSSDK <5.0, nó hoạt động như mong đợi.
Trân trọng
Không chắc liệu đây có thực sự là một giải pháp hay không, nhưng tôi đã phát hiện ra rằng việc thay thế chuỗi đã xác định trong "kiến trúc", là $ (ARCHS_STANDARD_32_BIT), bằng "armv6 armv7" đã cho phép tôi biên dịch với iOS5 làm cơ sở và iOS4 dưới dạng triển khai mục tiêu và vượt qua xác thực.
Tôi không sử dụng bất kỳ thư viện hoặc lệnh gọi nào dành riêng cho IOS5, nhưng có ý định sử dụng trong bản phát hành tiếp theo của mình.