Biblioteca do OS X Framework não carregada: 'Imagem não encontrada'

279

Estou tentando criar um OS X Framework básico, agora apenas criei um framework de teste: TestMacFramework.frameworke estou tentando importá-lo para um novo projeto de aplicativo OS X.

Criei o arquivo .framework e o importei para o novo projeto. A estrutura parece vincular bem e posso referenciar o arquivo de cabeçalho público que adicionei à seção de fases da construção da estrutura.

No entanto, quando tento executar o aplicativo Container, recebo o seguinte erro:

dyld: Library not loaded: /Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework
  Referenced from: /Users/samharman/Library/Developer/Xcode/DerivedData/TestMacContainer-dzabuelobzfknafuhmgooqhqrgzl/Build/Products/Debug/TestMacContainer.app/Contents/MacOS/TestMacContainer
  Reason: image not found

Depois de pesquisar um pouco, percebi que precisava adicionar uma Copy Filesseção às fases de criação do meu aplicativo de contêiner, então fiz isso e o configurei da seguinte maneira ...

insira a descrição da imagem aqui

No entanto, ainda estou recebendo o erro de tempo de execução. Obviamente, estou fazendo algo errado aqui, mas o recurso da biblioteca de desenvolvedores da Apple para essa referência ao Xcode 2, portanto, não ajuda muito!

O que eu perdi?

ATUALIZAR:

Posso ver no log de compilação que o meu TestMacFramework.frameworkestá sendo copiado para o diretório .app contents / frameworks, mas não está sendo instalado no diretório Library / Frameworks no HD

insira a descrição da imagem aqui

ATUALIZAÇÃO 2:

A construção é vinculada corretamente se eu copiar manualmente TestMacFramework.frameworkpara o Library/Frameworksdiretório

Sammio2
fonte
1
O que otool -Lvocê diz sobre onde o aplicativo espera encontrar a estrutura?
31714 trojanfoe
Ok, eu descobri como para executá-lo ... Esta é a saída eu recebo pela minha biblioteca (eu já excluiu as outras dependências, como Fundação, etc)/Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework (compatibility version 1.0.0, current version 1.0.0)
Sammio2
Minha correção foi incorporar como biblioteca a biblioteca que eu precisava (Alamofire). Isso é aceitável?
26/16
2
É muito confuso que essa pergunta esteja claramente identificada como sendo para o OS X, e todas as respostas, incluindo a aceita, sejam para o iOS. Tenho o mesmo erro e não consigo usar nenhuma das respostas.
precisa saber é o seguinte
@RenniePet Como o Xcode 7.3, o processo é o mesmo para as estruturas iOS e macOS, a resposta aceita é a maneira correta de fazê-lo. Se você ainda estiver com problemas, pode ser um problema não relacionado?
Sammio2

Respostas:

553

[Xcode 11+]

A única coisa a fazer é adicionar a estrutura à General->Frameworks, Libraries And Embedded Contentseção na Generalguia do destino do seu aplicativo.

Certifique-se de selecionar a opção 'Incorporar e assinar'.

insira a descrição da imagem aqui

[Xcode v6 -> Xcode v10]

A única coisa a fazer é adicionar a estrutura à Embedded binariesseção na Generalguia do destino do seu aplicativo.

Captura de tela do Xcode

Kappe
fonte
32
Este é o único passo necessário para o iOS.
Nikolovski
7
Obrigado! Resolvi isso para mim no iOS.
user1244109
6
Obrigado! Isso me ajudou para iOS #
Alexander Khitev 3/15/15
4
Eu uso uma classe da minha estrutura importada no Storyboard e estava tendo esse erro. Só queria acrescentar que, além de definir a CLASSE personalizada no Storyboard, você também precisa definir o campo MODULE.
Ruben Martinez Jr.
8
@ZevsVU Não tenho Embedded binariesseção no meu projeto macOS. O que há de errado?
Fnc12
56

Então eu consegui fazê-lo funcionar, é bem simples quando você tem as instruções corretas. O que eu procurava era uma estrutura 'privada' que mora no pacote de aplicativos em vez de ser gravada na pasta da biblioteca do sistema.

Construindo a estrutura

  1. Adicione um destino para criar um Cocoa Framework
  2. Dentro desses destinos, 'Configurações de compilação' configure o 'Diretório de instalação' para '@executable_path /../ Frameworks'
  3. Crie uma biblioteca e acesse o .framework no diretório archive ou produtos

Incluindo o quadro

  1. Arraste o arquivo .framework criado para o Projeto Xcode, marque 'Copiar arquivos para o diretório'
  2. No destino dos aplicativos que contêm, adicione uma nova 'Fase de criação de arquivo de cópia'
  3. Defina o 'Destino' como 'Estruturas'
  4. Arraste o quadro .framework criado
Sammio2
fonte
1
Isso também funciona para estruturas do iOS. Ao incluir a estrutura customizada na área de trabalho para compilar com ela. Você precisa adicionar a parte Incluindo o quadro desta solução para solucionar esse erro ao depurar no dispositivo!
cynistersix
1
Obrigado, trabalhou para iOS. Eu não siga seus primeiros passos como os quadros já foram construídas na minha pasta de dados derivados
Gmeister4
Impressionante! Salvou o meu dia! 2017 - Xcode 8.3.2 Obrigado!
Glenn
Por algum motivo estranho, você não pode arrastar a estrutura da seção "Vincular binário com bibliotecas" padrão para a seção "Embedded Frameworks", mas pode arrastar a estrutura da lista Projetos à esquerda. Você ainda precisará excluir manualmente a estrutura da seção "Vincular binário com bibliotecas" com o botão "-".
William Cerniuk
18

Foi bem simples para mim, acabei de adicionar minha estrutura aos meus binários incorporados sob destinos de aplicativos

Robin Delaporte
fonte
15

As opções acima, onde não é possível incluir. Eu o resolvi especificando o caminho de pesquisa do caminho de execução

Isso está na guia ' Configurações da compilação '. Na seção " Vinculação ". Altere ' Caminhos de pesquisa de caminho de execução ' em$(inherited) @executable_path/Frameworks

Vincent
fonte
Eu precisava das duas etapas, esta etapa e para adicionar uma nova 'Fase de criação de arquivo de cópia' com a estrutura anterior.
usar o seguinte comando
Eu tinha um projeto antigo do Xcode que foi atualizado gradualmente e essas configurações estavam faltando para mim. Adicionado e agora funcionando como esperado.
Julio
de todas essas soluções que funcionou, é tão irritante como a abordagem do problema é "ok, deixe-me descer a lista de todas essas postagens de stackoverflow, já que a causa raiz não é clara" APPLEEEEE
Ryan
9

Encontrei o mesmo problema, mas a solução aceita não funcionou para mim. Em vez disso, a solução foi modificar o nome de instalação da estrutura.

O erro na postagem original é:

dyld: Library not loaded: /Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework
  Referenced from: /Users/samharman/Library/Developer/Xcode/DerivedData/TestMacContainer-dzabuelobzfknafuhmgooqhqrgzl/Build/Products/Debug/TestMacContainer.app/Contents/MacOS/TestMacContainer
  Reason: image not found

Observe o primeiro caminho depois que a Biblioteca não foi carregada . A estrutura está sendo carregada de um caminho absoluto. Esse caminho vem do nome de instalação da estrutura (às vezes chamado de rpath), que pode ser examinado usando:

otool -D MyFramework.framework/MyFramework

Quando uma estrutura é incorporada a um aplicativo, esse caminho deve ser relativo e desta forma: @ rpath / MyFramework.framework / MyFramework . Se o nome de instalação da estrutura for um caminho absoluto, ele poderá não ser carregado no tempo de execução e um erro semelhante ao descrito acima será produzido.

A solução é modificar o nome da instalação:

install_name_tool -id "@rpath/MyFramework.framework/MyFramework" MyFramework.framework/MyFramework 

Com essa alteração, não recebo mais o erro

Amos Joshua
fonte
8

A exclusão de dados derivados salvou para mim

SleepsOnJornais
fonte
3
Não funcionou para mim, no entanto, quando fiz um pod install, funcionou.
Hola Soy Edu Feliz Navidad
7

Nenhum desses problemas resolveu isso para mim. O problema no final foi bem fácil. Parece que é um bug do Xcode bastante importante, que registrei o problema e corrigi sob o bug da Apple: 29820370. Se você está tendo problemas (como parece haver várias páginas de problemas semelhantes a esse), seria ótimo se você pudesse crie um bug no bug reporter: https://bugreport.apple.com/ e faça referência ao bug que criei para ganhar visibilidade. Quero transformar o Xcode de volta no prazer que era antes - e isso é algo que tenho certeza de que o Xcode deveria ter se consertado.

Aqui está a solução: 1. Abra o chaveiro - vá para Apple Worldwide Developer Cert. 2. Clique duas vezes nele 3. Altere o nível de permissão de "sempre confie" para usar os Padrões do Sistema 4. Salve e feche-o 5. Reinicie o Xcode, Limpe e construa seu projeto e ele deve ter desaparecido.

Captura de tela abaixo das configurações corretas: Acesso ao chaveiro fixo Espero que isso ajude!

UKDataGeek
fonte
2
"Usar padrões do sistema" parece ser a configuração padrão.
Raphael
Nem sempre - algo parece mudá-lo, o que resulta nesse erro
UKDataGeek
Graças a isso resolvi meu problema também! Infelizmente, não consigo ver seu ticket no rastreador de erros para dar uma visibilidade adicional a ele. Não sei por que, porém, ele não mostra nenhum erro.
Jim
7

Xcode 11:

no Xcode 11, adicione estrutura ao General->Frameworks, Libraries And Embedded Content

depois de adicionar, selecione a Embed & Signopção

insira a descrição da imagem aqui

Saifan Nadaf
fonte
2
se você fizer isso, não poderá fazer o upload do seu aplicativo na loja de aplicativos
Mahendra
@ Mahendra, qual é a alternativa que você usa nesse caso? Eu tive uma questão semelhante.
Derryl Thomas
@DerrylThomas, o aplicativo ainda está em modo de desenvolvimento, portanto, não testar neste caso
Mahendra
1
@ Mahendra, compartilhe aqui caso encontre uma alternativa para isso. Eu ficaria muito grato.
Derryl Thomas
@DerrylThomas Ao criar o arquivo morto, restaure novamente a opção Não Incorporar e crie um executável para carregar na loja de aplicativos.
BlackPearl12 26/03
6

Quando você arrasta uma estrutura personalizada para um projeto no Xcode 10.1 , ela assume que a estrutura é uma estrutura do sistema e coloca a estrutura na seção "Vincular binário com bibliotecas" da seção "Construir fases" sob o seu destino.

As estruturas do sistema já estão no dispositivo e, portanto, não são copiadas para o dispositivo e, portanto, não podem ser executadas em tempo de execução, portanto o KABOOM (falha em __abort_with_payload e erro desinformador: "Motivo: imagem não encontrada"). Isso ocorre porque o código da estrutura não é copiado para o dispositivo ...

Na realidade, para que o Xcode vincule a estrutura personalizada e garanta que ela seja copiada junto com o seu código para o dispositivo iOS (real ou simulador), a estrutura personalizada precisa ser movida para "Copiar recursos do pacote". Em última análise, empacota a estrutura, juntamente com o código executável, para estar disponível no dispositivo juntos.

Para adicionar uma estrutura personalizada a um projeto e evitar a falha da Apple:

  1. Arraste a estrutura personalizada para sua lista de arquivos de projeto do iOS
  2. Clique em Nome do Projeto no Navegador -> Nome do Destino -> "Fases de Construção" -> Triângulo de divulgação Vincular Binário com Bibliotecas
  3. Arraste a estrutura personalizada para fora e para baixo na seção "Copiar recursos do pacote" abaixo (o Xcode agora move a referência da estrutura, corrigida no Xcode 10)
  4. Executar no simulador ou dispositivo

A estrutura personalizada é copiada juntamente com o seu código para o dispositivo de destino e está disponível em tempo de execução.

insira a descrição da imagem aqui

[editorial: você pensaria que o Xcode seria inteligente o suficiente para descobrir a diferença entre uma de suas estruturas de sistema que não precisam ser copiadas para o dispositivo e uma estrutura personalizada que esteja, oh eu não sei, na hierarquia de diretórios raiz do projeto ... 🙄]

William Cerniuk
fonte
5

Deve haver um 'Executar Script' em 'Fases de Construção' com este: '/ usr / local / bin / carthage copy-frameworks'

Nos 'Arquivos de entrada' desse 'Executar script', você deve adicionar o caminho às suas bibliotecas. Como isso:

Script de execução de fases de construção

thacilima
fonte
4

Se você acidentalmente redefinir seu chaveiro, isso poderá ocorrer devido à falta de certificados da Apple no chaveiro. Eu segui isso para resolver o meu problema.

Eu tive o mesmo problema e consegui corrigir o download novamente do WWDR (Autoridade Certificadora de Relações com Desenvolvedores da Apple). Faça o download aqui: http://developer.apple.com/certificationauthority/AppleWWDRCA.cer

user1742302
fonte
Isso resolveu meu problema também. Lembre-se de limpar a pasta de compilação antes de recompilar.
Justin Milo
4

Se você estiver usando o Xcode 11 , verifique se você adicionou a estrutura em Frameworks, Libraries e Incorpored Content em Target settings - General. Alterar o status de incorporação de - 'Não incorporar' para 'Incorporar e assinar'

Sachin Nautiyal
fonte
Mas isso gerará um erro de Suporte Swift inválido do ITMS-90206 quando você distribuir para a App Store. Funciona apenas em desenvolvimento.
Raptor
2

O que resolveu para mim foi mudando abstract_targetpara targetpara o alvo principal na minha Podfile. Eu o havia definido anteriormente abstract_targete isso causou o erro descrito. Agora isso trabalha como charme

Francesco DM
fonte
1

Para o Xcode 8, alguns produtos obsoletos serão removidos da pasta de dados derivados, consulte esta solução .

Apple: no macOS 10.12 e posterior, o Xcode limpa dados derivados antigos, cabeçalhos pré-compilados e caches de módulos. (23282174)

O sistema de construção do Xcode suporta a remoção de arquivos antigos de alguns tipos de artefatos de construção que foram produzidos em uma construção anterior, mas que foram removidos do projeto.

Com base no pensamento do autor, encontrei esse log de compilação no meu caso.

Remove stale build products

/bin/rm -rf /Users/usename/Library/Developer/Xcode/DerivedData/myapp-esvvhwwwwngijeemhatmklwzoxnb/Build/Products/Debug-iphonesimulator/myapp.app/Frameworks/AliyunVodPlayerSDK.framework
/bin/rmdir /Users/usename/Library/Developer/Xcode/DerivedData/myapp-esvvhwwwwngijeemhatmklwzoxnb/Build/Products/Debug-iphonesimulator/myapp.app/Frameworks

Após criar uma nova fase do arquivo de cópia e copiar a estrutura obsoleta de destino para o destino do Frameworks , o log de remoção acima desaparece após a reconstrução.

Apenas esclareça minha situação e razão, espero que seja útil para alguém.

Itachi
fonte
1

Para mim, essa foi a solução, depois de muitas horas de pesquisa !!

Por alguma razão, no desenvolvimento de uma estrutura personalizada do Swift 2.3, o Xcode 8 havia removido a DYLIB_INSTALL_NAME_BASEconfiguração do project.pbxprojarquivo. Uma pequena caminhada no Build Settings / Dynamic Library Install Name Basecenário de volta para @rpathconsertá-lo.

(em https://forums.developer.apple.com/thread/4687 )

encapsula
fonte
0

Eu descobri que esse problema estava relacionado apenas à assinatura do código e aos certificados, e não ao próprio código. Para verificar isso, crie o aplicativo básico de exibição única e tente executá-lo sem nenhuma alteração no seu dispositivo. Se você vir o mesmo tipo de erro, isso mostra que seu código está correto. Como eu, você descobrirá que seus certificados são inválidos. Baixe tudo de novo e corrija os vencidos. Então, quando o aplicativo básico não reportar o erro, tente o aplicativo novamente depois de sair do Xcode e talvez reiniciar o seu Mac por uma boa medida. Que finalmente acabou com esse pesadelo. Provavelmente, isso não tem nada a ver com o seu código, especialmente se você receber a mensagem Build Successful ao tentar executá-lo. Para sua informação

iOS4Fun
fonte
0

O problema ocorreu ao testar o Xcode 9 beta e voltar ao Xcode 8. Uma simples limpeza no destino resolveu o problema.

Xavier
fonte
0

Eu tive o mesmo problema por um motivo diferente. Eu criei uma nova configuração para Depurar e Liberar (em PROJETO -> guia Informações -> Configuração). E tive que alterar meu script de shell de estruturas de pod (Pods- "appName" -frameworks.sh, em Arquivos de suporte de destinos) para fazê-lo funcionar.

[Xcode 9]

Yuval
fonte
0

A única coisa que funcionou para mim:

Alvo> Fases de construção> [CP] Embutir estruturas de pods Desmarque "Mostrar variáveis ​​de ambiente no log de construção" e "Executar script apenas ao instalar"

Neil
fonte
0

Tentei várias correções, mas o que funcionou para mim foi excluir um destino ausente listado na guia de compilação do esquema de compilação. Você pode acessá-lo abrindo a janela de edição do esquema atual.

Edit: Meu destino de teste de interface do usuário não estava funcionando tão bem, e a solução que encontrei foi excluí-lo e gerá-lo novamente.

Gonzalo
fonte
0

abra xcode -> geral -> Binários incorporados -> adicione QBImagepicker.framework e RSKImageCropper -> projeto limpo

basta adicionar QBImagePicker.framework e RSKImageCropper.framework nos binários incorporados que funcionaram para mim

Agustiar
fonte
0

Eu acho que não há uma maneira fixa de resolver esse problema, pois pode ser causado por uma razão diferente. Eu também tive esse problema na semana passada, não sei quando e exatamente o que causa esse problema, somente quando o executo no simulador com o Xcode ou tento instalá-lo no telefone, ele relata esse tipo de erro, mas quando eu executá-lo com react-nativo run-ios com terminal, não há problema.

Eu verifiquei todas as formas postadas na internet, como renovar certificado, alterar configurações no Xcode (todas as formas mencionadas acima), na verdade todas as configurações no Xcode já foram definidas conforme solicitado antes, nenhuma das formas funciona para mim. Até esta manhã, quando eu excluo os pods e reinstalei, o erro finalmente desapareceu após uma semana. Se você também estiver usando cocoapod e o erro aparecer apenas sem motivo específico, talvez você possa tentar o meu caminho.

  1. Verifique minha versão dos cocoapods.
  2. Atualize-o se houver nova versão disponível.
  3. Vá para a pasta do projeto, exclua seu arquivo Podfile.lock, Pods, projeto xcworkspace.
  4. Executar instalação do pod
Jack
fonte
0

Eu só tive esse problema ao executar no dispositivo real (iPhone SE). No projeto do simulador, funcionou como esperado.

Eu tentei todas as correções deste tópico e daqui . Nenhum deles funcionou para mim.

Para mim, o problema foi resolvido depois de reiniciar o iPhone (sic!).

Eu fiz:

  • pasta de compilação limpa,
  • limpar dados derivados,
  • excluir aplicativo do dispositivo,
  • reiniciar o dispositivo

E finalmente funciona. :)

Se todas as outras soluções falharem, não se esqueça de experimentá-lo.

vandermesis
fonte
0

Xcode 11: Criar fases -> Incorporar estruturas

insira a descrição da imagem aqui

Ofir Malachi
fonte