我有一个简单的应用程序,它还有一个 iOS 8 Today 扩展程序(或小部件)。我正在做的一件事是在我的应用程序和我的小部件之间共享代码类,因为显然这使我不必拥有相同代码的多个副本。除了我遇到的一个问题外,一切都很好,其中一个 API UIApplication sharedApplication
出现错误,因为您不能在 iOS 8 Widgets 上使用它。
所以我想的是,有一个简单的 if 语句来检查最终目标是 native 应用程序还是 iOS 8 小部件,然后在适当的时候添加代码。那行得通吗?
这是我的代码:
if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]))
{
CGSize ssz = sz;
sz = CGSizeMake(ssz.height, ssz.width);
}
我如何更改此代码以便可以执行以下操作之一:
- 仅在 IF 最终目标是原生 iOS 应用而非小部件时运行/编译。
- 或检查该 API 在目标平台上是否可用,如果可用则使用它?
我希望我的问题是有道理的,感谢你抽出时间,Dan。
最佳答案
运行时检查已过期,因为 Xcode 不允许您编译使用 sharedApplication
的扩展代码。它必须是编译时检查。
不幸的是,这个检查不是内置的,你必须添加它。您需要执行以下操作:
- 在 today 扩展的项目设置中,在“其他 cflags”下,添加您自己的自定义编译器宏。对于名为
TODAY_EXTENSION
的宏,添加-DTODAY_EXTENSION
:
在您的代码中,使用类似的方法检查此宏
#ifndef TODAY_EXTENSION ... app-only code here ... #endif
相反,应该只存在于扩展中的代码看起来像
#ifdef TODAY_EXTENSION ... extension-only code here ... #endif
关于ios - 检测运行目标是App Extension还是iOS App,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29605094/