2014-09-12 28 views
13

Chciałbym dołączyć zasoby obrazu do biblioteki cocoapod, ale mam problemy z dostępem do nich. Czytałem te środki na pomoc:Zasoby dostępu w pod

Cocoapods Resources

Cocoapods Resource Bundles

Mokacoding Resource Bundles

David Potter Resource Bundles

Jednak żaden mi punkt w kierunku dostępu do zasobów. Próbowałem następujące:

[UIImage imageWithData:[NSData dataWithContentsOfURL:[(NSBundle *)[NSBundle bundleWithIdentifier:@"Assets"] URLForResource:@"[email protected]" withExtension:@"png"]]] 
[UIImage imageWithData:[NSData dataWithContentsOfURL:[(NSBundle *)[NSBundle bundleWithIdentifier:@"Assets"] URLForResource:@"my-image" withExtension:@"png"]]] 
[UIImage imageWithData:[NSData dataWithContentsOfURL:[(NSBundle *)[NSBundle bundleWithIdentifier:@"Assets.bundle"] URLForResource:@"my-image" withExtension:@"png"]]] 
[UIImage imageWithData:[NSData dataWithContentsOfURL:[(NSBundle *)[NSBundle mainBundle] URLForResource:@"my-image" withExtension:@"png"]]] 
[[UIImage imageWithData:[NSData dataWithContentsOfURL:[(NSBundle *)[NSBundle mainBundle] URLForResource:@"[email protected]" withExtension:@"png"]]] 
[UIImage imageNamed:@"my-asset"] 
[UIImage imageNamed:@"[email protected]"] 

Ale żaden z nich nie działa.

mam setup mój podspec z tych alternatyw, a nie praca z powyższym:

s.resources = ['Pod/Assets/*.{png, jpg}', 'Pod/Assets/**/*.{png, jpg}'] 
s.resource_bundles = { 
    'Assets' => ['Pod/Assets/*.{png, jpg}', 'Pod/Assets/**/*.{png, jpg}'] 
} 

Zasoby pokazać się w ramach 'Rozwoju Pods/My App/Resources' po pod update, ale nie mogę z nich korzystać za moje życie. Nie ma żadnych pakietów i nie ma nic o nazwie "Zasoby".

Każda pomoc lub wskazówki będą mile widziane.

+0

robisz zarówno 's.resources' i' s.resource_bundles' lub próbowali je oddzielnie? Być może jest pewne zderzenie. –

+0

@NiklasBerglund Zarówno osobno. – RileyE

Odpowiedz

5

To też mnie potknęło. Być może nie rozumiem +bundleWithIdentifier:, ale nie sądzę, że możesz go użyć, aby dostać się do pakietu zasobów wewnątrz pakietu aplikacji na iOS. Zobacz sekcję "Getting Bundles by Identifier" dokumentacji pakietu, aby uzyskać więcej informacji.

Co działa to +bundleWithPath:, np .:

NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"MyResourceBundle" ofType:@"bundle"]; 
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath]; 

ja owinięty że wnętrze dispatch_once bloku i nazywają to za każdym razem muszę przejść ten pakiet.

Używam także składni s.resource_bundles w moim podspecu i działa to dobrze.

9

To zależy od wersji Cocoapods, której używasz. Ze starszymi wersjami cocoapods, można uciec z pomocą [NSBundle mainBundle]: pathForResource: ofType:

NSString *bundlePath = [[NSBundle mainBundle] 
    pathForResource:@"MyResourceBundle" ofType:@"bundle"]; 
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath]; 

Jeśli używasz nowsze Cocoapods i korzystania spec.resource_bundles zamiast spec.resources w pliku podspec, ty unikać mainBundle i zastąpić go NSBundle bundleForClass, który "Returns the NSBundle object with which the specified class is associated"

Przykład:

NSString *bundlePath = [[NSBundle bundleForClass:[MyFrameworkClass class]] 
    pathForResource:@"MyResourceBundle" ofType:@"bundle"]; 
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath]; 
+0

Dzięki - zajrzę do tego – RileyE

+0

Jako rozszerzenie tego stwierdziłem, że to nie działa do ładowania obrazów z katalogów zasobów znajdujących się w Cocapod. Więcej informacji tutaj: http://stackoverflow.com/a/23903860/235290 Potwierdziłem to z moimi kolegami, którzy również potwierdzili, że nie ma żadnego znanego sposobu robienia tego. Dlatego musisz używać oddzielnych plików graficznych, a nie katalogów zasobów. – Hugh