gpt4 book ai didi

objective-c - 在存在新 API 时构建向后兼容的 OS X 应用程序?

转载 作者:太空狗 更新时间:2023-10-30 03:32:38 24 4
gpt4 key购买 nike

我正在尝试升级应用程序 ( Clarke ) 以提供 10.6 兼容性。

我的计划是根据使用的 OSX 版本使用两个不同的代码路径。

在 10.5 上,它将使用一个 Controller ,该 Controller 由完全自定义的代码组成,不依赖于任何特定的 Cocoa API。在 10.6 上,它将使用另一个 Controller ,它基于相同的抽象类将新的 CoreLocation API 包装在相同的接口(interface)中。在运行时,应用程序将通过检测操作系统版本在 Controller 之间切换。

这在为 10.6 SDK 构建的 10.6 上工作正常,但同样的构建在 10.5 上爆炸了:

10/09/2009 18:30:50 [0x0-0x12f12f].uk.co.tomtaylor.Clarke[4575] dyld: unknown required load command 0x80000022 
10/09/2009 18:30:51 com.apple.launchd[403] ([0x0-0x12f12f].uk.co.tomtaylor.Clarke[4575]) Exited abnormally: Trace/BPT trap

如果我为 10.5 SDK 构建它显然无法编译 CoreLocation 的东西。

我希望能够为这个应用程序提供一个二进制文件。有没有办法从 10.5 中“隐藏”CoreLocation API?

最佳答案

只有当您在两个平台上使用相同的框架但在较新的平台上有新调用时,Deployment SDK 技巧才有效。对于 CoreLocation,10.5 上缺少整个框架,因此您的应用将无法加载,因为它无法动态绑定(bind)到框架。

您需要执行上述操作,并添加 CoreLocation 作为弱框架。选择您的 Link Frameworks 和 Binaries 构建阶段,在 Detail View 中找到 CoreLocation,然后在中间列中将“Required”更改为“Weak”。

当您构建应用时,Xcode 会将 -weak_framework CoreLocation 传递给链接器,无论 CoreLocation 是否存在,您的应用都将在所有 10.5 和 10.6 系统上加载。不过,除非您实际在 10.6 上运行,否则请确保不调用任何 CoreLocation 方法。

关于objective-c - 在存在新 API 时构建向后兼容的 OS X 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1406645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com