Saturday 16 December 2017

Plist format binário opções no Brasil


Estou tentando exibir uma lista de propriedades de resultados de pesquisa para meu aplicativo para iPhone. O servidor é um protótipo, escrito em Python. Primeiro eu encontrei Pythons built-in plistlib, que é incrível. Eu quero dar um tiro de busca-como-você-tipo, então eu preciso que ele seja tão pequeno quanto possível, e xml era muito grande. O formato plist binário parece uma boa escolha. Infelizmente plistlib doesnt fazer arquivos binários, então passo direito PyObjC. (Segue: Estou muito aberto a quaisquer outros pensamentos sobre como realizar pesquisa ao vivo. Eu já reduziu os dados, tanto quanto possível, incluindo apenas exibindo resultados suficientes para preencher a janela com o teclado do iPhone para cima, que é 5.) Infelizmente, Embora eu saiba Python e estou ficando bastante decente com o cacau, eu ainda não consigo PyObjC. Este é o equivalente de cacau do que eu quero fazer: Eu pensei que eu deveria ser capaz de fazer algo parecido com isso, mas dataWithPropertyList isnt na lista de diretórios de objetos NSPropertyListSerialization (). Eu também deveria provavelmente converter a lista para NSArray. Eu tentei os documentos PyObjC, mas é tão tangente ao meu trabalho real que eu pensei Id tentar um SO SOS, também. Isto é como eu estou lendo no plist no lado do iPhone. Feliz em esclarecer se qualquer um destes doesnt fazer sentido. Converting Binary Plists Binary plists são os arquivos que os produtos da Apple usam para armazenar informações. A maneira mais fácil de visualizá-los é convertê-los para XML. Observe que os dados binários no plist XML são convertidos em base64 e, portanto, strings nos dados binários não são diretamente visíveis. O plutil do programa é nativo a Mac OS X (como de 10.2), porém é incluído também quando iTunes é instalado em um PC de Windows. No linux libplist 1 também fornece um equivalente de plutil. Plutil em um PC Windows é armazenado em: Que pode ser adicionado ao PATH em variáveis ​​ambientais para plutil pode ser executado a partir de qualquer lugar Se você gostaria de copiar o executável plutil para outro diretório que exige uma série de DLLs para funcionar. Essas dlls são: ASL, CFNetwork, CoreFoundation, Foundation, icudt46, libdispatch, libicuin, libicuuc, libtidy, libxml2, objc, ptheadVC2, SQLite3 e zlib. Estes são todos encontrados na pasta Apple Application Support junto com plutil. exe. Para converter plists binários para XML execute o comando: Ou com libplist External LinksProperty ListBinary O formato de lista de propriedades binárias é um dos vários formatos que foram usados ​​para arquivos plist. Os meios padrão para aplicações em sistemas operacionais descendentes de NeXTSTEP (incluindo os actuais SO Apple) para armazenar dados de configuração. O formato binário foi introduzido mais recentemente do que os outros formatos, mas agora é o padrão para os sistemas Apple. Descrição do formato Tipos disponíveis Os tipos a seguir estão disponíveis em um plist binário: singleton (boolean, null, fill) integer data do float dados binários seqüência de bytes simples string de bytes duplos Dicionário de array UID Seções de arquivo Um arquivo plist binário tem quatro seções: São um identificador, igual a bplistXX onde XX é dois dígitos. Bplist00 e bplist01 são conhecidos, eu não sei as diferenças. Em segundo lugar está todos os elementos no plist, codificados e concatenados. Terceiro é a concatenação dos deslocamentos de todos os elementos no plist, cada deslocamento dado como um inteiro sem sinal em um número fixo de bytes. Um objeto no plist tem um número de referência que é baseado na indexação baseada em 0 desta tabela, p. O objeto número 0 é o objeto no deslocamento dado primeiro nesta tabela. Os 32 bytes finais, a seção de reboque. Os 32 bytes finais de um plist binário têm o seguinte formato: 6 bytes de x00 padding um inteiro de 1 byte que é o número de bytes para um valor de deslocamento. Os valores válidos são 1, 2, 3 ou 4. Os valores de deslocamento são codificados como números inteiros não assinados, grandes endian. Deve ser amplo o suficiente para codificar o deslocamento da tabela de deslocamento, não apenas o deslocamento do objeto mais alto. Um inteiro de 1 byte que é o número de bytes para um número de referência do objeto. Os valores válidos são 1 ou 2. Os números de referência são codificados como números inteiros não assinados, grandes endian. 4 bytes de x00 padding um inteiro de 4 bytes que é o número de objetos no plist 4 bytes de x00 padding um inteiro de 4 bytes que é o número de referência do objeto raiz no plist. Isso geralmente é zero. 4 bytes de x00 padding um inteiro de 4 bytes que é o deslocamento no arquivo do início da tabela de deslocamento, nomeado acima como o terceiro elemento em um plist binário Codificação de objeto A codificação dos tipos disponíveis são as seguintes: Os primeiros quatro bits São um número de identificação do tipo de objeto, de acordo com o seguinte mapeamento: 0x0 singleton 0x1 inteiro 0x2 float 0x3 data 0x4 dados binários 0x5 único byte seqüência de caracteres 0x6 byte duplo seqüência de caracteres 0x8 UID 0xa array 0xd dicionário O segundo quatro bits são o tamanho do objeto . Se o valor dado for 15, isso significa que o tamanho do objeto verdadeiro é maior do que pode ser expresso em quatro bits. Neste caso, o próximo byte é o início do tamanho verdadeiro, codificado como os inteiros objetos, exceto o valor é unsigned. Isso não é o caso para objetos de tipo 0x0 no entanto, consulte abaixo para obter detalhes. Vou me referir a este valor como o comprimento do objeto. A codificação para o restante do objeto varia de acordo com o tipo. O comprimento do byte é o número de bytes usados ​​na codificação do objeto, sem contar a codificação do número de identificação do tipo e comprimento do objeto já discutido. Digite o número 0x0 agrupa valores booleanos, um valor nulo e algo chamado preencher por plutil. pl. Eu não sei o que é preencher. O comprimento do objeto é realmente o valor do objeto, eo comprimento do byte é sempre zero. Um valor de 0 significa nulo, 8 significa Falso, 9 significa Verdadeiro e 15 significa preenchimento. Qualquer outro valor é inválido. O comprimento do byte é igual a 2 à potência do comprimento do objeto. Comprimentos de objeto válidos são 0, 1, 2 e 3 para 1, 2, 4 e 8 bytes inteiros, respectivamente. A codificação é como um inteiro big-endian, assinado no número apropriado de bytes. A conversão de comprimento de objeto para byte é a mesma que para inteiros. O comprimento do objeto é 2 ou 3, correspondendo a um comprimento de byte de 4 ou 8. A codificação é como um big-endian, de precisão única ou uma flutuação de dupla precisão, de acordo. As datas são armazenadas como um flutuador com um valor de segundos desde a época de 1 de Janeiro de 2001, 0:00:00 GMT. A codificação é igual à codificação para os flutuadores, exceto que o comprimento do objeto é sempre 3, para um comprimento de byte de 8. Dados binários O comprimento do byte é o comprimento do objeto e qualquer valor é válido. Os bytes não são interpretados. Single Byte String O comprimento do byte é o comprimento do objeto, e qualquer valor é válido. A codificação é ASCII. Double Byte String O comprimento do byte é duas vezes o comprimento do objeto, e qualquer valor é válido. A codificação é utf-16 (big endian). A codificação é como inteiros, exceto que os valores não são assinados. Estes são usados ​​extensivamente em arquivos escritos usando NSKeyedArchiver, um serializador para objetos Objective-C. O valor UID parece ser o índice de um valor dentro da lista de objetos dentro de um tal plist. O comprimento do byte é o comprimento do objeto vezes o número de bytes por referência do objeto para este arquivo plist, ou seja, um ou dois vezes o comprimento do objeto. Qualquer comprimento de objeto é válido. A codificação é a concatenação de números de referência de objeto como números inteiros não assinados, big-endian cada um codificado no número de bytes por referência de objeto para este arquivo plist. Dicionário O comprimento do byte é duas vezes o comprimento do objeto vezes o número de bytes por referência do objeto. A codificação é como a concatenação de dois arrays codificados, o primeiro de chaves e o segundo de valores. O primeiro valor na lista de chaves corresponde ao primeiro valor na lista de valores, e assim por diante. Notas finais Ao escrever um arquivo plist binário, quaisquer valores que se repetem dentro do arquivo devem ser codificados apenas uma vez e esse único objeto referenciado onde sempre que o valor se repete. Outros links

No comments:

Post a Comment