2015-02-24 46 views
4

我繼承了一個面向iOS6 +的iOS項目。幾個星期前,我將它移至Xcode 6並清理了所有警告。一個這樣的警告是:Xcode不再顯示已棄用的警告

'UITextAttributeTextShadowColor' is deprecated: first deprecated in iOS 7.0 - Use NSShadowAttributeName with an NSShadow instance as the value 

我修復此使用NSShadowAttributeName,但我做到了不正確,並導致應用程序在執行過程中的某一點崩潰。當我在幾周後發現時,我暫時恢復了舊代碼。但是,當我恢復到舊代碼時,棄用警告未返回。我一直無法弄清楚爲什麼,並希望彌補這一點 - 它警告我,警告不會顯示

在代碼的某些部分,由於需要維護對iOS 6的支持,因此我需要消除棄用警告。在這些情況下,iOS 6和iOS 7+設備有單獨的代碼, iOS的6個碼圍繞有:

SILENCE_IOS7_DEPRECATION(

// iOS 6 code here 

); 

(見https://stackoverflow.com/a/26564750/3352624)這使用:

#define SILENCE_DEPRECATION(expr)         \ 
do {                \ 
_Pragma("clang diagnostic push")         \ 
_Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") \ 
expr;                \ 
_Pragma("clang diagnostic pop")          \ 
} while(0) 

#define SILENCE_IOS7_DEPRECATION(expr) SILENCE_DEPRECATION(expr) 
#define SILENCE_IOS8_DEPRECATION(expr) SILENCE_DEPRECATION(expr) 

我選擇針對調整的Xcode設置,關閉警告對於大量的代碼。

所以我很困惑,爲什麼當我將代碼恢復到之前的狀態時,棄用警告不再顯示。

這是我已經試過:

  1. 刪除從我的代碼
  2. 驗證Deprecated Functions到SILENCE_DEPRECATION宏觀的所有引用是Build Settings下目標
  3. 驗證了我的Base SDK設爲Latest iOS (8.1)和我的iOS Deployment Target設置爲iOS 6.0
  4. -Weverything添加到Other Warnings FlagsBuild Settings下目標
  5. 經過了一箇舊版本的混帳我的工作區這是以前我的任何變化
  6. 退出並重新啓動的Xcode 6
  7. 試過的Xcode 5
  8. 重新啓動我的電腦,然後就開始的Xcode

這些事情都不會導致棄用警告恢復。任何想法接下來我應該嘗試什麼?

+0

對於項目本身呢? – Chase 2015-02-24 22:13:57

+0

您可以更改目標和項目的警告設置。驗證兩者都已啓用。 – Chase 2015-02-24 22:16:59

+0

@相傳謝謝,我只是檢查。對於目標和項目,「棄用函數」設置爲「是」。將'Build Settings'放在'Levels'模式下顯示它也解析爲Yes。 – davew 2015-02-25 00:50:03

回答

7

我意識到這是一個非常古老的線程,但我想我會發佈一個答案,以防其他人發現此線程。

它也取決於目標的部署目標設置(即在「TARGETS」下,點擊應用並選擇頂部的「常規」,查看「部署目標」的「部署信息」部分)。例如,如果我的部署目標爲7.1,並使用iOS 8中棄用的函數,則不會收到警告。但是,如果我將部署目標設置爲8.x或9.0,則會收到有關這些功能的警告。

+1

謝謝@guywithmazda,我剛回去測試一下。你是對的,如果我將部署目標從6.0調整到8.0,棄用警告再次出現。我仍然有點困惑,但是爲什麼我之前看到iOS 7棄用警告,因爲項目總是有6.0的部署目標。你知道Xcode的任何變化會影響這個嗎? – davew 2015-07-08 15:12:46

+0

對不起,我不知道。這可能是新版Xcode中的新行爲,但這只是推測。 – guywithmazda 2015-07-09 16:03:20