Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. iOS
Code

Ўвядзенне ў рэсурсы па запыце для iOS і tvOS

by
Difficulty:IntermediateLength:LongLanguages:

Belarusian (беларуская мова) translation by Alex Grigorovich (you can also view the original English article)

Увядзенне

Нароўні з iOS 9 і watchOS 2 кампанія Apple прадставіла рэсурсы па запыце, новы API для дастаўкі кантэнту, паменшвалае аб'ём прасторы, якое прыкладанне займае на прыладзе карыстальніка. Выкарыстоўваючы рэсурсы па запыце вы можаце адзначыць пэўныя актывы вашага прыкладання, перанесці іх на сервер Apple, каб вашыя карыстальнікі маглі загружаць іх па меры неабходнасці. У гэтым уроку я раскажу вам пра асновы рэсурсаў па запыце, стварыўшы простае прыкладанне для прагляду малюнкаў.

Нам спатрэбіцца

Для гэтага ўрока нам спатрэбіцца Xcode 7+ і навыкі распрацоўкі для iOS. Таксама неабходна будзе спампаваць стартавы праект на GitHub.

1. Рэсурсы па патрабаванню

Перавагі

Рэсурсы па запыце былі прадстаўлены ў iOS 9 і watchOS 2 з асноўнай мэтай - скараціць аб'ём займанага месца ў прыкладаннях на прыладзе. Іншым важным перавагай рэсурсаў па запыце з'яўляецца тое, што ваша прыкладанне можа быць загружана і адкрыта карыстальнікамі нашмат хутчэй.

Рэсурсы па патрабаванні працуюць, прызначаючы унікальныя тэгі рэсурсаў у Xcode, каб стварыць так званы пакет актываў. Гэтыя пакеты могуць ўключаць у сябе ўсе, што звязана з каталогамі рэсурсаў (малюнкі, тэкстуры SpriteKit, дадзеныя і т. д.). Ці нават з іншымі файламі, такімі як OpenGL і Metal Shaders, а таксама сцэны SpriteKit і SceneKit і сістэмы часціц.

Калі вы адпраўляеце сваё прыкладанне ў App Store, гэтыя рэсурсы таксама загружаюцца і размяшчаюцца там для загрузкі ў любы час. Каб загрузіць пакеты актываў падчас выканання ў дадатку, вы проста карыстаецеся тэг для кожнага пакета, які вы прызначылі ў Xcode.

Катэгорыі

Двума асноўнымі аспектамі прыкладання, які выкарыстоўвае рэсурсы па патрабаванні, з'яўляюцца пакет прыкладанняў, які запоўнены выкананым кодам для вашага прыкладання і асноўных актываў, такіх як значкі карыстацкага інтэрфейсу і пакеты актываў.

Для гэтых пакетаў актываў існуюць тры асноўныя катэгорыі, якія вы можаце арганізаваць у Xcode:

  • Першапачатковая ўстаноўка: гэта для кантэнту, які патрабуецца для запуску прыкладання ў першы раз, але яго можна выдаліць пазней. Гэта можа ўключаць у сябе першыя некалькі узроўняў гульні, якія больш не патрэбныя, калі гулец прасоўваецца досыць далёка ў гульні.
  • Prefetched: гэтая катэгорыя ўключае кантэнт, які вы жадаеце загрузіць адразу пасля заканчэння ўстаноўкі. Гэты тып кантэнту рэкамендуецца для рэсурсаў, якія ня патрабуюцца для працы вашага прыкладання пасля яго ўстаноўкі, але якія неабходныя для лепшага зручнасці карыстальнікаў. Добрым прыкладам з'яўляюцца падручнікі для гульні.
  • On Demand: гэтая катэгорыя прызначана для кантэнту, які вам патрэбен у больш позні час, і ваша прыкладанне можа функцыянаваць без яго. Пры працы з рэсурсамі па патрабаванні гэта найбольш распаўсюджаны тып катэгорыі, які вы будзеце выкарыстоўваць.

Абмежаванні

Прыкладання, створаныя з падтрымкай рэсурсаў па патрабаванні, таксама павінны прытрымлівацца наступных абмежаванняў у дачыненні да памеру файла:

  • 2GB для пакета прыкладанняў для iOS
  • 2GB для пачатковых тэгаў ўстаноўкі
  • 2GB для папярэдне выбраных тэгаў
  • 2ГБ для выкарыстання рэсурсаў. Гэта важна толькі пры запуску прыкладання і выкарыстанні рэсурсаў па патрабаванні.
  • 512МБ для кожнага асобнага пакета актываў. Ні адзін ярлык не можа ўтрымліваць больш, чым гэты аб'ём дадзеных. Калі вы пяройдзеце гэты мяжа, Xcode прадаставіць вам папярэджанне і дазволіць вам яшчэ тэставаць і распрацоўваць ваша прыкладанне. Аднак спробы падачы заявак у App Store пацерпяць няўдачу.
  • 20ГБ для ўсіх рэсурсаў, размешчаных Apple. Гэта агульны аб'ём рэсурсаў, якія ваша прыкладанне можа загружаць у любы момант часу. У той час як толькі 2 ГБ могуць выкарыстоўвацца ў любы момант часу, калі на прыладзе карыстальніка досыць памяці, да 20 ГБ вашых рэсурсаў можна загрузіць і зрабіць даступным для вашага прыкладання ў любы час.

Нарэзка прыкладанняў

Звярніце ўвагу, што агульная сума ў 20 ГБ не ўлічвае аплікацыю прыкладанняў, пакуль усе астатнія сумы робяць. Што такое нарэзка прыкладанняў? Зразанне прыкладанняў - яшчэ адна функцыя, якая была ўкаранёная ў iOS 9 для памяншэння памеру прыкладанняў. Ён робіць гэта, толькі праглядаючы рэсурсы, спецыфічныя для прылады, на якім ўстаноўлена прыкладанне. Напрыклад, калі каталогі актываў выкарыстоўваюцца правільна, прыкладанне, устаноўленае на iPhone 6 Plus або 6s Plus, трэба загрузіць толькі 3-кратныя малюнка і не турбавацца аб маштабах 1x і 2x. Для рэсурсаў па патрабаванні 20 ГБ агульных рэсурсаў, якія вы можаце загрузіць на серверы App Store, - гэта агульная сума для ўсіх тыпаў прылад. Усе астатнія абмежаванні прызначаныя для кожнага канкрэтнага прылады, на якім ўстаноўлена прыкладанне.

Выдаленне рэсурсаў па патрабаванні

З пункту гледжання выдалення дадзеных (ачысткі) пакеты актываў, загружаныя вашым прыкладаннем, будуць выдаленыя толькі тады, калі прылада, на якім ўстаноўлена ваша прыкладанне, вычарпала даступнае прастору. Калі гэта адбудзецца, сістэма рэсурсаў па патрабаванні будзе глядзець на ўсе прыкладання на прыладзе, і, выбраўшы яе, вы ўбачыце ўласцівасць захавання кожнага пакета актываў, а таксама калі яно было выкарыстана ў апошні раз. Важна адзначыць, што пакеты актываў для вашага прыкладання ніколі не будуць ачышчаны падчас працы вашага прыкладання.

2. Прызначэнне і арганізацыя тэгаў

Адкрыйце праект стартара ў Xcode і запусціце прыкладанне ў iOS Simulator. На дадзены момант гэта асноўнае прыкладанне змяшчае калекцыю малюнкаў, кожная з якіх мае камбінацыю аднаго з трох колераў (чырвонага, зялёнага або сіняга) і адной з чатырох фігур (круг, квадрат, зорка ці шасцікутнік). Пры запуску прыкладання перайдзіце ў «Колеры» > «Чырвоны», і на экране з'явіцца адзін малюнак чырвонага круга.

App Menu
Color Menu
Red Circle

У гэтым дадатку мы збіраемся стварыць у агульнай складанасці сем пакетаў актываў, па адным для кожнага колеру і па адным для кожнай фігуры. Яшчэ адна выдатная асаблівасць рэсурсаў па патрабаванні заключаецца ў тым, што аднаму рэсурсу можа быць прызначана больш аднаго тэга. Чырвоны круг, напрыклад, можа быць часткай як пакета Red актываў, так і пакета актываў Circle.

API рэсурсаў па патрабаванні таксама досыць разумны, каб не загружаць і не капіяваць адзін і той жа рэсурс двойчы. Іншымі словамі, калі дадатак ўжо загрузіла пакет Red asset, а затым захацелася загрузіць пакет рэсурсаў Circle, малюнак з чырвоным кружком не будзе загружана зноў.

У Xcode адкрыйце Assets.xcassets. Вы павінны ўбачыць усе дванаццаць малюнкаў, як паказана ніжэй.

Asset Catalog

Затым абярыце набор малюнкаў Blue Square і адкрыйце Attributes Inspector справа.

Attributes Inspector

Вы ўбачыце, што інспектар атрыбутаў ўключае ў сябе новы раздзел тэгаў рэсурсаў попыту, у якім вы паказваеце тэгі для кожнага рэсурсу. Каб усталяваць сіні квадрат, увядзіце «Сіні» і «Квадрат» у полі «Пазнакі рэсурсаў па запыце». Гэта азначае, што ў устаноўленага малюнка ёсць два прысвойваных ім тэга.

Blue Square tags

Звярніце ўвагу, што стартавы праект ужо уключае тэгі рэсурсаў для дзевяці з дванаццаці набораў малюнкаў. Гэта тлумачыць, чаму Xcode прадастаўляе параметры аўтазапаўнення для вас пры ўводзе гэтых тэгаў.

Пасля таго, як вы завяршылі прызначэнне тэгаўдля набору малюнкаў Blue Square, дадайце правільныя тэгі да набораў малюнкаў Green Hexagon і Red Circle, як паказана ніжэй.

Green Hexagon tags
Red Circle tags

Правільна настроеныя пазнакі рэсурсу па запыце, адкрыйце навігатар праекта злева. Адкрыйце ўкладку «Тэгі рэсурсу» уверсе і выберыце «Папярэдне усталяваны фільтр» уверсе.

Tags Overview

Цяпер вы можаце ўбачыць, наколькі вялікі кожны пакет актываў і якія рэсурсы знаходзяцца ў кожным з іх. Фільтр «Усе» паказвае вам кожны з рэсурсаў па патрабаванні. Фільтр Prefetched паказвае рэсурсы па патрабаванні для кожнай катэгорыі і дазваляе перамясціць рэсурсы з адной катэгорыі ў іншую:

  • Зыходныя тэгі ўстаноўкі
  • Папярэдне запраграмаваны заказ тэга
  • Спампаваць толькі па запыце

Гэтыя раздзелы адлюстроўваюць тры катэгорыі пакетаў актываў, якія я выклаў раней. Важна адзначыць, што пакеты актываў, якія вы размясцілі ў раздзеле «Папярэдне загружаны тэг», пачнуць загружацца ў тым парадку, у якім яны з'явяцца.

З тэгамі, прызначанымі кожнаму набору малюнкаў, прыйшоў час пачаць доступ да рэсурсаў у праекце.

3. Доступ да рэсурсаў па запыце

Доступ да пакетаў актываў, размешчаных на серверах App Store, апрацоўваецца новым класам NSBundleResourceRequest. Асобнік гэтага класа ствараецца з дапамогай набору тэгаў, які вы хочаце выкарыстаць. Ён паведамляе сістэме аб вашым выкарыстанні адпаведных пакетаў актываў. Вызваленне гэтых аб'ектаў NSBundleResourceRequest з'яўляецца найлепшым і простым спосабам паведаміць аперацыйнай сістэме, калі вы больш не карыстаецеся якой-небудзь канкрэтны пакет актываў. Гэта важна, каб вы не перавышалі ліміт 2 ГБ для рэсурсаў, якія выкарыстоўваюцца.

У сваім праекце адкрыйце DetailViewController.swift і дадайце наступнае ўласцівасць у клас DetailViewController.

Затым заменіце метад viewDidAppear(_:) наступным чынам:

З дапамогай гэтага кода вы спачатку инициализируете ўласцівасць request з дапамогай набору, які ўключае адзін тэг. Набор тэгаў, якія вы далі гэнаму инициализатору, змяшчае радковыя значэння. У гэтым выпадку мы выкарыстоўваем ўласцівасць tagToLoad, якое задаецца папярэднімі кантролерамі уяўленняў у дадатку.

Затым мы пачынаем загрузку пакетаў актываў для названых тэгаў, выклікаючы beginAccessingResourcesWithCompletionHandler(_:). Гэты метад будзе звяртацца да ўсіх рэсурсаў з названымі тэгамі і аўтаматычна загрузіць іх пры неабходнасці. Пасля доступу да рэсурсаў такім чынам уся ваш іншы код для загрузкі гэтых рэсурсаў у ваша прыкладанне застаецца ранейшым.

Звярніце ўвагу: калі вы хочаце атрымаць доступ толькі да рэсурсаў, якія ўжо былі загружаныя, без загрузкі змесціва, вы можаце выкарыстоўваць метад conditionallyBeginAccessingResourcesWithCompletionHandler(_:).

Як паказана ў прыведзеным вышэй кодзе, важна памятаць пра гэта апрацоўшчыку завяршэння, так як ён выклікаецца ў фонавым струмені. Гэта азначае, што любыя абнаўлення карыстацкага інтэрфейсу, якія вы хочаце выканаць пасля завяршэння, павінны быць выкананы ў асноўным струмені.

Стварыце і запусціце прыкладанне зноў і выберыце колер або форму для прагляду ў дадатку. Вы павінны ўбачыць усе тры каляровых малюнка для пэўнай фігуры або ўсіх чатырох фігур для пэўнага колеру.

All Resources Shown

Так проста выкарыстоўваць рэсурсы па патрабаванні. Цяпер вы паспяхова рэалізавалі рэсурсы па патрабаванні ў дадатку.

Важнай функцыяй адладкі, даступнай у Xcode 7, з'яўляецца магчымасць бачыць, якія пакеты актываў вы загрузілі і якія з іх выкарыстоўваюцца. Каб бачыць гэта, перайдзіце да Debug Navigator з запушчаным прыкладаннем і выберыце «Дыск». Вы ўбачыце экран, падобны паказаным ніжэй. On Demand Resources - гэта раздзел, які нас цікавіць.

On Demand Resources Debugging

У якасці прыкладу давайце цяпер зменім прыярытэт загрузкі, каб адразу загрузіць некаторыя рэсурсы. У той жа час мы зменім прыярытэты захавання пакетаў актываў, каб пакеты актываў Hexagon і Star былі ачышчаны да пакетаў актываў Circle і Square. Абновіце рэалізацыю метаду viewDidAppear(_:), як паказана ніжэй.

Пасля ініцыялізацыі запыту мы ўсталёўваем ўласцівасць loadPriority NSBundleResourceRequestLoadingPriorityUrgent. У якасці альтэрнатывы вы можаце прысвоіць гэта значэнне паміж 0.0 і 1.0, каб дыктаваць прыярытэт загрузкі ў вашым дадатку.

Перавага выкарыстання гэтай канстанты складаецца ў тым, што яна аўтаматычна дае запыце самы высокі прыярытэт загрузкі, але таксама ігнаруе бягучую актыўнасць ЦП. У некаторых сітуацыях, калі працэсар працэсара выкарыстоўваецца ў значнай ступені, загрузка пакета актываў можа быць адкладзеная.

Затым мы ўсталёўваем прыярытэт захавання для ўсіх чатырох тэгаў формы. Гэта робіцца шляхам выкліку метаду setPreservationPriority(_:forTags:) асноўнага пакета прыкладання. Мы цяпер гарантавалі, што калі сістэма рэсурсаў па патрабаванні павінна ачысціць некаторыя актывы ад нашага прыкладання, пакеты актываў Hexagon і Star будуць выдалены першымі.

4. Лепшыя практыкі

Зараз, калі вы ведаеце, як рэалізаваць рэсурсы па патрабаванні ў дадатку iOS, я хачу коратка расказаць вам аб некалькіх лепшых практыках, якія варта ўлічваць.

Захоўвайце як мага менш індывідуальных тэгаў

У дадатак да скарачэння часу загрузкі і павышэнню даступнасці рэсурсаў, максімальна памяншаючы колькасць актываў, прадухіляе празмерную ачыстку сістэмы. Гэта калі сістэма рэсурсаў па патрабаванні павінна вызваляць пэўную колькасць месца і ў выніку вызваляе значна больш, чым неабходна.

Напрыклад, калі сістэме неабходна вызваліць 50 МБ прасторы і, грунтуючыся на згаданых вышэй умовах, вырашылі, што 400-мегабайтны пакет актываў з вашага прыкладання быў найбольш прыдатным для выдалення, сістэма будзе празмерна чысціць 350 МБ. Гэта азначае, што калі ваша прыкладанне страціла больш дадзеных, чым трэба, спатрэбіцца зноў загрузіць усе рэсурсы, звязаныя з гэтым тэгам. Рэкамендуемы памер для асобных тэгаў складае прыблізна 64 МБ.

Загрузіць тэгі ў Advance

Калі ваша прыкладанне мае вельмі прадказальнае ўзаемадзеянне з карыстальнікам, то лепш пачаць загрузку рэсурсаў да таго, як яны сапраўды спатрэбяцца. Гэта павінна палепшыць карыстацкі досвед, так як ім не трэба глядзець на экран загрузкі, пакуль ваша прыкладанне загружае кантэнт.

Гульні - агульны прыклад. Калі гулец толькі што завяршыў ўзровень 5, то нядрэнна пачаць загрузку ўзроўню 7, пакуль яна гуляе на ўзроўні 6.

Правільна спыніце доступ да рэсурсаў

Калі вы скончыце выкарыстоўваць пэўны пакет актываў, пераканайцеся, што ваш NSBundleResourceRequest аб'ект вызвалены ці вы выклікаеце на ім метад endAccessingResources.

Гэта не толькі прадухіліць трапленне вашага прыкладання на абмежаванне 2 ГБ для выкарыстання рэсурсаў, але таксама дапаможа сістэме рэсурсаў па патрабаванні даведацца, калі ваша прыкладанне выкарыстоўвае гэтыя рэсурсы, а гэта значыць, што ён можа лепш вырашыць, што рабіць, калі больш месца неабходна.

5. Рэсурсы па запыце для tvOS

Нядаўна я пісаў пра развіццё tvOS, і ў гэтым уроку я згадаў пра абмежаванні прыкладанняў tvOS. Максімальны памер для пакета прыкладанняў - 200 МБ, таму настойліва рэкамендуецца выкарыстоўваць рэсурсы па патрабаванню ў вашых прыкладаннях tvOS, калі гэта магчыма.

З-за падабенства tvOS і iOS API і абмежаванні захоўвання (за выключэннем пакета прыкладанняў) для рэсурсаў па патрабаванні аднолькавыя. Аднак пры працы з рэсурсамі па патрабаванні на tvOS важна таксама памятаць, што ўсе актывы, такія як малюнкі, маюць адну версію маштабу 1x, таму памер вашых пакетаў актываў, як паказана ў Xcode, не будзе змяншацца з-за накладання прыкладанняў,

Высновы

Рэсурсы па патрабаванню ў iOS 9 і tvOS - выдатны спосаб паменшыць памер вашага прыкладання і забяспечыць лепшы карыстацкі інтэрфейс для карыстальнікаў, якія загружаюць і якія выкарыстоўваюць ваша прыкладанне. Хоць яго вельмі лёгка рэалізаваць і наладзіць, ёсць нямала дэталяў, якія вы павінны мець на ўвазе, каб сістэма рэсурсаў па патрабаванні працавала бездакорна без празмернага часу загрузкі і непатрэбнай ачысткідадзеных.

Як заўсёды, не забудзьцеся пакінуць свае каментары і водгукі ў каментарах ніжэй.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.