亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Xcode是否可以警告新的API調用?

Xcode是否可以警告新的API調用?

侃侃爾雅 2019-11-27 12:50:33
在不止一次的情況下,我已經看到由于使用了4.x中引入的新調用而未進行適當檢查的情況下,iOS 3.x上出現了崩潰的錯誤。Xcode是否有辦法警告只能在比部署目標更高的版本上使用的類,方法和過程?這樣,我可以輕松列出所有代碼,并確保將其適當條件化。
查看完整描述

3 回答

?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

至少在OS X上,使用最新的clang / SDK,現在有一個-Wpartial-availability選項(例如在“其他警告選項”中添加),然后可以定義以下宏以封裝用于支持運行時測試的代碼(如果支持該方法)


#define START_IGNORE_PARTIAL _Pragma("clang diagnostic push") _Pragma("clang diagnostic ignored \"-Wpartial-availability\"")

#define END_IGNORE_PARTIAL _Pragma("clang diagnostic pop")

我還沒有在iOS上進行測試。


查看完整回答
反對 回復 2019-11-27
?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

深入研究之后AvailabilityInternal.h,我意識到部署目標上方的所有可用版本都被__AVAILABILITY_INTERNAL_WEAK_IMPORT宏標記。


因此,我可以通過重新定義該宏來生成警告:


#import <Availability.h>

#undef  __AVAILABILITY_INTERNAL_WEAK_IMPORT

#define __AVAILABILITY_INTERNAL_WEAK_IMPORT \

    __attribute__((weak_import,deprecated("API newer than Deployment Target.")))

通過將此代碼放置在項目的預編譯頭文件中,任何可能在受支持的最低iOS版本上導致崩潰的API用法現在都會產生警告。如果您正確地保護了呼叫,則可以專門針對該呼叫禁用警告(Apple SDK兼容性指南中的修改后的示例):


#pragma GCC diagnostic ignored "-Wdeprecated-declarations"

    if ([UIPrintInteractionController class]) {

        // Create an instance of the class and use it.

    }

#pragma GCC diagnostic warning "-Wdeprecated-declarations"

    else {

        // Alternate code path to follow when the

        // class is not available.

    }


查看完整回答
反對 回復 2019-11-27
  • 3 回答
  • 0 關注
  • 773 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號