ios - use - xcode ui




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

Essa falha foi um problema de bloqueio, basicamente eu usei os seguintes passos para reproduzir o problema:

  • Crie um projeto do Cocoa Touch Framework
  • Adicione um arquivo rápido e uma classe Dog
  • Criar estrutura para o dispositivo
  • Criar um aplicativo de exibição única no Swift
  • Importe estrutura para o projeto de aplicativo
  • Instanciar a classe swift do framework no ViewController
  • Construa e execute o aplicativo no dispositivo

O aplicativo imediato caiu ao ser lançado, aqui está 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 o mesmo acidente. No entanto, posso criar aplicativos e executá-los no simulador. Além disso, estou ciente de que posso alterar a estrutura de Obrigatório para Opcional no Link Binary With Libraries , mas isso não resolveu completamente o problema, o aplicativo travou quando criei uma instância de Dog . O comportamento é diferente no dispositivo e no simulador, suspeito que não podemos distribuir a estrutura para o dispositivo usando a versão beta do Xcode. Alguém pode esclarecer isto?


Para iOS maior ou igual a 8

Na guia Geral do destino, na seção Binários incorporados, adicione a estrutura. Isso irá copiar o framework no compilado para que ele possa ser ligado em tempo de execução.

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

Nota: Incorporar estruturas customizadas é suportado apenas no iOS> 8 e, assim, uma solução alternativa que funciona em versões mais antigas do iOS é a seguinte.

Para iOS menos de 8

Se você tiver influência sobre essa estrutura (tenha acesso ao código-fonte / processo de compilação), você pode alterar essa estrutura para ser vinculada estaticamente em vez de vinculada dinamicamente. Isso fará com que o código seja incluído em seu aplicativo compilado em vez de vinculado ao tempo de execução e, portanto, o framework não precisará ser incorporado.

Como: sob a guia Build Setting do framework, na seção Linking altere o Mach-O Type para Static Library. Agora você não precisa incluir o framework em binários embutidos.

Incluindo Ativos: Para incluir coisas como imagens, áudio ou arquivos xib / nib, recomendo criar um pacote (essencialmente um diretório, mais informações aqui bit.ly/ios_bundle) e, em seguida, carregar os ativos do pacote usando o NSBundle.


  1. Ir para o arquivo no xcode -> Configurações do espaço de trabalho
  2. Clique na seta ao lado da qual aparece / Usuários / apple / Library / Developer / Xcode / DerivedData
  3. Selecione os dados derivados e mova-os para a lixeira.
  4. Muito o xcode e reabri-lo.
  5. Limpe o projeto e execute novamente.

As etapas acima resolveram meus issuses.


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

1) Crie seu framework

  • Desenvolva seu framework.
  • Quando o desenvolvimento estiver concluído, o COMMAND + B construa sua estrutura e assegure que você receba "Build Succeeded".

2) Acesse sua estrutura

  • Uma vez que seu projeto de framework construa com sucesso, ele estará pronto para você acessar na sua pasta Products em seu projeto.

  • Clique com o botão direito do mouse no seu .framework e selecione "Show in Finder".

3) Coloque estrutura em seu projeto

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

4) Configurar projeto de aplicativo para estrutura

  • Selecione o nível superior em seu projeto

  • Escolha o seu alvo

  • Vá para "Build Phases", depois "Link Binary with Libraries", e assegure-se de que sua estrutura esteja incluída com o opcional selecionado .

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

  • Role para baixo até a nova seção "Copiar arquivos" e assegure-se de definir o Destination como "Frameworks". Deixe o sub-caminho vazio. Em seguida, clique no botão + no canto inferior esquerdo.

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

  • Certifique-se de que sua estrutura esteja incluída com "Code Sign On Copy" selecionado.

5) Limpe e execute seu projeto

  • COMMAND + SHIFT + K
  • COMMAND + R


Em primeiro lugar, tente construir depois de Command + Option + Shift + K. Se ainda falhar, siga os passos abaixo.

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


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

Dê uma olhada nesta imagem:

Espero que ajude!


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


Eu tive que (além do que mencionei aqui) adicionar a seguinte linha aos caminhos de pesquisa do Runpath na guia Build Settings :
@executable_path/Frameworks


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

A referência está here nos fóruns de desenvolvedores da Apple.


No meu caso, a solução foi remover o framework compilado dos Binários Embutidos, que era um projeto independente no espaço de trabalho, limpá-lo e reconstruí-lo e, finalmente, adicionar novamente aos Binários Embarcados.


Para aqueles que a correção não funcionou, tente atualizar o sistema operacional para o Yosemite. Funcionou para mim!


Se tiver pod de desenvolvimento Exclua seu aplicativo da instalação do simulador do pod -> clean -> execute novamente ...


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

Meu caso era um framework customizado como parte do mesmo espaço de trabalho. Acontece que 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 o DYLIB_INSTALL_NAME_BASE Dynamic Library Install Name Base ( DYLIB_INSTALL_NAME_BASE ) em Build Settings de Build Settings da estrutura e, em seguida, recriá-lo. Ele foi incorretamente configurado para $(LOCAL_LIBRARY_DIR) e eu tive que alterá-lo para @rpath .

Portanto, no estágio de processamento de link, ele instruía o aplicativo host a carregá-lo dinamicamente no tempo de execução de /Library/Frameworks/fw.Framework/fw (como em, a raiz do sistema de arquivos) em vez de caminho-para-aplicativo /Frameworks/fw.Framework/fw

Em relação a todas as outras configurações: ele precisa estar em três locais nas Build Phases , mas todas elas são definidas de uma só vez quando você as adiciona à configuração de Embedded Binaries da guia General do aplicativo de hospedagem.

Eu não precisei configurar uma fase extra de Copy Files , 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 estão claras na transcrição simplificada na interface do usuário do Xcode.]

Eu ainda não tenho idéia do porque o Xcode configurou o valor DYLIB_INSTALL_NAME_BASE incorretamente para mim.


Tente alterar o sinalizador ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES (nas versões anteriores do xcode: Embedded Content Contains Swift Code ) nas Configurações de Construção de NO para YES.


Resolvido para mim, desmarcando "Copiar somente quando instalado" em Fases de Construção-> Incorporar Estruturas





xcode6