检测运行目标是应用程序扩展还是iOS应用程序
我有一个简单的应用程序,它也有一个iOS 8 Today扩展(或widget)。我正在做的一件事是在我的应用程序和我的小部件之间共享代码类,因为很明显,这使我不必拥有同一代码的多个副本。除了我遇到的一个问题之外,所有这些都运行得很好,其中一个API检测运行目标是应用程序扩展还是iOS应用程序,ios,objective-c,target,ios-app-extension,ios8-today-widget,Ios,Objective C,Target,Ios App Extension,Ios8 Today Widget,我有一个简单的应用程序,它也有一个iOS 8 Today扩展(或widget)。我正在做的一件事是在我的应用程序和我的小部件之间共享代码类,因为很明显,这使我不必拥有同一代码的多个副本。除了我遇到的一个问题之外,所有这些都运行得很好,其中一个APIUIApplication sharedApplication出现了一个错误,因为您无法在iOS 8小部件上使用它 所以我想的是,有一个简单的if语句,它检查最终目标是本机应用程序还是iOS 8小部件,然后根据需要添加代码。这样行吗 这是我的密码: i
UIApplication sharedApplication
出现了一个错误,因为您无法在iOS 8小部件上使用它
所以我想的是,有一个简单的if语句,它检查最终目标是本机应用程序还是iOS 8小部件,然后根据需要添加代码。这样行吗
这是我的密码:
if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]))
{
CGSize ssz = sz;
sz = CGSizeMake(ssz.height, ssz.width);
}
如何更改此代码,以便可以执行以下操作之一:
我希望我的问题有意义,谢谢你的时间,Dan。运行时检查被取消,因为Xcode不允许你编译使用
sharedApplication
的扩展代码。它必须是编译时检查
不幸的是,此检查不是内置的,您必须添加它。您需要执行以下操作:
TODAY\u EXTENSION
的宏,添加-DTODAY\u EXTENSION
:#ifndef TODAY_EXTENSION
... app-only code here ...
#endif
相反,应该只存在于扩展中的代码
#ifdef TODAY_EXTENSION
... extension-only code here ...
#endif
汤姆的答案是正确的。另一种方法是在prefix.pch文件中为扩展目标定义宏,假设每个目标使用单独的前缀文件
#define TODAY_EXTENSION YES
我个人更喜欢这种方法,因为你可以在使用宏的任何地方命令单击宏,以查看宏的定义。,这样你就可以在
#ifndef
语句中添加else
语句。你还知道苹果为什么禁止iOS 8扩展中的sharedApplication吗?如果需要,你可以使用#else
。你得到了全部,这可以做很多。至于sharedApplication
,这是因为扩展作为插件运行到一个单独的进程,该进程可以在不同的时间运行不同的扩展,所以sharedExtension
无论如何都不会工作相同。肯定有运行时检查吗?我需要在应用程序和扩展程序都使用的扩展中使用此代码。@supertecnoboff只是出于兴趣,你怎么看?