As bibliotecas dinâmicas são compatíveis com iOS (iPhone / iPad)?
No Xcode, tentei criar um novo projeto -> Framework e Biblioteca -> Biblioteca Cocoa (dinâmico) . Nas configurações do projeto, defini o Base SDK como iOS device 4.1
e o destino iOS4.1
, mas há um erro de compilação:
target especifica o tipo de produto 'com.apple.product-type.library.dynamic', mas não existe esse tipo de produto para a plataforma 'iphonesimulator' ".
A compilação que selecionei é Simulator -> Debug -> i386 .
Respostas:
No momento em que esta pergunta foi feita, as bibliotecas dinâmicas não eram suportadas pelo iOS e resultariam na rejeição do seu aplicativo. Apenas bibliotecas estáticas são permitidas.
No entanto, no iOS8 você pode usar bibliotecas e estruturas dinâmicas. Deve "simplesmente funcionar"
fonte
Eu realmente não estou em desacordo com a resposta de DarkDust , mas se eu pode canalizar o meu interior Bill Clinton, isso depende do que o significado suportado é :)
A Apple não quer que você faça isso para aplicativos da App Store, mas o sistema operacional certamente permite. Aplicativos Jailbreak usam essa técnica o tempo todo. Basicamente, você usa uma técnica padrão do UNIX para abrir dinamicamente uma estrutura / biblioteca e, em seguida, usa as coisas nela. A função dlopen permite que você abra a biblioteca passando o caminho para essa estrutura , ou dylib. De alguns documentos para a construção de aplicativos jailbreak , aqui está um exemplo de chamada de uma
init()
função implementada dentro do seu próprio dylib separado:Além disso, a restrição padrão contra permitir que você crie um projeto de biblioteca dinâmica para iOS é algo no Xcode que você tem a capacidade de substituir editando alguns arquivos xml XCode:
Construir e usar dylib no iOS
Depois de fazer isso, você pode construir uma biblioteca normal do iOS .dylib e usá-la de acordo com o código de exemplo acima. (sim, você provavelmente terá que desbloquear esse recurso novamente sempre que instalar uma nova versão do XCode).
Portanto, não é uma limitação técnica, mas uma limitação da política da App Store. Se você não está limitado à App Store, você pode fazer isso. Observe que essa técnica não requer jailbreak, embora se o aplicativo for sandbox, isso pode limitar de onde dylibs podem ser carregados.
Editar: para garantir que essas informações não sejam perdidas para uma futura podridão de links, aqui está o conteúdo do link que forneci sobre como habilitar dylibs iOS no Xcode. ( Observação: este processo ainda funciona no Xcode 4, mas veja o (s) comentário (s) abaixo para atualizações de caminhos, etc.) A fonte é o blog iOS Place :
O Xcode não permite que você crie dylib para iOS. O aplicativo será rejeitado se não for binário único. Mas eu tenho um aplicativo que possui arquitetura de plug-in para carregar módulos opcionais. Eu só quero um protótipo rápido para provar o conceito antes de transferi-lo totalmente para o iOS. É mais rápido de fazer se dylib pudesse simplesmente funcionar. Portanto, este post mostra como construir e usar dylib, mas esteja ciente de que não será aprovado na App Store. (Testado com Xcode 3.2.4 em 10.6.4)
1. Abra esses arquivos no Property List Editor: /Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications/MacOSX Product Types.xcspec e /Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Specifications / iPhone Simulator ProductTypes.xcspec
2. Localize o item em “ MacOSX Product Types.xcspec ” que contém o tipo de produto
com.apple.product-type.library.dynamic
e arraste-o para “ iPhone Simulator ProductTypes.xcspec ”.3. Abra “ MacOSX Package Types.xcspec ” e “ iPhone Simulator PackageTypes.xcspec ” encontrados nos mesmos lugares.
4. Localize o item em “ MacOSX Product Types.xcspec ” que contém o tipo de pacote
com.apple.package-type.mach-o-dylib
e arraste-o para “ iPhone Simulator PackageTypes.xcspec ”.5. Repita as etapas para “ iPhoneOS.platform ” e reinicie o Xcode se estiver em execução.
Agora, vamos construir um dylib. Comece com o modelo “ Cocoa Touch Static Library ”. Isso deve incluir o Foundation.framework no projeto. Aqui estão as alterações que fiz na parte superior do modelo para construir o dylib.
1. Abra o arquivo project.pbxproj (encontrado dentro do pacote de arquivos do projeto Xcode) em um Editor de Texto. Pesquise a string “ producttype ”, altere seu valor para
com.apple.product-type.library.dynamic
;Agora, abra o projeto com o Xcode, vá para Projeto-> Editar configurações do projeto
2. “ Diretório de instalação ” definido como
@executable_path/
porque pretendo colocar o dylib no mesmo diretório que o executável do aplicativo.3. “ Mach-O Type ” definido para Dynamic Library
4. “ Extensão executável ” definida como dylib
5. “ Prefixo executável ” definido como vazio
6. Adicione um ou dois métodos simples à biblioteca e construa-a.
Agora, crie um aplicativo para testá-lo. Desta vez, escolho o aplicativo baseado em visualização . Conecte um UIButton e um UILabel para chamar o lib e mostrar a mensagem de retorno. Você pode baixar o projeto completo TestApp e brincar com ele.
fonte
Não são permitidas bibliotecas dinâmicas a partir do Xcode 11.4.1 (seu projeto não compilará para todos os destinos). A nova maneira de usar libs / frameworks é o create-xcframework do xcodebuild.
fonte