iOS 10 / Xcode 8 GM构建得到了以下内容,在Xcode 7之前从未有过。什么好主意吗?

objc[25161]: Class PLBuildVersion is implemented in both /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/AssetsLibraryServices.framework/AssetsLibraryServices (0x12049a910) and /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/PhotoLibraryServices.framework/PhotoLibraryServices (0x1202c4210). One of the two will be used. Which one is undefined.

(注:似乎只发生在模拟器,不会出现在真实设备)。


主要思想

主要思想很简单:

如果你的应用程序(或依赖项,如Pods)使用框架,使用显式(或隐式)PhotoLibraryServices.framework或AssetsLibraryServices.framework作为依赖项,Xcode会警告你(即使你只使用其中之一)。它可能是Photos/PhotosUI.framework或assetslilibrary .framework,或其他(我没有完整的依赖项列表,但这是可能的)。

有什么问题吗?

名称为PLBuildVersion的类在PhotoLibraryServices.framework和AssetsLibraryServices.framework中都有定义。类名在Objective-C中是唯一的(你不能定义两个同名的类),所以在运行时使用哪个类是未定义的。

然而,我认为这不会是一个问题,因为两个类都有相同的方法和字段(与反汇编器检查),我猜两者都是从同一个源编译的。

雷达已经发送了。


我无法找到消除警告的方法,但如果你想防止应用程序崩溃,你需要提供一个说明,说明你为什么要访问相机、图片库等。这是iOS10的新功能。

在您的信息中输入以下内容。plist文件。

照片

关键字:隐私-图片库使用说明 值:$(PRODUCT_NAME)照片使用

相机

关键字:Privacy - Camera Usage Description 值:$(PRODUCT_NAME)相机使用

更多信息可以在这里找到:https://iosdevcenters.blogspot.com/2016/09/infoplist-privacy-settings-in-ios-10.html


根据苹果开发者论坛上一位苹果员工的回答:

你不能控制列出的任何类源,所以除了报告Bug之外,你不能或不应该做任何事情。


我发现你可以得到这个错误仅仅通过使用UIWebView。我的解决方案是用WKWebView代替我使用的UIWebView。


在我的项目中添加了面料上的答案后,我有了这个。

删除派生数据对我来说很管用。(shift alt命令k在XCode)

一年后编辑:

在删除派生数据后,总是退出XCode并重新启动。

在不相关的情况下,我的印象是,删除派生数据并不能清除XCode中派生数据的内存缓存。


在我的例子中,这个警告在打开第二个xcode项目并在模拟器上运行第二个应用程序后开始出现。换回第一个应用程序后,警告开始出现。我刚刚退出模拟器和Xcode,重新打开我的项目。在那之后,警告消失了。如果这不能解决问题,那就继续其他答案。Xcode有时候真的很挑剔。


重置iOS模拟器为我解决了这个问题。模拟器->重置内容和设置。