A class PLBuildVersion é implementada em ambos os frameworks

iOS 10 / Xcode 8 GM construir ficando o abaixo, nunca teve antes no Xcode 7. Alguma idéia?

objc [25161]: A class PLBuildVersion é implementada em /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/AssetsLibraryServices.framework/AssetsLibraryServices (0x12049a910) e /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/PhotoLibraryServices.framework/PhotoLibraryServices (0x1202c4210). Um dos dois será usado. Qual deles é indefinido.

(NOTA: Só parece acontecer no simulador, não aparece no dispositivo real).

    Ideia principal

    A ideia principal é simples:

    Se seu aplicativo (ou dependencies, como Pods) usa uma estrutura, que usa PhotoLibraryServices.framework explícito (ou implícito) ou AssetsLibraryServices.framework como dependência, o Xcode avisa (mesmo se você estiver usando apenas um deles). Pode ser Photos/PhotosUI.framework ou AssetsLibrary.framework ou outro (não tenho lista completa de dependencies, mas é possível).

    Qual é o problema?

    Classe com nome PLBuildVersion é definida em ambos PhotoLibraryServices.framework e AssetsLibraryServices.framework . O nome da class é exclusivo em Objective-C (você não pode definir duas classs com o mesmo nome), portanto, é indefinido qual delas será usado em tempo de execução.

    No entanto, acho que não será um problema, porque ambas as classs têm os mesmos methods e campos (verifiquei isso com o disassembler) e acho que ambos foram compilados a partir da mesma fonte.

    O radar já foi enviado.

    Conforme resposta do funcionário da Apple no Fórum de desenvolvedores da Apple :

    Você não controla nenhuma das fonts de class listadas, então não há nada que você possa ou deva fazer – além de Reportar um Bug.

    Não consegui encontrar uma maneira de me livrar do aviso, mas se você quiser evitar que o aplicativo trave, é necessário fornecer uma descrição do motivo pelo qual você está acessando a câmera, a biblioteca de fotos, etc. Isso é novo no iOS10.

    Insira o seguinte no seu arquivo Info.plist .

    foto

    Chave: Privacy - Photo Library Usage Description Valor: $(PRODUCT_NAME) photo use

    Câmera

    Chave: Privacy - Camera Usage Description Valor: $(PRODUCT_NAME) camera use

    Mais informações podem ser encontradas aqui: https://iosdevcenters.blogspot.com/2016/09/infoplist-privacy-settings-in-ios-10.html

    Eu acho que você pode obter esse erro apenas usando um UIWebView. Minha solução foi replace meu uso do UIWebView pelo WKWebView.

    Eu tive isso depois de adicionar respostas no tecido para o meu projeto.

    A exclusão de dados derivados fez o truque para mim. (comando shift alt k no XCode)

    Edite um ano depois:

    Depois de excluir os dados derivados, sempre saia do XCode e inicie-o novamente.

    Em casos não relacionados, tenho a impressão de que a exclusão de dados derivados não limpa os caches de memory dos dados derivados do XCode.

    A redefinição do simulador do iOS corrigiu isso para mim. Simulador -> Redefinir conteúdo e configurações.

    No meu caso, este aviso começou a aparecer depois de abrir um segundo projeto xcode e rodar o segundo aplicativo no simulador. Depois de voltar ao primeiro aplicativo, o aviso começou a aparecer. Acabei de sair do simulador e do Xcode e reabri o meu projeto. O aviso desapareceu depois disso. Se isso não resolver, continue com as outras respostas. O Xcode pode ser muito exigente às vezes.