2009-06-12 2 views
42

Tôi muốn sử dụng một số tính năng của iPhone OS 3.0 trong ứng dụng 2.0 của mình khi chạy trên thiết bị 3.0. Tôi không muốn đi 3,0 tất cả các cách vì có những khách hàng không muốn cập nhật được nêu ra.Làm cách nào để tùy chọn sử dụng các tính năng của iPhone OS 3.0 trong ứng dụng tương thích 2.0?

Tôi đã thử nghiệm một chút với liên kết yếu của MapKit.framework (-weak_framework MapKit). Tôi tìm thấy nó khá cồng kềnh, vì tôi đã phải lừa trình biên dịch/liên kết để sử dụng SDK 2.0 với tất cả các mã ngoại trừ một trong đó sử dụng MapKit.

Có ai có kinh nghiệm về điều này không? Bạn đang làm gì để biên dịch/liên kết. Có ai đã gửi một ứng dụng cho Apple, mà các khung liên kết yếu từ các phiên bản hệ điều hành khác không?

Trả lời

36

Apple có một ví dụ về làm thế nào để làm điều này, đặc biệt là thực hiện một ứng dụng 2.x tương thích sử dụng MFMailComposeViewController ....

http://developer.apple.com/iphone/library/samplecode/MailComposer/index.html

câu trả lời liên quan đến việc biên soạn với SDK 3.0, thiết lập mục tiêu triển khai đến 2.x, đảm bảo rằng các khung công tác 3.0 được đánh dấu là tham chiếu "yếu", và sau đó làm điều đúng để làm cho mã của bạn hoạt động nếu bạn đang ở trên một thiết bị không có khung công tác mới.

+0

Tuyệt vời! Đây là câu trả lời tôi đang tìm kiếm! –

+0

Cần lưu ý rằng có những báo cáo rằng Apple đã từ chối các ứng dụng có liên kết yếu StoreKit trong nỗ lực sử dụng mua hàng trong ứng dụng nếu chạy trên 3.x (nếu không nếu không dưới 2.x). Vì vậy, YMMV. – shek

+0

bạn có liên kết không? Tôi có thể thấy Apple rất nhạy cảm về mua hàng trong ứng dụng. Trong mọi trường hợp, tôi có một vài ứng dụng trong cửa hàng liên kết yếu đến khung MessageUI. –

1

Đây có thể không phải là câu trả lời bạn đang tìm kiếm, nhưng phương pháp tôi sử dụng là chỉ có hai ứng dụng riêng biệt. Thay vì cập nhật các ứng dụng hiện có của tôi với bản nâng cấp 3.0, tôi chỉ phát hành ứng dụng này dưới dạng ứng dụng mới. Người dùng cũ có thể sử dụng ứng dụng 2.0 miễn là họ muốn và những người muốn có các tính năng 3.0 có thể nâng cấp.

+0

Đó là những gì tôi đã sử dụng nếu ứng dụng của tôi miễn phí. Nhưng vì có những khách hàng đã trả tiền trước đó, tôi không thể yêu cầu họ mua lại ứng dụng để có được các tính năng 3.0. –

+2

Chắc chắn bạn có thể. Trừ khi bạn đang tính một khoản tiền khổng lồ cho ứng dụng của mình, việc nâng cấp có giá là rất phổ biến.Bạn đặt nhiều công việc hơn vào chương trình và sẽ được trả tiền cho nó. Apple đang tính thêm $ 29 cho việc nâng cấp lên hệ điều hành của họ ... –

+0

upvote để giúp tôi kiếm được nhiều tiền hơn! –

-1

Tôi không nghĩ bạn có thể. 3.0 và 2.x sử dụng các SDK hoàn toàn khác nhau và liên kết đến một bộ tệp và thư viện hoàn toàn khác. Tôi không chắc chắn, nhưng tôi không nghĩ rằng bạn có thể liên kết với SDK 3.0 và vẫn tương thích với 2.X.

(vui lòng thêm nhận xét nếu tôi sai).

+0

Vâng, có vẻ như nó hoạt động, ít nhất là với các thiết bị của tôi. Tôi đã thử nó trên một iPhone 2.2.1 và một với 3.0 GM. Các khung công tác có cùng tên chính xác (công cụ phiên bản khuôn khổ dường như bị loại bỏ trên hệ điều hành iPhone: không có 'phiên bản/A' trong đường dẫn). Dường như Apple cố gắng giữ cho các khung công tác tương thích từ hệ điều hành đến hệ điều hành, bây giờ chúng có các biến mẫu không mong manh. –

5

Bạn luôn có thể liên kết đến các khung không phải là một phần của SDK hiện tại bằng chức năng dlopen. Tất nhiên, điều này không được khuyến khích cho các khung công khai (không được khuyến nghị == bị cấm trên cửa hàng ứng dụng, trong trường hợp này). Tuy nhiên, khi các khung công tác mới trong các phiên bản chưa được phát hành của hệ điều hành trở nên công khai, đó là một lựa chọn. Chỉ cần kiểm tra số phiên bản của bạn và mở các khung công tác có sẵn. Hữu ích cho các tính năng riêng lẻ, không quá nhiều nếu bạn đang sử dụng nhiều thứ mới.

+0

Giải pháp dlopen có cùng điểm yếu như cách tiếp cận -weak_framework: Bạn phải biên dịch mã sử dụng các biểu tượng của khung công tác 3.0 với SDK 3.0. –

+1

không, bạn có thể xây dựng dựa trên SDK 2.x và chỉ cần NSClassFromString để lấy tên lớp. –

+0

Tôi xem xét việc không thể sử dụng các tiêu đề gốc một điểm yếu. Một workaround tôi có thể hình ảnh sẽ được xây dựng các phần liên quan 3,0 trong một thư viện tĩnh và liên kết này với các ứng dụng 2.0. Tôi chưa thử nghiệm điều này. –

0

lớn howto về Liên kết yếu (cả thư viện và Nòng Cốt) ở đây:

http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WeakLinking.html#//apple_ref/doc/uid/20002378-107262

Mặc dù đó là một trong số ít ngày ... với x-mã mới nhất quy trình yếu liên kết toàn bộ khung là thực sự dễ dàng hơn:

  1. nhấp chuột phải vào mục tiêu và chọn Get Info
  2. Chuyển đến tab "General"
  3. Trong phần thư viện được liên kết về phía dưới, thay đổi Loại từ cần thiết thành yếu cho tất cả các thư viện mà bạn muốn liên kết yếu.
  4. Lợi nhuận