Ipad/Iphone 版本,2 个目标,1 个代码库

Posted

技术标签:

【中文标题】Ipad/Iphone 版本,2 个目标,1 个代码库【英文标题】:Ipad/Iphone versions, 2 targets, 1 code base 【发布时间】:2012-04-13 18:22:54 【问题描述】:

我目前正在开发一款适用于 ios 的 cocos2d 游戏。目前我正在运行时检查它是否是运行和调整坐标等的 ipad 或 iphone。为此。

但现在我想要两个版本,一个用于 iPad,一个用于 iPod touch/iPhone。所以我想要两个目标,但仍然使用相同的代码库。

目前我正在检查

UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad

确定是否使用了哪个设备。但现在我想检查使用了哪个应用程序/目标。如果有人在 iPad 上使用 iPhone 版本,我不希望它针对 iPad 进行调整(iPhone 版本成本较低,因此不应针对 ipad 进行调整)。

【问题讨论】:

【参考方案1】:

在使用完全相同的代码库的同时改变您在不同目标中的行为的一个好方法是创建一个预处理器定义并在其中一个目标中省略它,或者在每个目标中进行不同的设置。然后可以根据此定义以不同方式编译您的代码以改变其行为(例如,如果您使用 #ifdef 指令,则通过条件编译)。

【讨论】:

感谢您的回复!在适用的情况下,很难决定将哪个答案标记为正确的两种解决方案。不过当时上面的回答比较方便。 我现在正在制作一个新的应用程序,一个适用于 iPad 和 iPhone 的通用应用程序,有两个目标,一个完整版和一个免费版。在您的回答中,您说“在其中一个目标中省略它”。如果我在这个文件中定义一个常量(kIsFullVersion = YES),将它包含在 fullVersion 中,我不会在免费版本中得到编译错误吗?一个解决方案是拥有两个文件,但它们需要具有相同的文件名:S 您可以在代码中使用 #ifdef 块来检查符号是否已定义,这样您不仅不会收到编译错误,而且您可以更改代码中的逻辑代码根据是否定义在目标中!【参考方案2】:

如果对于 iPhone 应用程序目标,您将目标设备系列设置为仅 iPhone,UI_USER_INTERFACE_IDIOM() 将始终返回 UIUserInterfaceIdiomPhone,即使在 iPad 上也是如此。

【讨论】:

以上是关于Ipad/Iphone 版本,2 个目标,1 个代码库的主要内容,如果未能解决你的问题,请参考以下文章

screenShot代码不适用于ipad,适用于iphone

xcode不识别iphone

如何强制iPad / iPhone Safari使用旧版本的Webkit?

更改 Xcode 4.3.2 的 iPad/iPhone 模拟器分辨率 [重复]

无法使用 SignalR 在 safari ipad/iphone 上的同一 Web 应用程序中同时打开 2 个选项卡

iPad和iPhone开发的异同