Използване на Storyboards и Image Assets в Custom Cocoapods

Опитвам се да модулирам голям проект за iOS (разработва се в Swift), използвайки какаови шушулки. Идеята е да се създадат „подприложения“, пълни с разкадровки и активи, които могат да бъдат интегрирани в основния проект.

Имам проблеми с използването на разкадровки в такъв сценарий. Проблемът е подобен на (мисля): https://github.com/CocoaPods/CocoaPods/issues/2597

Ето .podspec на модула, който се опитвам да конвертирам в pod:

Pod::Spec.new do |spec|
  spec.name = 'GlycoAppMenuModule'
  spec.version = '0.0.8'
  spec.license = { :type => 'MIT', :file => 'LICENSE' }
  spec.homepage = 'https://google.com'
  spec.platform = :ios, "8.0"
  spec.authors = { 'Abdulla Contractor' => '[email protected]' }
  spec.summary = 'Views for menu page'
  spec.source = { :git => 'https://github.com/Holmusk/GlycoAppMenuModule.git', :tag => '0.0.8' }
  spec.source_files = 'GlycoAppMenuModule/*'
  spec.resource_bundles = {
    'resources' => ['GlycoAppMenuModule/**/*.{lproj,storyboard}']}
  # spec.framework = 'Foundation'
end

и ето кода, който използвам, за да се опитам да използвам сценария

let bundlePath = NSBundle(forClass: GANavigationMenuViewController.self).pathForResource("resources", ofType: "bundle")
        let bundle = NSBundle(path: bundlePath!)
        let storyboard: UIStoryboard = UIStoryboard(name: "Menu", bundle: bundle)
        let vc = storyboard.instantiateInitialViewController() as! UIViewController
        self.presentViewController(vc, animated: false, completion: nil)

това е грешката, която получавам

2015-06-05 11:39:40.365 temp[3593:50802] Unknown class _TtC9resources30GANavigationMenuViewController in Interface Builder file.
2015-06-05 11:39:40.370 temp[3593:50802] Could not load the "icAccount.png" image referenced from a nib in the bundle with identifier "(null)"
2015-06-05 11:39:40.371 temp[3593:50802] Could not load the "icConnect.png" image referenced from a nib in the bundle with identifier "(null)"
2015-06-05 11:39:40.371 temp[3593:50802] Could not load the "icDiabetesProfile.png" image referenced from a nib in the bundle with identifier "(null)"
2015-06-05 11:39:40.373 temp[3593:50802] Could not load the "icLogout.png" image referenced from a nib in the bundle with identifier "(null)"
2015-06-05 11:39:40.377 temp[3593:50802] Could not load the "icCircle.png" image referenced from a nib in the bundle with identifier "(null)"
2015-06-05 11:39:40.386 temp[3593:50802] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewController 0x7fb3f3d2cdd0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key accountButton.'

Някаква идея какво може да ми липсва?


person Abdulla Contractor    schedule 05.06.2015    source източник
comment
Изглежда подобен проблем stackoverflow.com/questions/3088059/   -  person aman.sood    schedule 26.02.2016


Отговори (1)


Имах същия проблем и го реших.

Във вашия .podspec ЕДИНСТВЕНИЯТ маркер за ресурс, от който се нуждаете, е:

s.resources = "MMA_Piece/**/*.{png,jpeg,jpg,storyboard,xib,xcassets}"

Сега може би питате: Разбира се, че вече опитах това, но не се получи? Защо трябва да работи сега?

Ами да ти кажа :D

Уверете се, че ВСЕКИ ресурс, който искате да включите във вашия персонализиран CocoaPod, е в директорията на проекта на най-долното ниво. В моя случай (проект MMA_Piece) това е следната папка (избраната):

въведете описание на изображението тук

Свършен! Ако използвате pod в друг проект с помощта на „pod install“, вашите ресурси ще дойдат с него така:

въведете описание на изображението тук

ВАЖНО: Ако искате да използвате ресурса в другия си проект, например MainProject, ВИНАГИ трябва да посочите пакета! Или MainProject няма да може да намери ресурса!

Надявам се това да ви помогне!

person ErikBrandsma    schedule 24.06.2016
comment
Благодаря ти много! Търсих с часове и най-накрая открих, че странно трябва да използвам не spec.resource_bundles (създаде друга цел и няма да мога да извлека пакет от нея, а s.resources. ЯРОСТ - person Nik Kov; 26.05.2017
comment
Здравей @ErikBrandsma, прав си, подходът ти работи добре. Това обаче ще наруши интернационализацията на сценария, тъй като компилираните .storyboardc и .strings файлове са копирани в главното хранилище на пакета, а не в директорията *.lproj - person vmeyer; 22.05.2019