Pergunta

Eu criei uma biblioteca estática no Xcode, que eu sou capaz de usar com sucesso em outros projetos. No entanto, com recursos como plists, eu acho que eu deve incluir quaisquer plists referenciados na minha biblioteca no principal projeto onde o projeto é usado.

No meu projeto biblioteca estática, eu tenho a minha plist incluídos na fase "Copiar Pacote de Recursos" do alvo. No meu código, aqui é o que eu estou fazendo:

NSBundle *mainBundle = [NSBundle mainBundle];
NSString *filePath   = [mainBundle pathForResource:@"MyClassParams" ofType:@"plist"];

NSMutableDictionary* params = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];

Se eu usar mainBundle eo MyClassParams.plist está incluído no projeto principal, tudo é bom. Se MyClassParams.plist está incluído no projeto de biblioteca, ele não funciona.

Na suposição de que [NSBundle mainBundle] foi referenciando o método estático errado usar, eu substituí-lo com:

NSBundle *mainBundle = [NSBundle bundleForClass:[MyClass class]];

Isto não quer trabalhar.

Assim, é possível incluir uma plist ou quaisquer outros recursos com uma biblioteca estática - ou eu tenho que incluir o que eu preciso no projeto onde o lib é usado

Foi útil?

Solução

Bibliotecas estáticas não são em feixes, quando ficar ligado em um aplicativo que são parte de que as aplicações agrupar. No iPhone, efetivamente todo o código que você escreve será no mainBundle desde que você não pode incluir quadros embutidos.

Então, sim, você precisa copiar todos os recursos para o projeto que você está ligando a estrutura estática em.

Outras dicas

Eu sei que você não pode incluir arquivos de recursos em uma biblioteca estática (que é o que os quadros fazem). Eu uso uma outra solução em meus projetos:

Dentro da biblioteca estática projeto "YYY":

  • I adicionar um destino "Loadable Bundle" ao meu projeto de biblioteca estática (Adicionar Alvo, Cacau, Loadable Bundle)
  • acrescento esta meta como uma dependência do alvo biblioteca estática

Dentro do projeto principal:

  • Fazer a ligação a libYYY.a
  • Adicione o YYY.bundle pacote para os arquivos de recursos copiados

Desta forma, os arquivos de recursos usados ??na biblioteca estática não são geridos no projeto principal. Digamos que eu tenha uma imagem foo.png na biblioteca estática, eu uso

[UIImage imageNamed:@"YYY.bundle/foo.png"]

Você poderia, então, obter o seu plist como este:

NSBundle *staticLibBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"YYY" ofType:@"bundle"]];
NSString *filePath   = [staticLibBundle pathForResource:@"MyClassParams" ofType:@"plist"];

NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];

A seguir, dois screenshots:

  • esquerdo : projeto de biblioteca estática com alvo pacote carregável
  • direito :. Mostrando o binário biblioteca estática adicionado ao "elo binário com Bibliotecas" e o pacote de recursos adicionados à "Copiar pacote Recursos"

projeto de biblioteca estática projeto principal

Eu segui tudo @Jilouc sugeriu, no entanto, posso obter o pacote, mas não conseguiu obter os arquivos dentro dela. Tentei tanto as duas formas (@"yyy.bundle/image" ou staticlib pathforresource...)

Então eu usei o método abaixo e funcionou!

NSBundle *staticBundle = [NSBundle bundleWithPath:[[[NSBundle mainBundle]resourcePath] stringByAppendingPathComponent:@"yy.bundle"]];

NSString *filePath = [[jsBundle resourcePath]stringByAppendingPathComponent:fileName];

NSString* content = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:NULL];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top