【问题标题】:how to run my iphone 2.0 app in iphone os 2.0 and also 3.0 and above os如何在 iphone os 2.0 以及 3.0 及更高版本的操作系统中运行我的 iphone 2.0 应用程序
【发布时间】:2009-09-23 06:18:57
【问题描述】:

我有 iphone 操作系统版本。 2.0 我读到对于应用商店,所有应用程序都必须运行 3.0 os。所以我怎样才能让我的应用程序在两个固件中运行。有没有办法我可以检测 os ver.>3.0 然后运行不同的语句或者运行更低的语句超过 3.0 操作系统。目前我正在使用这个。

#if __IPHONE_3_0
cell.textLabel.text=cellValue;
[cell.textLabel setFont:[UIFont systemFontOfSize:15.0]];
[cell.textLabel setLineBreakMode:UILineBreakModeTailTruncation];
#else
cell.text=cellValue;    
[cell setFont:[UIFont systemFontOfSize:15.0]];
[cell setLineBreakMode:UILineBreakModeTailTruncation];  
#endif

它会在两个固件上运行

我想让我的应用程序在 >=3.0 操作系统上运行,低于这个...请帮助我

如何检查我的应用程序是否有已弃用的方法...我只能将此行视为已弃用 cell.text=cellValue;

有什么要改变的吗?我已经安装了名为 iphone_sdk_3.0__leopard__9m2736__final.dmg 的新 sdk

【问题讨论】:

    标签: iphone objective-c xcode backwards-compatibility


    【解决方案1】:

    您上面的代码不会在两组操作系统上运行。当您使用#if 语句时,您基本上排除了该特定构建的一个操作系统版本的代码。换句话说,您构建的每个版本,一个定义 __IPHONE_3_0 的版本,一个没有定义的版本,都会排除另一个版本的代码。

    您正在做的是构建两个可执行文件,一个是为 __IPHONE_3_0 构建的,另一个是为 ! __IPHONE_3_0。

    如果你想构建一个可执行文件,即一个应用程序,在两者上运行,那么你需要用运行时 ifs 替换 #if 语句,而不是编译时 #ifs,例如:

    if (theOS >= kiPhone3)
       ....
    else
       ....
    

    您还可以链接仅 3.0 的库,但在运行时测试框架的可用性,如果方法不可用则跳过调用。您需要使用不同的调用,一种用于检查方法是否可用,另一种用于检查类是否可用:

    Class newClass = (NSClassFromString(@"NewClassName"));
        if (newClass != nil)
    

    最后一件事,SDK 的版本比您提到的版本更高。

    祝你好运!

    【讨论】:

    • 我使用这个浮动版本 = [[[UIDevice currentDevice] systemVersion] floatValue]; if (version >= 3.0) { cell.textLabel.text = [self.FriendName objectAtIndex:indexPath.row];// iPhone 3.0 代码在这里 } else { cell.text = [self.FriendName objectAtIndex:indexPath.row];/ / iPhone 2.0 代码在这里} 但是在为 2.0 构建时失败了。在此行中给出错误 cell.textLabel.text = [self.FriendName objectAtIndex:indexPath.row];请求非结构或联合中的成员“textlabel”
    • 我只想在 2.0 或更高版本以及 3.0 或更高版本上运行我的应用程序......仅使用一个可执行文件
    • 不再为 2.0 构建。您需要一个可执行文件,因此您使用 Project Base SDK(和活动 SDK)中的 3.0 SDK 构建一次。
    • 它工作了..我在活动目标中设置了设备 3.0 调试..将基本 sdk 设置为 3.0 并将部署目标设置为 iphoneos 2.0..所以我在我的 2.1 iphone 上对其进行了测试..它运行了。但是我不确定如何检查它是否会在 3.0 操作系统上运行
    【解决方案2】:

    前段时间有一个similar post。查看 Apple 的 MailComposer 示例,了解支持 3.0 和 2.x 固件的应用示例

    【讨论】:

    • 我想在大于等于3.0且小于3.0的版本上运行
    • 我没有包含任何仅在 3.0 中可用的框架
    • 我只是想确保我的 2.0 应用可以在 3.0 或更高版本的操作系统上运行。
    • 那么请看 Benno 的回答。使用 2.x SDK 构建的应用程序必须在 3.0 固件上运行。但是,某些在 3.0 中被定义为已弃用的方法,将来可能不可用。不推荐使用的方法通常会生成编译器警告,因此您可以在项目中轻松找到它们。
    【解决方案3】:

    如果您针对 2.0(或 2.1、或 2.2.1 等)SDK 构建它,它将在该 SDK 和任何更高版本上运行,除非 Apple 明确停止对该 SDK 的支持。我在 App Store 中看到很多应用程序都说它们可以在 iPhone OS 2.x 或更高版本上运行,并且在运行 3.1 的 iPhone 3G 上运行良好。

    【讨论】:

      【解决方案4】:

      if-else 指令将对编译器隐藏一部分代码,因此它不会在两种软件上运行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多