2012-05-28 28 views
18

Có cách nào để Xcode cho tôi biết khi tôi đang gọi phương thức không có sẵn trong SDK của mục tiêu được hỗ trợ tối thiểu không?iOS Xcode: Cảnh báo về các phương pháp không nằm trong mục tiêu tối thiểu SDK

Ví dụ: phương pháp [NSURLConnection sendAsynchronousRequest: queue: completionHandler:]. Phương thức này có sẵn trên iOS5 trở lên. Nhưng mục tiêu tối thiểu của ứng dụng của tôi là iOS4.

Nếu tôi sử dụng phương thức đó (sendAsync), tôi muốn Xcode cho tôi biết rằng phương thức đó không khả dụng cho mục tiêu tối thiểu mà tôi đang cố gắng hỗ trợ.

Tôi đã thử đặt __IPHONE_OS_VERSION_MAX_ALLOWED = 40000 trong cài đặt tiền xử lý, nhưng điều đó chỉ kích hoạt một loạt lỗi Apple SDK không hữu ích. (Có thể do SDK đang hoạt động của tôi là iOS5.1)

Giải pháp duy nhất để có được các SDK cũ và cài đặt chúng trong Xcode?

Có giải pháp nào dễ dàng hơn không?

+0

Tôi không chắc chắn nếu tôi hiểu câu hỏi. Bạn luôn sử dụng SDK mới nhất ngay cả khi bạn nhắm mục tiêu phiên bản cũ hơn.Trên thực tế, Apple sẽ không chấp nhận ứng dụng của bạn trong App Store nếu bạn không sử dụng SDK mới nhất. Nhưng miễn là bạn chỉ sử dụng tập hợp con của các API có sẵn cho phiên bản đích, bạn là vàng. –

+0

đúng, nhưng nếu có những người đang cài đặt ứng dụng trên iOS4, tôi cần đảm bảo rằng tôi không sử dụng bất kỳ API iOS5 + nào. Vì vậy, tôi đang tìm một cách để cho xcode cảnh báo tôi thay vì phải xem xét mọi dòng mã và kiểm tra lại xem đó là iOS 4 an toàn. – gngrwzrd

+0

Có thể [this Apple techdoc] (http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/cross_development/Configuring/configuring.html#//apple_ref/doc/uid/10000163i-CH1-SW2) có thể giúp đỡ? –

Trả lời

5

Sau khi thực hiện một số nghiên cứu, hãy đọc số Apple Doc về điều đó và thử một số điều. Giải pháp đang tải xuống một Xcode DMG cũ từ Apple, lấy tệp .pkg cho cùng một SDK làm mục tiêu triển khai của bạn và cài đặt nó trong phiên bản Xcode của bạn. Đây là cách:

  1. Tải cũ Xcode.dmg từ Apple
  2. Mở DMG
  3. Trong Terminal, đi vào gói: "cd/Volumes/[DMG]/gói; mở"
  4. Tìm SDK mà bạn muốn, cái gì đó như iPhoneSDK_4.0.pkg
  5. Cài đặt gói phần mềm đó, nhưng thay đổi thư mục cài đặt vào/Applications/Xcode/Contents/Developer
  6. Restart Xcode nếu nó đã được mở.

Bây giờ bạn có cùng SDK với mục tiêu triển khai, hãy đặt BaseSDK của bạn thành giống nhau. Khi bạn xây dựng, bạn sẽ nhận được cảnh báo về các phương pháp bị thiếu. Dự án của bạn có thể hoặc có thể không xây dựng thành công với một BaseSDK cũ hơn trong một phiên bản mới của Xcode, nhưng điều đó không quan trọng - bạn vừa tìm thấy các cuộc gọi phương thức bạn cần để bọc trong một tính năng kiểm tra với respondsToSelector :.

6

Rất tiếc, không có cách nào tiêu chuẩn để thực hiện việc này. Bằng cách thiết lập hệ điều hành đích đến một số thấp hơn so với SDK cơ sở, Xcode sẽ liên kết yếu đến các thư viện và các khung công tác. Khi thực hiện Xcode đó sẽ không cảnh báo bạn về việc sử dụng các phương thức có thể không có sẵn trên hệ điều hành đích.

Bạn có thể tạm thời đặt SDK cơ sở thấp hơn, nhưng điều đó có thể không phải lúc nào cũng hoạt động. Vì bạn muốn bỏ qua hầu hết các lỗi và cảnh báo được tạo ra (vì chúng chỉ được gọi là điều kiện trong đường dẫn mã của bạn), và nhiều cảnh báo và lỗi phụ thuộc vào lỗi khác mà bạn có thể cần phải giải quyết trước khi trình biên dịch đưa ra bất kỳ đầu ra có ý nghĩa nào.

Tôi không nghĩ rằng có tồn tại bất kỳ công cụ phân tích tĩnh nào cho điều này, không phải từ Apple cũng như của bên thứ ba.

+0

đã đồng ý, tôi cũng thấy điều tương tự. – gngrwzrd

0

Kể từ Xcode 7.3, trình biên dịch giờ đây có thể tạo các cảnh báo này cho bạn. Tất cả những gì bạn cần làm là đặt cờ cảnh báo -Wpartial-availability trong Cài đặt Xây dựng, như được mô tả trong this answer.

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