Xcode 不再向我显示已弃用的警告
Xcode no longer showing me deprecated warnings
我继承了一个针对 iOS6+ 的 iOS 项目。几周前,我将其移至 Xcode 6 并清除了所有警告。其中一个警告是:
'UITextAttributeTextShadowColor' is deprecated: first deprecated in iOS 7.0 - Use NSShadowAttributeName with an NSShadow instance as the value
我对此的修复使用了 NSShadowAttributeName,但我没有正确使用它,导致应用程序在执行过程中的某个时刻崩溃。当我在这几周后发现时,我暂时恢复了旧代码。然而,当我恢复到旧代码时,弃用警告没有返回。我一直无法弄清楚为什么并想解决这个问题 - 警告我没有显示警告。
对于它的价值,在某些代码部分中,由于需要保持对 iOS 6 的支持,我需要消除弃用警告。在这些情况下,[=65 有单独的代码=] 6 和 iOS 7+ 设备和 iOS 6 代码被包围:
SILENCE_IOS7_DEPRECATION(
// iOS 6 code here
);
(参见 )这使用:
#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 设置并关闭大量代码的警告。
所以我很困惑为什么当我将代码恢复到原来的状态时不再显示弃用警告。
这是我试过的:
- 从我的代码中删除了对 SILENCE_DEPRECATION 宏的所有引用
- 已验证
Deprecated Functions
在 Build Settings
下用于目标
- 已验证我的
Base SDK
设置为 Latest iOS (8.1)
并且我的 iOS Deployment Target
设置为 iOS 6.0
- 为目标
Build Settings
添加 -Weverything
到 Other Warnings Flags
- 从 git 检查了我的工作区的旧版本,这是在我进行任何更改之前
- 退出并重新启动 Xcode 6
- 尝试过 Xcode 5
- 重新启动我的电脑,然后开始 Xcode
None 这些事情导致弃用警告再次出现。有什么想法我接下来应该尝试什么吗?
我知道这是一个很老的话题,但我想我会 post 一个答案,以防其他人找到这个话题。
它还取决于目标的部署目标设置(即,在 "TARGETS" 下,单击应用程序并选择顶部的 "General",在 "Deployment Info" 部分中查找"Deployment Target")。例如,如果我的部署目标为 7.1 并使用 iOS 8 中弃用的函数,我将不会收到警告。但是,如果我将部署目标设置为 8.x 或 9.0,我将收到有关这些功能的警告。
我继承了一个针对 iOS6+ 的 iOS 项目。几周前,我将其移至 Xcode 6 并清除了所有警告。其中一个警告是:
'UITextAttributeTextShadowColor' is deprecated: first deprecated in iOS 7.0 - Use NSShadowAttributeName with an NSShadow instance as the value
我对此的修复使用了 NSShadowAttributeName,但我没有正确使用它,导致应用程序在执行过程中的某个时刻崩溃。当我在这几周后发现时,我暂时恢复了旧代码。然而,当我恢复到旧代码时,弃用警告没有返回。我一直无法弄清楚为什么并想解决这个问题 - 警告我没有显示警告。
对于它的价值,在某些代码部分中,由于需要保持对 iOS 6 的支持,我需要消除弃用警告。在这些情况下,[=65 有单独的代码=] 6 和 iOS 7+ 设备和 iOS 6 代码被包围:
SILENCE_IOS7_DEPRECATION(
// iOS 6 code here
);
(参见 )这使用:
#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 设置并关闭大量代码的警告。
所以我很困惑为什么当我将代码恢复到原来的状态时不再显示弃用警告。
这是我试过的:
- 从我的代码中删除了对 SILENCE_DEPRECATION 宏的所有引用
- 已验证
Deprecated Functions
在Build Settings
下用于目标 - 已验证我的
Base SDK
设置为Latest iOS (8.1)
并且我的iOS Deployment Target
设置为iOS 6.0
- 为目标
Build Settings
添加-Weverything
到Other Warnings Flags
- 从 git 检查了我的工作区的旧版本,这是在我进行任何更改之前
- 退出并重新启动 Xcode 6
- 尝试过 Xcode 5
- 重新启动我的电脑,然后开始 Xcode
None 这些事情导致弃用警告再次出现。有什么想法我接下来应该尝试什么吗?
我知道这是一个很老的话题,但我想我会 post 一个答案,以防其他人找到这个话题。
它还取决于目标的部署目标设置(即,在 "TARGETS" 下,单击应用程序并选择顶部的 "General",在 "Deployment Info" 部分中查找"Deployment Target")。例如,如果我的部署目标为 7.1 并使用 iOS 8 中弃用的函数,我将不会收到警告。但是,如果我将部署目标设置为 8.x 或 9.0,我将收到有关这些功能的警告。