É possível copiar um plist diferente no código pacote de aplicativos sábio?
-
16-09-2019 - |
Pergunta
A minha pergunta é referido acima no título, mas eu vou escrevê-lo aqui novamente
É possível copiar um plist diferente no código pacote de aplicativos sábio ??
Este é realmente um pouco relacionado na minha pergunta anterior;) Criar uma lista de propriedades dicionário programaticamente
Mas desde que eu posso escrever o plist (e teste se eu estou fazendo algo errado) Eu queria saber se posso copiar meu arquivo escrito
[testBook writeTofile:@/Users/jack/testbook2.plist" atomically:NO];
para o meu pacote de aplicativos em código (de modo que ele pode ler a partir daqui com
NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *dataPath = [path stringbyAppendingPathcomponent:@"testbook2.plist"];
Outra alternativa é tão bom assim, por exemplo, se eu puder ler meu plist diretamente de outro caminho em vez do mainBundle
Solução
Fisicamente, sim, é possível, por vezes.
NO, não faça isso !!
Ok ... copiar o material em sua App Bundle é ruim, seu pacote aplicativo não é onde você guarda as configurações ou dados. Você deve pensar de seu pacote aplicativo como somente leitura. Você deve fazer isso por várias razões:
- Embora a maior parte do tempo um usuário em um sistema Mac OS X tem permissão para gravar um aplicativo às vezes não. Pense sobre as crianças que não estão usando contas de administrador, ou implantações de laboratório em escolas.
- É invalidará codesigning. Se você assinar seu aplicativo isso vai mudar a assinatura e quebrar o codesign, causando todos os tipos de problemas estranhos (perdendo todas as permissões de firewall O aplicativo tem, informando ao usuário o aplicativo mudou e pedindo-lhes permissão chaveiro novamente, etc). No futuro, esta também pode aparecer todos os tipos de avisos desde adulteração de um aplicativo é uma bandeira grande segurança vermelho.
- Não vai funcionar no iPhone. Isso pode não ser um problema, mas se você a cada pretende usar este código em um iPhone os aplicativos pacotes são sandboxed somente leitura
O lugar correto para colocar este tipo de material é em uma pasta sub do Application Support pasta ??p>
Outras dicas
Eu não sei exatamente o que você está fazendo, mas dependendo do seu aplicativo, você pode querer usar o diretório Application Support:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
if ([paths count] > 0) {
NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"App Name"];
// Create the directory if it doesn't exist, etc.
} else {
NSLog(@"Fail!");
// ...
}