Có thể nhắm mục tiêu các phiên bản iOS cũ hơn khi sử dụng Xcode 4.2 và iOS 5 SDK không?


103

Tôi vừa mới tải xuống gói Xcode 4.2 với iOS 5 SDK và ngay lập tức nhận thấy rằng tôi không thể sử dụng iPhone 3G với iOS 4.2.1 để gỡ lỗi. Tôi chỉ có thể gỡ lỗi và kiểm tra trên iphone 4 của mình có cài đặt iOS 5.

Đối với bất kỳ thiết bị nào của tôi chạy iOS dưới 5.0 Xcode chỉ thông báo "Đã chạy xong cho iPhone3GS" và không chạy nó. Tôi đã đặt mục tiêu triển khai thành 3.0 vì tôi không sử dụng bất kỳ tính năng nào trong ứng dụng của mình trên 3.0 và tôi muốn có thể nhắm mục tiêu tất cả các phiên bản 3.0 trở lên. Tôi đã cài đặt tất cả hồ sơ cấp phép của mình và cập nhật.

Tôi đã thoát và khởi động lại xcode, tôi đã làm sạch bản dựng nhiều lần. Tôi đã thử thêm armv6 trong cài đặt xây dựng kiến ​​trúc, nhưng không có gì cho phép tôi xây dựng và chạy ứng dụng của mình trên điện thoại cũ với ios 4.2.1.

Câu hỏi của tôi là, có thể vẫn làm cho các ứng dụng với SDK mới hoạt động cho các phiên bản iOS thấp hơn 5 không? Làm cách nào để tôi có thể chắc chắn rằng ứng dụng của mình sẽ vẫn chạy trên các phiên bản iOS thấp hơn nếu tôi không thể cài đặt chúng trên điện thoại cũ của mình?

Chỉnh sửa: OK, có vẻ như iOS SDK 5 đã bỏ hỗ trợ armv6 theo mặc định. Những gì bạn phải làm là thêm armv6 vào trường Kiến trúc trong Cài đặt xây dựng cho cả Mục tiêu và Dự án của bạn. Sau đó, ứng dụng của bạn sẽ có thể chạy trên các thiết bị iPhone 3G. Có thể tìm thấy câu trả lời tại đây Cách xây dựng cho kiến ​​trúc armv6 và armv7 với iOS 5


Lưu ý rằng chỉnh sửa của bạn phải liên quan đến kiến ​​trúc, đây là một vấn đề riêng biệt đối với iOScác phiên bản. Ngoài ra, vui lòng thêm chỉnh sửa làm câu trả lời để bạn có thể chấp nhận giải pháp bạn đã tìm thấy và câu hỏi này có thể được đánh dấu là đã trả lời.

Câu trả lời:


153

Tôi đã gặp vấn đề tương tự khi cố gắng tải dự án Xcode 4.2 mới được tạo chạy trên iPhone 3G 4.2.1. Đây là cách tôi có thể làm cho nó chạy.

1) Thay đổi "Cài đặt xây dựng" ==> "Kiến trúc" của Target từ "Tiêu chuẩn (armv7)" thành "khác". Thêm armv6 và armv7.

2) Thay đổi "Cài đặt xây dựng" ==> "Kiến trúc hợp lệ" của Mục tiêu thành armv6 và armv7.

3) Thay đổi "Cài đặt xây dựng" ==> "Mục tiêu triển khai iOS" của Target thành iOS 4.2.

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

4) Mở các dự án * -Info.plist, xóa cài đặt "Khả năng thiết bị được yêu cầu" (lưu ý rằng yêu cầu armv7) nhập mô tả hình ảnh ở đây

btw Tôi đã tìm ra điều này khi tôi cố gắng thêm ứng dụng theo cách thủ công thông qua trình tổ chức và nó báo cáo:

Không thể cài đặt ứng dụng

Info.plist cho ứng dụng tại /Users/.../TestsDebug.app chỉ định các yêu cầu về khả năng của thiết bị mà Dev iPhone 3G không đáp ứng được

Tất cả sẽ hoạt động sau đó. Nói về PITA.


Cảm ơn rât nhiều! Tôi nợ bạn một ít bia! Điều này thực sự giải quyết vấn đề của tôi, Pita thực sự: D
Greg Ellis

4
Cảm ơn bạn! Tôi đã đọc về cài đặt kiến ​​trúc ở nơi khác, nhưng dường như không ai khác đề cập đến cài đặt "Khả năng thiết bị được yêu cầu".
bunnyhero

Tôi phải nói thêm: cả dự án mới và cũ đều bị ảnh hưởng khi nâng cấp! Tôi đã kiểm tra nội dung cũ của mình trước khi googling và chúng cũng không hoạt động! Tôi cũng nợ bạn một ly bia! :)
Eduardo Costa

1
Tôi gặp vấn đề tương tự, nhưng ngay cả khi cài đặt của dự án là 'armv7 tiêu chuẩn' cho Kiến trúc, thì các Kiến trúc hợp lệ đã chỉ ra 'armv6 armv7'. Hơn nữa, tôi không có thuộc tính 'Khả năng thiết bị được yêu cầu' trong Info.plist. Dù sao cũng sẽ thử thủ thuật này, hy vọng nó sẽ hiệu quả!
rchampourlier

các "khả năng thiết bị yêu cầu" đã cho tôi quá
codecaffeine

12

Đi tới Xcode> Tùy chọn> Tải xuống và cài đặt hỗ trợ gỡ lỗi cho các phiên bản iOS cũ hơn.


Tôi đã truy cập tùy chọn và tải xuống và cài đặt hỗ trợ gỡ lỗi cho các hệ điều hành cũ hơn, thoát xcode, mở lại xcode đã thực hiện dọn dẹp và xây dựng, nhưng ứng dụng vẫn không cài đặt trên thiết bị cũ của tôi. Tôi đang ở một tổng thiệt hại bây giờ, như khi tôi thấy trả lời của bạn tôi nghĩ chắc chắn rằng sẽ khắc phục vấn đề của tôi :(
Greg Ellis

1
Tôi cũng nợ bạn một ly bia! Điều này đã giải quyết được MỘT SỰ CỐ KHÁC mà tôi gặp phải sau khi nâng cấp Xcode 4! Bây giờ tôi có thể gỡ lỗi thiết bị iOS 4.2 của mình (iPod Touch thế hệ thứ 2)!
Eduardo Costa

3

mmorris đã giúp tôi gần giải quyết được sự cố ... Trong Info.plist, tôi phải đặt Khả năng thiết bị cần thiết thành armv6, không phải armv7 Hy vọng điều này cũng giúp ích cho những người khác.


1

Bạn cần kết nối điện thoại và sau đó đi đến nhà tổ chức. Xcode sẽ tự động yêu cầu phiên bản cũ hơn.

Xem trang nhà phát triển để biết thêm thông tin. Nó đã được mô tả trong ghi chú cho bản beta 4.2


Tôi đã làm điều này và nhấp vào "Sử dụng thiết bị này để phát triển" và nó dường như làm được những gì nó được yêu cầu, nhưng tôi vẫn không thể tải ứng dụng chạy trên thiết bị cũ của mình từ xcode.
Greg Ellis

1

Tôi gặp phải sự cố tương tự khi cố chạy ứng dụng của mình trên iPod Touch cũ. Tôi đã nâng cấp lên Xcode 4.3.3 và ứng dụng sẽ không còn chạy trong trình gỡ lỗi đối với tôi trên phần cứng cũ hơn.

Tôi tin rằng các nhận xét khác ở đây về "Kiến trúc" và "Khả năng thiết bị được yêu cầu" là những chi tiết quan trọng để chỉ định chính xác. Thật không may, họ không đủ để khắc phục sự cố của tôi.

Trong trường hợp của tôi, tôi tìm thấy sơ đồ xây dựng là thủ phạm. Xcode 4.3.3 đã nhắc tôi chuyển từ trình gỡ lỗi GDB sang LLDB khi nó nâng cấp dự án của tôi. Khi tôi thay đổi hành động Run của lược đồ trở lại GDB , tôi có thể chạy lại ứng dụng trên phần cứng cũ của mình từ Xcode.


1

Tôi phát hiện ra rằng tôi đã phải thêm armv6 vào kiến ​​trúc, nhưng vẫn không hoạt động. Và bây giờ tôi đã loại bỏ armv7 khỏi các khả năng cần thiết, và đó là nó! Nó đã làm việc!


0

Điều này phù hợp với tôi và sẽ phù hợp với bạn nếu trước đó bạn đã có phiên bản Xcode cũ hơn. Nếu không, bạn nên làm theo lời khuyên của những người khác để tải SDK từ phiên bản SDK cũ hơn:

sudo cp -a /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk /Application/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk

Lệnh này chỉ khác một chút so với lệnh được hiển thị bởi những người khác, nhưng những lệnh đó đã thả các tệp trong chính thư mục SDK cho tôi - chúng tôi muốn một thư mục con của nó được tạo với tên thích hợp.


0

Trong trường hợp của tôi, có một dòng thừa trong Khả năng thiết bị bắt buộc nhập mô tả hình ảnh ở đây

Tôi vừa xóa nó ...

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

Hy vọng rằng nó sẽ giúp một người khác.

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.