Usando estruturas em uma ferramenta de linha de comando

Eu criei um utilitário de linha de comando (ferramenta Foundation) no Xcode, usando o Cocoa. A ferramenta usa um framework de terceiros.

Tudo funciona bem no Xcode, mas como faço para implantar este programa?

Se eu executar o aplicativo do Finder, ele não poderá encontrar a biblioteca porque está procurando em ../Frameworks/etc. Posso vincular estaticamente na estrutura de terceiros?

Infelizmente, não há como agrupar uma estrutura com um utilitário de linha de comando no OS X e suspeito que a estrutura à qual você está vinculando esteja incluída no diretório Frameworks / do pacote de aplicativos. Se você tiver access ao código-fonte da estrutura, poderá compilar uma biblioteca estática e vinculá-la estaticamente ao seu aplicativo (ou include diretamente a origem no destino da sua aplicação). Se você não tiver o código-fonte ou não quiser vincular estaticamente a biblioteca por algum motivo, há duas opções restantes:

  1. Se você tiver access à pasta / Biblioteca / Frameworks em todo o sistema, poderá instalar a estrutura de terceiros lá. Isso requer que o caminho de instalação da estrutura (a configuração de construção INSTALL_PATH ) seja definido como /Library/Frameworks no momento da criação ou que você use o install_name_tool para alterar o caminho de instalação das estruturas para /Library/Frameworks (se você não tiver a origem da estrutura código).

  2. Crie um pacote de aplicativos (como se você estivesse criando um aplicativo GUI) com seu utilitário de linha de comando como o executável do pacote de aplicativos (por exemplo, em AppBundle.app/Contents/MacOS/). Você pode copiar a estrutura de terceiros para o diretório de estruturas do pacote de aplicativos. Você pode colocar o pacote de aplicativos em qualquer lugar e criar um link simbólico para o utilitário de linha de comando.

A opção 1 é definitivamente a abordagem mais aceita, mas usei a opção 2 quando havia uma razão válida.

Você pode encontrar mais informações sobre como criar, vincular e instalar estruturas no Guia de programação de frameworks da Apple.

Outra maneira, se você tiver o código-fonte para o framework, é adicionar um alvo de biblioteca estática e construir um lib estático a partir dele. Então você pode vincular estaticamente em sua ferramenta de linha de comando.

A partir do Xcode 9.3.1, eu pude ter a estrutura adicionada à ferramenta de linha de comando definindo o Mach-O Type para a Static Library para a estrutura. Em seguida, no target linha de comando, adicione a estrutura às Target Dependencies e às Build Phases do Link Binary With Libraries . O executável interno pôde então ser executado sem problemas.