Aplicativo para iOS com estrutura travada no dispositivo, dyld: biblioteca não carregada, Xcode 6 Beta

573

Esta falha foi um problema de bloqueio. Usei as seguintes etapas para reproduzir o problema:

  • Criar um projeto do Cocoa Touch Framework
  • Adicione um arquivo rápido e uma classe Dog
  • Construa uma estrutura para o dispositivo
  • Crie um aplicativo Single View no Swift
  • Importar estrutura para o projeto do aplicativo
  • Instanciar classe rápida a partir da estrutura no ViewController
  • Crie e execute um aplicativo no dispositivo

O aplicativo caiu imediatamente após o lançamento, eis o log do console:

dyld: Library not loaded: @rpath/FrameworkTest03.framework/FrameworkTest03
  Referenced from: /var/mobile/Applications/FA6BAAC8-1AAD-49B4-8326-F30F66458CB6/FrameworkTest03App.app/FrameworkTest03App
  Reason: image not found

Eu tentei construir em dispositivos iOS 7.1 e 8.0, ambos têm a mesma falha. No entanto, posso criar um aplicativo e executar o simulador com precisão. Além disso, estou ciente de que posso alterar a estrutura para formar Obrigatório para Opcional no Link Binário Com Bibliotecas , mas não resolveu completamente o problema, o aplicativo travou ao criar uma instância do Dog . O comportamento é diferente no dispositivo e no simulador. Suspeito que não possamos distribuir uma estrutura para o dispositivo usando uma versão beta do Xcode. Alguém pode esclarecer isto?

vladof81
fonte
1
O que não entendo é por que todas as outras estruturas de terceiros funcionam imediatamente e podem ser facilmente arrastadas e soltas Link Binary with Librariese, de alguma forma, o Xcode sabe copiá-las no pacote de aplicativos, enquanto que para estruturas personalizadas isso simplesmente não acontece.
Fatuhoku 17/02/16
resposta Sazzad hissain de Khan aqui stackoverflow.com/questions/26024100/... é a melhor resposta ..
Ankit Kumar
1
Confira este stackoverflow.com/a/52129141/2020034 . Funciona
Vinayak Parmar
você pode fazer uma biblioteca de gordura, você pode ver neste link: stackoverflow.com/a/54977145/3992606
mohsen
A versão do Xcode não corresponde , resolvida com stackoverflow.com/a/55738882/5443510 .
Jimmy Yin

Respostas:

975

Na guia Geral do destino , há um campo Binários incorporados . Quando você adiciona a estrutura, a falha é resolvida.

A referência está aqui nos Fóruns de desenvolvedores da Apple.

vladof81
fonte
73
Eu tenho a estrutura nos binários incorporados e a fase de cópia também definida como "Estruturas". Falha de qualquer maneira.
loretoparisi
11
Isso foi resolvido apenas no modo de depuração. Erro voltará a ocorrer quando você arquivar ou construir um projeto
Saad Ur Rehman
13
Adicionar @ executable_path / Frameworks ao 'Runpath Search Path' resolveu esse problema, ou seja, além de adicionar a estrutura aos 'Binários incorporados'
ArdenDev
14
Qualquer um pode ajudar como adicionar estrutura nos binários incorporados, a partir dos PODs?
Bonnke
3
Idem. Eu também gostaria de saber como adicionar a partir de PODs, já que não há "Geral> Binários Incorporados" no XCode 6.4 usando PODS
ded
259

Para iOS maior ou igual a 8

Na guia Geral do destino, na seção Binários incorporados, adicione a estrutura. Isso copiará a estrutura na compilada para que ela possa ser vinculada ao tempo de execução.

insira a descrição da imagem aqui

Por que isso está acontecendo? : porque a estrutura à qual você está vinculando é compilada como uma estrutura vinculada dinamicamente e, portanto, está vinculada ao tempo de execução.

** Nota: ** A incorporação de estruturas personalizadas é suportada apenas no iOS> 8 e, portanto, segue uma solução alternativa que funciona em versões mais antigas do iOS.

Para iOS com menos de 8

Se você influenciar essa estrutura (tenha acesso ao código-fonte / processo de construção), poderá alterar essa estrutura para ser vinculada estaticamente, em vez de dinâmica. Isso fará com que o código seja incluído no aplicativo compilado em vez de vinculado ao tempo de execução e, portanto, a estrutura não precisará ser incorporada.

** Como: ** Na guia Build Setting da estrutura, na seção Linking, altere o Mach-O Type para Static Library. Agora você não precisa incluir a estrutura em binários incorporados.

Quadro estático

Incluindo ativos: para incluir itens como imagens, áudio ou arquivos xib / nib, recomendo a criação de um pacote (essencialmente um diretório, mais informações aqui bit.ly/ios_bundle) e carregue os recursos do pacote usando o NSBundle.

Dawson
fonte
1
Como posso adicionar estrutura aos binários incorporados, se a estrutura estiver nos Pods?
TomazStoiljkovic
O que você quer dizer com "framework is in Pods"? Que sua estrutura personalizada é distribuída via CocoaPods?
Dawson
2
Isso deve ser "maior que ou igual a 8". Eu tive que fazer isso no iOS 8 também.
Cruinh 14/08/2015
erroSwift is not supported for static libraries
jose920405 11/11
@TomazStoiljkovic você descobriu isso? Eu tenho o mesmo problema, tenho uma estrutura que quero construir como binária, mas depende de outras estruturas por meio de cápsulas de cacau.
MegaManX
125

Apenas arrastar a estrutura para o seu projeto não será bom o suficiente. É como estar no mesmo estádio, mas não conseguir encontrar seus filhos. Siga esses passos:

1) Crie sua estrutura

  • Desenvolva sua estrutura.
  • Depois que seu desenvolvimento estiver concluído, COMMAND+ Bconstrua sua estrutura e garanta que você receba "Build Succeeded".

insira a descrição da imagem aqui

2) Acesse sua estrutura

  • Depois que seu projeto de estrutura for compilado com sucesso, ele estará pronto para você acessar na sua Productspasta no seu projeto.

insira a descrição da imagem aqui

  • Clique com o botão direito no seu .frameworke selecione "Mostrar no Finder".

insira a descrição da imagem aqui

3) Coloque a estrutura em seu projeto

  • Arraste e solte a .frameworkpartir da janela do Finder para a pasta "Framework" do seu projeto de aplicativo.

insira a descrição da imagem aqui

4) Configure o projeto do aplicativo para a estrutura

  • Selecione o nível superior no seu projeto

insira a descrição da imagem aqui

  • Escolha seu alvo

insira a descrição da imagem aqui

  • Vá para "Construir fases", depois "Vincular binário a bibliotecas" e verifique se sua estrutura está incluída com o opcional selecionado .

insira a descrição da imagem aqui

  • Ainda em "Build Fhases", vá para o canto superior esquerdo e selecione o +botão. No menu suspenso, escolha "Nova fase de arquivos de cópia".

insira a descrição da imagem aqui

  • Role para baixo até a nova seção "Copiar arquivos" e verifique se você definiu Destinationcomo "Estruturas". Deixe o subcaminho vazio. Em seguida, clique no +botão no canto inferior esquerdo.

insira a descrição da imagem aqui

  • Você será apresentado à sua hierarquia de projetos. Role para baixo até a pasta "Frameworks" à qual você adicionou a estrutura na etapa 3 ou procure-a na barra de pesquisa na parte superior. Selecione sua estrutura e clique em "Adicionar".

insira a descrição da imagem aqui

  • Assegure-se de que sua estrutura esteja incluída com "Código Sign On Copy" selecionado.

insira a descrição da imagem aqui

5) Limpe e execute seu projeto

  • COMMAND+ SHIFT+K
  • COMMAND+R
Brandon A
fonte
5
Bom ponto. Quase funciona para mim. Fiz uma estrutura A, que inclui Alamofire. Meu aplicativo host (estrutura incorporada A) funciona em simuladores. Mas quando tento executá-lo em um iPhone real, ele trava com erro: Alamofire: dyld: Biblioteca não carregada: @ rpath / Alamofire.framework / Alamofire Motivo: nenhuma imagem adequada foi encontrada. Achou: xxx / ddcdemo.app / Frameworks / iddc.framework / Frameworks / Alamofire.framework / Alamofire: mach-o, mas a arquitetura errada
Dachun
1
@Brandon Tornar opcional a estrutura resolveu meu problema. Mas você pode me explicar qual é o comportamento de tornar o framework opcional?
Mitesh Dobareeya
2
Obrigado! Na sua etapa 5, verifiquei "Copiar apenas ao instalar" e esse foi o meu problema.
Andi
48

Criei uma estrutura usando o Swift3 / Xcode 8.1 e a estava consumindo em um projeto do Objective-C / Xcode 8.1. Para corrigir esse problema, tive que ativar a Always Embed Swift Standard Librariesopção em Build Options.

Dê uma olhada nesta captura de tela:

insira a descrição da imagem aqui

NeverHopeless
fonte
3
Isso funcionou agora para mim em at. A solução para esse problema é ir para BuildPhases -> Copy Files -> selecione Framework em Destination e adicione sua estrutura. Provavelmente, sua biblioteca está faltando aqui.
Harish
@ Harish, A solução que você está sugerindo já é sugerida por vários e, definitivamente, eu cuido disso no primeiro ponto. No meu caso, a estrutura foi adicionada lá, mas ainda assim o mesmo problema apareceu. Então eu cavo sozinho. Se você para baixo votado esta solução não sei por que você está bastante certo sobre o seu caminho quando não funcionou no meu caso: S
NeverHopeless
@Harish Obrigado. Sua resposta me ajudou muito mais e é claro da NeverHopeless também fez :) Graças a vocês
Mohsin Khubaib Ahmed
Essa foi a única coisa que funcionou para mim .. mas eu já estou "incorporando" a estrutura na Embedded Binariesseção do meu alvo . Então, por que isso faz funcionar?
guptron
Impressionante, isso funciona porque se você estiver usando uma biblioteca rápida ou um pod para incorporar no projeto C objetivo. O projeto do objetivo C muitas vezes tem essa bandeira como Não.
Swaroop S
47

Em primeiro lugar, tente criar após Command + Option + Shift + K. Se ainda falhar, siga as etapas abaixo.

Se alguém estiver enfrentando esse erro no Xcode 8, altere o status da estrutura para Opcional em vez de Necessário na guia Geral do seu destino.

insira a descrição da imagem aqui

Rosa do Deserto
fonte
3
Isso fará com que runtime não reconhecer as classes do quadro
tesla
@azimov está correto. Estou enfrentando esse dilema no momento. Necessário faz com que a "imagem não encontrada" erro e se tentamos defini-lo como opcional que irá falhar em tempo de execução com o "selector não reconhecido"
Adam Mendoza
1
Mesmo que minha estrutura já estivesse nos Binários de Link e Incorporar, ainda era necessário adicionar uma Fase de Cópia. dyld: Biblioteca não carregada: @ rpath / AFNetworking.framework / AFNetworking Referenciado por: / Usuários / {Usuário} / Biblioteca / Desenvolvedor / CoreSimulator / Devices / 6833A85C-5783-45FA-A4D5-991D286B28C2 / data / Containers / Bundle / Application / B1A0A3B2-92A2-41B0-9884-6DB6995A0D7E / MyApp.app / MyApp Motivo: imagem não encontrada (lldb) Solução: Projeto -> Destino -> Fases de construção -> + na parte superior para adicionar nova fase de Copiar arquivos Destino = Estruturas Selecione a estrutura que precisa ser copiado #
Adam Mendoza
@AdamMendoza Meu aplicativo foi rejeitado por causa disso.
Jbouaziz 22/09/16
@jbouaziz, sim, um erro que você pode encontrar se deve ao fato de o framework ser gordo, o que significa que ele possui arquiteturas que não são suportadas no iOS, como o i386 x86_64, além do necessário armv7 arm64. A loja apresentará um erro, mas você pode não ver o erro no Xcode. Use o carregador em Xcode -> Open Developer Tool -> Application Loader. SolutionL torná-lo fino ver -> ikennd.ac/blog/2015/02/…
Adam Mendoza
28

Eu tenho o mesmo tipo de problema na versão iOS 9.x

PROBLEMA IS: o aplicativo falha assim que eu abro o aplicativo com o erro abaixo.

dyld: Biblioteca não carregada: /System/Library/Frameworks/UserNotifications.framework/UserNotifications Referenciado em: /var/containers/Bundle/Application/######/TestApp.app/TestApp Razão: imagem não encontrada

Resolvi esse problema alterando Requiredpara Optionaldentro Linked Frameworks and Librariesda UserNotifications.frameworkestrutura.

jfalexvijay
fonte
Isso funciona. Alguém sabe o porquê? Porque alguns dispositivos precisam dessa configuração, outros não.
NEO
Recebo "aviso: não foi possível executar o código de suporte para ler os dados da classe Objective-C no processo. Isso pode reduzir a qualidade das informações de tipo disponíveis". quando marcar minha lib como opcional
BergP:
tem funcionado talvez a razão é alguma estrutura não correr no simulador é por isso
Gowtham Sooryaraj
@ redent84 Esta resposta, juntamente com o seu comentário, me salvou de ficar louco. Corri para este problema com AuthenticationServices.framework, o que requer iOS 12.
Tamás Sengel
26

Eu precisava (além do mencionado aqui) adicionar a seguinte linha aos Runpath Search Paths na guia Build Settings :
@executable_path/Frameworks

insira a descrição da imagem aqui

Aviel Gross
fonte
Isso corrigiu o problema para mim. Comecei a ter o problema depois de adicionar uma extensão de aplicativo ao meu aplicativo iOS 9. Antes de adicionar a extensão, minha estrutura foi encontrada perfeitamente. Adicionar uma fase de construção de Copiar Arquivos não ajudou, e eu já estava incorporando a estrutura.
Greg
É tão estranho que isso não esteja incluído por padrão. Se você descompactar e examinar seu IPA, deverá encontrar suas estruturas em Payloads / appname.app / Frameworks /. No entanto, a adição desse caminho de pesquisa deve estar presente para que o aplicativo procure nessa pasta durante o tempo de execução. Esquisito.
precisa saber é o seguinte
25

Você precisa adicionar a estrutura a uma nova fase de criação de arquivos de cópia para garantir que a estrutura seja copiada no pacote de aplicativos em tempo de execução.

Consulte Como adicionar uma 'Fase de criação de arquivos de cópia' ao meu Target para obter mais informações.

Documentos oficiais da Apple: https://developer.apple.com/library/mac/recipes/xcode_help-project_editor/Articles/CreatingaCopyFilesBuildPhase.html

liamnichols
fonte
Depois de tentar tantas coisas, foi isso que resolveu para mim. Eu já tinha o framework no Link Binary e no Embed Framework. Não achei que fosse necessário adicionar uma fase de cópia, mas isso foi corrigido.
Adam Mendoza
14

Se você estiver usando o Xcode 11 ou mais recente :

  1. Navegue até as configurações do seu destino e selecione Geral .

Configurações de destino / Geral

  1. Role para baixo até Estruturas, bibliotecas e conteúdo incorporado .

  2. Verifique se o valor Incorporar e assinar ou Incorporar sem assinatura está selecionado para a opção Incorporar, se necessário.

Seção Estruturas, Bibliotecas e Conteúdo Incorporado

Tamás Sengel
fonte
13

Adicionar a estrutura nos binários incorporados insira a descrição da imagem aqui

Em seguida, limpe e construa.

Vineesh TP
fonte
11

Surpreendentemente, nem todas as peças necessárias estão documentadas aqui, pelo menos para o Xcode 8.

Meu caso foi uma estrutura personalizada como parte do mesmo espaço de trabalho. Acontece que ele estava sendo construído incorretamente. Com base na última resposta de jeremyhu a este tópico:

https://forums.developer.apple.com/thread/4687

Eu tive que definir Dynamic Library Install Name Base( DYLIB_INSTALL_NAME_BASE) sob Build Settingso projeto de estrutura e depois reconstruí-lo. Foi definido incorretamente como $(LOCAL_LIBRARY_DIR)e tive que alterá-lo para @rpath.

Portanto, no estágio de processamento do link no App Project, ele estava instruindo o aplicativo host a carregar dinamicamente a estrutura no tempo de execução /Library/Frameworks/fw.Framework/fw(a partir da raiz do sistema de arquivos de tempo de execução) em vez do caminho para o aplicativo/Frameworks/fw.Framework/fw

Em relação a todas as outras definições: ela não tem que ser em 3 lugares Build Phases, mas estes são tudo pronto ao mesmo tempo em que você simplesmente adicioná-lo à Embedded Binariesconfiguração do Generalguia da App hospedagem.

Eu fiz não tem que configurar um extra de Copy Filesfase, que parece intuitivamente redundante em relação ao estágio de incorporação de qualquer maneira. Ao verificar o final da transcrição da compilação, podemos garantir que isso não é necessário.

PBXCp /Users/xyz/Library/Developer/Xcode/DerivedData/MyApp-cbcnqafhywqkjufwsvbzckecmjjs/Build/Products/Debug-iphoneos/MyFramework.framework

[Muitas linhas detalhadas foram removidas, mas fica claro na transcrição simplificada na interface do usuário do Xcode.]

Ainda não tenho idéia do porquê o Xcode definir o DYLIB_INSTALL_NAME_BASEvalor incorretamente para mim.

BaseZen
fonte
1
Obrigado, esse foi o meu problema no Xcode 11. Eu estava importando uma de minhas próprias estruturas, que funcionava anteriormente, mas comecei a emitir o erro "dyld: Library not loaded". Para ficar claro, você deseja definir a configuração de compilação "Base de Nomes de Instalação da Biblioteca Dinâmica" como "@rpath" no projeto da estrutura que você está tentando importar, não no projeto para o qual está importando. De alguma forma, foi definido como "/ Library / Frameworks".
Ben Stahl
Fico feliz que isso foi útil 3 anos depois. Editado de acordo.
BaseZen 5/12/19
9

No meu caso, a solução foi remover a estrutura compilada dos binários incorporados, que era um projeto independente no espaço de trabalho, limpá-lo e reconstruí-lo e, finalmente, adicioná-lo novamente aos binários incorporados.

Andrea Leganza
fonte
8

Meu ambiente: Cocos2d 2.0, Box2d, Objective C

Além de responder às outras respostas acima, finalmente fui para a guia Geral e tornei o WatchKit opcional.

Segmentar estruturas vinculadas gerais e bibliotecas Watchkit.framework Opcional

Jim Rota
fonte
8

Se você estiver usando uma estrutura de terceiros e usando Cocoapods como seu gerenciador de dependências, tente fazer um pod installpara atualizar seus pods.

Esta falha ocorreu em uma biblioteca de terceiros que eu estava usando, tão feliz que a solução acima funcionou para mim, espero que funcione para você!

Engenheiro de tecnologia de Nova York
fonte
1
Ótimo! corrigiu meu problema. Mas existe uma maneira de evitar a instalação de dependências de pod no meu aplicativo host?
DàChún 9/09/17
8

insira a descrição da imagem aqui

Resolvido para mim desmarcando "Copiar apenas quando instalado" em Fases de construção-> Incorporar estruturas

Shohin
fonte
1
Seria bom saber o ponto dessa caixa de seleção se o sistema não acredita que "instalação de depuração" não seja "instalação". Independentemente disso, se causar um acidente do aplicativo no hardware em vez de proibir o funcionamento do aplicativo com um aviso, é um puro outro defeito Xcode
William Cerniuk
8

É um erro de tempo de execução causado por Dynamic Linker

dyld: Library not loaded: @rpath/...
...
Reason: image not found

O erro Library not loadedcom @rpathindica que Dynamic Linkernão é possível encontrar o binário.

  1. Verifique se a estrutura dinâmica foi adicionada ao General -> Embedded Binaries

  2. Verifique a @rpathconfiguração entre consumidor (aplicativo) e produtor (estrutura dinâmica):

    • Estrutura dinâmica:
      • Build Settings -> Dynamic Library Install Name
    • Inscrição:
      • Build Settings -> Runpath Search Paths
      • Build Phases -> Embed Frameworks -> Destination, Subpath

Vinculador dinâmico

Dynamic Library Install Name(LD_DYLIB_INSTALL_NAME)que é usado por loadable bundle( Dynamic frameworkcomo derivado) onde dyldentra em jogo
Dynamic Library Install Name- caminho para o arquivo binário (não .framework). Sim, eles têm o mesmo nome, mas MyFramework.frameworké um packaged bundlecom MyFrameworkarquivo binário e os recursos dentro.
Este caminho de directório pode ser absoluta ou relativa (por exemplo @executable_path, @loader_path, @rpath). O caminho relativo é mais preferível porque é alterado juntamente com uma âncora que é útil quando você distribui seu pacote configurável como um único diretório

caminho absoluto - exemplo Framework1

//Framework1 Dynamic Library Install Name
/some_path/Framework1.framework/subfolder1

@executable_path

@executable_path - relativo à entrada binária - exemplo de caso de uso do Framework2
: incorporar a Dynamic frameworkem um aplicativo

//Application bundle(`.app` package) absolute path
/some_path/Application.аpp

//Application binary absolute path 
/some_path/Application.аpp/subfolder1

//Framework2 binary absolute path
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1

//Framework2 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1

//Framework2 Dynamic Library Install Name 
@executable_path/../Frameworks/Framework2.framework/subfolder1

//Framework2 binary resolved absolute path by dyld
/some_path/Application.аpp/subfolder1/../Frameworks/Framework2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1

@loader_path

@loader_path - relativo ao pacote configurável que é proprietário deste
caso de uso binário : framework com framework incorporado - Framework3_1 com Framework3_2 dentro

//Framework3_1 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1

//Framework3_2 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/Frameworks/Framework3_2.framework/subfolder1

//Framework3_1 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1

//Framework3_1 @loader_path == Framework3_1 @executable_path
/some_path/Application.аpp/subfolder1

//Framework3_2 @executable_path == Application binary absolute path
/some_path/Application.аpp/subfolder1

//Framework3_2 @loader_path == Framework3_1 binary absolute path
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1

//Framework3_2 Dynamic Library Install Name 
@loader_path/../Frameworks/Framework3_2.framework/subfolder1

//Framework3_2 binary resolved absolute path by dyld
/some_path/Application.аpp/Frameworks/Framework3_1.framework/subfolder1/../Frameworks/Framework3_2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework3_1.framework/Frameworks/Framework3_2.framework/subfolder1

@rpath - Caminho de pesquisa do caminho da execução

Exemplo de Framework2

Anteriormente, tínhamos que configurar um Framework para trabalhar com dyld. Não é conveniente porque o mesmo Framework não pode ser usado com configurações diferentes

@rpath é um conceito composto que se baseia em partes externas (Aplicativo) e aninhadas (Estrutura dinâmica):

  • Inscrição:

    • Runpath Search Paths(LD_RUNPATH_SEARCH_PATHS)- define uma lista de modelos que são substituídos por @rpath.
       @executable_path/../Frameworks
    • Revise Build Phases -> Embed Frameworks -> Destination, Subpathpara evitar a localização exata da estrutura de incorporação
  • Estrutura dinâmica:

    • Dynamic Library Install Name(LD_DYLIB_INSTALL_NAME)- ponto que @rpathé usado junto com o caminho do pacote local para um binário
      @rpath/Framework2.framework/subfolder1
//Application Runpath Search Paths
@executable_path/../Frameworks

//Framework2 Dynamic Library Install Name
@rpath/Framework2.framework/subfolder1

//Framework2 binary resolved absolute path by dyld
//Framework2 @rpath is replaced by each element of Application Runpath Search Paths
@executable_path/../Frameworks/Framework2.framework/subfolder1
/some_path/Application.аpp/Frameworks/Framework2.framework/subfolder1

* ../- vá para o pai do diretório atual

otool - ferramenta de exibição de arquivo de objeto

//-L print shared libraries used
//Application otool -L
@rpath/Framework2.framework/subfolder1/Framework2

//Framework2 otool -L
@rpath/Framework2.framework/subfolder1/Framework2

//-l print the load commands
//Application otool -l
LC_LOAD_DYLIB
@rpath/Framework2.framework/subfolder1/Framework2

LC_RPATH
@executable_path/../Frameworks

//Framework2 otool -l
LC_ID_DYLIB
@rpath/Framework2.framework/subfolder1/Framework2

install_name_tool alterar nomes de instalação dinâmicos da biblioteca compartilhada usando -rpath

CocoaPodsusa use_frameworks![Sobre] para regular umDynamic Linker

[Vocabulário]

yoAlex5
fonte
6

Recentemente, ocorreu esse problema ao importar o CoreNFC em iphones mais antigos (por exemplo, iPhone 6) e Xcode (11.3.1). Consegui fazê-lo funcionar

  1. Nos seus projetos , selecione o destino.
  2. Vá para a guia Geral na parte superior.
  3. Na seção ' Estruturas, bibliotecas e conteúdo incorporado ', adicione a estrutura (para mim era o CoreNFC). Repita o procedimento para outros destinos.
  4. Clique em Criar fases na parte superior e expanda ' Vincular binário com bibliotecas '.
  5. Torne a estrutura problemática opcional (conforme necessário).

Isso me permitiu compilar para iPhones mais antigos / mais novos sem fazer alterações no código. Espero que isso ajude outros.

whawhat
fonte
1
OBRIGADO.
Torná-
não funciona, o aplicativo falha e não há mensagem indicando o tipo de falha em vez de um ponto de interrupção em algum código de montagem.
Newsonic 19/04
por que isso é necessário para tornar opcional?
rohitwtbs
5

Eu tive o mesmo problema. Tentei criar meu projeto com um iPhone que nunca usei antes e não adicionei uma nova estrutura. Para mim, a limpeza funcionou bem ( Shift + Command + K ). Talvez seja porque eu uso a beta 5 do Xcode 7 e um iPhone 6 com o iOS 9 Beta, mas funcionou.

henrik-dmg
fonte
E talvez uma pasta de compilação limpa também (CMD + Shift + Alt + K)
grifas
4

No meu caso, meu projeto é escrito pelo objetivo-c e na biblioteca existem arquivos Swift. Então mudei "Always Embed Swift Standard Libraries" na guia Build Settings do meu projeto para Yes e ficou totalmente correto.

Usuário18474728
fonte
4

Para qualquer projeto ou projeto de estrutura no Xcode que use pods, uma maneira fácil de evitar que a biblioteca dinâmica (dylb) não seja carregada é definir o arquivo de pod para tinta no modo estático. Para fazer isso, certifique-se de não escrever a seguinte linha no seu arquivo pod.

use_frameworks!

Depois que a linha excluída do arquivo que você salvou, basta executar no console:

$ pod update
Stéphane de Luca
fonte
2

Se tiver pod de desenvolvimento Exclua seu aplicativo do simulador, instale do pod -> clean -> execute novamente ...

Rajesh Kumar
fonte
2

O mesmo ocorreu quando criei um novo esquema de configuração e compilação.

Então a solução para mim foi executar

pod install

para esta configuração recém-criada.

atereshkov
fonte
1

Depois de tentar todos os métodos disponíveis na internet e meus próprios truques de tentativa e erro 100 vezes. Finalmente eu fui capaz de resolvê-lo. - Apeksha Sahu 6 mins atrás
Saltar para o iTunes no Mac -> contas -> Autorizar este computador - Apeksha Sahu 5 minutos atrás
segundo passo .... Vá para o desenvolvedor nas configurações do iPad e iPhone e reindexe com identificadores e limpe tudo de confiança dos computadores. Funcionou para mim ........ ....... Depois de reinstalar a versão 10.13.15 da versão mais recente do Mac OS seirra beta, para reinstalar a versão mais recente do Xcode, após atualizar todos os certificados. etc etc etc ... quantos métodos você achar que eu fiz. -insira a descrição da imagem aqui

Apeksha Sahu
fonte
1

Tente alterar o sinalizador ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES(nas versões anteriores do xcode:) Embedded Content Contains Swift Codenas Configurações de compilação de NÃO para SIM.

Vittal Pai
fonte
1

Xcode 11

  1. Navegue até as configurações do seu destino e selecione Geral.
  2. Procure por "Estruturas, bibliotecas e conteúdo incorporado"
  3. Mantenha "Não incorporar" e verifique se todos os seus alvos (se você tiver mais de um) definiram apenas sua própria estrutura e não outros alvos.
Matias Jurfest
fonte
1

No Xcode 11

Eu estava enfrentando o mesmo problema

Alterar "Não incorporar" na guia Geral > "Estruturas, bibliotecas e conteúdo incorporado" ainda estava causando o mesmo erro.

O que resolvi para mim foi adicionar a seção Estrutura na guia Fases de construção > seção Incorporar estruturas

--Atualizada---

Observei que em projetos criados em versões anteriores da seção Xcode Embed Frameworks não está disponível quando executado no Xcode 11, encontre as etapas abaixo para obter a solução:

1: Primeiro, adicione a fase Novos arquivos de cópia na guia Fases de construção .

insira a descrição da imagem aqui

2: Segunda alteração do nome da fase adicionada para Embed Frameworks insira a descrição da imagem aqui

3: Mude o destino para Frameworks .

insira a descrição da imagem aqui

4: Adicione a estrutura para a qual o erro ocorreu.

insira a descrição da imagem aqui

vinay
fonte
1

Embora todo mundo esteja dizendo para incorporar a estrutura nos binários incorporados, ainda assim não está funcionando, porque estamos perdendo uma etapa importante aqui.

Aqui estão as duas etapas corretas para adicionar os binários na guia Binários incorporados:

  1. Remova a estrutura que está apresentando o erro das "Bibliotecas e estruturas vinculadas" na guia Geral.

  2. Agora adicione a estrutura removida apenas na guia Binários incorporados e isso é tudo o que você precisa fazer.

Execute-o no dispositivo e mantenha esse sorriso;)

Manish Gupta
fonte
0
  1. Vá para o arquivo em xcode -> Configurações da área de trabalho
  2. Clique na seta ao lado da qual aparece / Usuários / apple / Biblioteca / Desenvolvedor / Xcode / DerivedData
  3. Selecione os dados derivados e mova-os para a lixeira.
  4. Feche o xcode e abra-o novamente.
  5. Limpe o projeto e execute novamente.

As etapas acima resolveram meus problemas.

john raja
fonte
0

A solução simples é seguir esta captura de tela e a falha desaparece:

insira a descrição da imagem aqui

Observado: Este é o Xcode 11.5

Sour LeangChhean
fonte
-5

Caso alguém ainda esteja enfrentando esse problema, apesar de seguir todas as etapas descritas nas muitas outras respostas, talvez seja necessário revogar e recriar seu certificado de assinatura de código , conforme a seguir:

https://developer.apple.com/library/ios/qa/qa1886/_index.html

Sam
fonte
Exatamente. A assinatura de código não tem nada a ver com esse erro.
precisa saber é o seguinte