在 2.2.1 设备上运行具有 3.0 功能的 iPhone 应用程序
Posted
技术标签:
【中文标题】在 2.2.1 设备上运行具有 3.0 功能的 iPhone 应用程序【英文标题】:Running an iPhone app with a 3.0 feature on a 2.2.1 device 【发布时间】:2010-01-13 22:49:53 【问题描述】:有人要求我向应用添加 3.0 功能(媒体选择器)。
但该应用必须继续在 2.2.1 设备上运行。 (禁用该功能)
如何编译它,使其在 2.2.1 上运行,而不会出现编译器错误,以包含 3.0 功能?
按照 MailComposer 示例中的说明,我已将目标设置设置为 2.2.1,将基本 SDK 设置为 3.1.2。
我看过弱链接,但这显然只是针对链接器步骤,对编译器错误没有任何作用。
【问题讨论】:
【参考方案1】:要避免编译器错误,只需将 C 函数声明为 extern(Objective-C 函数会生成警告,但不会产生编译器错误)。正如您所发现的,链接器错误可以通过弱链接来修复。
【讨论】:
好的,但是我可以这样声明一个类型吗?就像我需要使用指向 MPMediaPickerController 的指针一样? 对于任何使用的类,都需要进行前向声明。对于MPMediaPickerController
,您可以使用@class MPMediaPickerController;
。【参考方案2】:
我通常做的是将我需要的类的定义从 3.0 SDK 复制到我关心的方法到我的项目中,然后我调用这些方法,就好像什么都没发生一样。唯一棘手的部分是实例化,为此使用:
MyCopiedClass object = [[NSClassFromString(@"MyCopiedClass") alloc] init];
【讨论】:
以上是关于在 2.2.1 设备上运行具有 3.0 功能的 iPhone 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
检查 android 设备是不是具有“绘制其他应用程序”功能
#error Unsupported architecture - cdefs.h - Swift BLE 项目在 Swift 2.3 中运行良好,但在 Swift 3.0 中仅在真实设备上出现错误