Xcode 7.2支持定位OS X 10.11.2,但SDK仅标记为10.11(根据SDKSettings.plist,设置等)。由于一些关键的错误修复,我需要专门针对10.11.2作为我的最小版本,但是我得到了大量的警告,它比活动的SDK,10.11更高。一切正常,我只是不会看到200多个链接器警告,我不确定这是否会在Mac App Store上出现问题。
任何人都知道为什么Apple没有使用内部版本编号标记他们的OS X SDK,而这些内容在次要版本之间发生了变化,并且是否有一种简单的方法可以使警告静音?
答案 0 :(得分:1)
我找到了一个可接受的解决方案:在我的info.plist中使用LSMinimumSystemVersion指定10.11.2并将部署目标设置保留为10.11。这导致我的应用程序在运行时被阻止了足够友好的消息并且摆脱了所有构建警告。
我不知道它将如何在应用程序商店中播放,无论您是否能够在10.11.0或.1上安装它,但最糟糕的情况是它' sa短期问题。
感谢您的帮助。
答案 1 :(得分:0)
SDK / Deployment Target系统适用于SDK版本。 SDK版本在10.11.0和10.11.2之间没有变化。 SDK版本仅在SDK中的 API 更改时更改,而不是在这些API的基础行为更改时更改。因此,您无法使用SDK版本控制将应用程序定位到次要/错误修复版本。
当然可以在运行时检查OS X版本,并警告用户是否在非当前的10.11.x版本上运行。
答案 2 :(得分:0)
原因是sdk主要版本根本不关心功能,而是二进制兼容性(ABI看起来像什么,如果它支持弱属性,obj-c运行时是什么),以及什么支持XIB功能等。
由于Objective-C有一个非常动态的运行时,如果你需要一个类,你应该看看你是否从NSClassFromString()
得到一个...如果你需要查看一个对象是否支持一个方法,你应该测试与-(BOOL)respondsToSelector:(SEL)
...
如果你只是想不运行那么就有info.plist
个密钥......但你也不应该使用部署版本来防止代码在os上运行太旧了,首先检查info.plist值,并为启动应用程序(通常是finder或启动服务)提供一个提供正确格式错误的机会,而不仅仅是崩溃......
当然,用户可以更改该值...因此您还可以检查应用程序早期代码路径中的主要/次要版本...
答案 3 :(得分:0)
我处于与OP类似的位置。在我申请的情况下,Apple在10.11.2中引入了一个小而重要的变化。这个版本的El Cap附带了我的应用程序所依赖的更新版本的libnetsnmp,并且已将其中一个数据类型定义从uint32_t更改为u_long。
我还没有在Mac App Store中对此进行测试,但似乎我可以将项目中的OSX部署目标更改为10.11.2,但将我的目标设置的部署信息保留为默认值10.11。当我编译以这种方式配置的应用程序时,我不再收到链接器警告。
请注意 - 我还没有针对Mac App Store进行测试。