19. Jan 2021iOS

Optimalizácia (nielen) projektov na platforme Apple Silicon

Tento návod sa venuje nielen optimalizácii Xcode projektov a nastavení jeho jednotlivých parametrov, ale aj problémom, s ktorými sa bežne môžete stretnúť pri práci s najnovšími notebookmi s čipom Apple M1.

Pavol KmeťSenior iOS developer

Náhle zobrazenie šetriča obrazovky

Ide o zaujímavú chybu, ktorá sa vyskytuje vo väčšej miere hlavne na zariadeniach s týmto procesorom. Problém je v tom, že pri bežnej práci sa po určitom čase náhle zobrazí šetrič obrazovky a nedá sa vypnúť.

Jedno z riešení je zavrieť a znova otvoriť notebook, čo tento šetrič obrazovky vypne. Avšak na Apple Developer Forums vzniklo vlákno, ktoré používateľom radí vypnúť zobrazenie menu rýchleho prepínania medzi používateľmi v nastaveniach systému.

Zobrazenie menu rýchleho prepínania medzi používateľmi nájdeme v nastaveniach: 
System Preferences ➡️ Users & Groups ➡️ Login Options

Menu rýchleho prepínania medzi užívateľmi
Menu rýchleho prepínania medzi používateľmi

Nefungujúce CocoaPods v termináli

CocoaPods podporujú Apple Silicon od verzie 1.10.0+, ale v prípade, že aj napriek tomu narazíte na problém máte 2 možnosti riešenia:

1. Doinštalovať podporný balíček Ruby-FFI. Stačí, ak zadáte do terminálnu príkaz:

sudo gem install ffi

2. Spustiť terminál pod Rosettou. Stačí nad terminálom zobraziť info, zakliknúť otvorenie pod Rosettou a reštartovať terminál.

Spustenie terminálu pod Rossetou
Spustenie terminálu pod Rossetou

Projekt sa nedá spustiť na simulátore

Simulátor po novom beží na macOS Big Sur na arm64, to znamená, že aj projekt sa kompiluje pomocou nového setu inštrukcií a väčšina veľkých knižníc, hlavne od Googlu, ešte nie je optimalizovaná.

Jedným z dočasných riešení, ako takýto projekt spustiť, je nepodporovať kompiláciu projektu na simulátore do architektúry typu arm64. Pre vypnutie je potrebné nastaviť excludovanie tejto architektúry v nastaveniach projektu pre simulátor.

Excludovanie architektúry arm64 v nastaveniach projektu pre simulátor
Excludovanie architektúry arm64 v nastaveniach projektu pre simulátor

V prípade, že projekt obsahuje aj externé knižnice, ktoré sú do projektu zahrnuté cez manažéra balíčkových závislostí CocoaPods, je potrebné nastaviť takéto excludovanie architektúry aj pre Pods.xcproject. To môžeme urobiť veľmi jednoducho, stačí do súboru Podfile umiestniť script, ktorý nastaví požadované excludovanie tejto architektúry pre každý pod.
 

post_install do |installer_representation|
  	installer_representation.pods_project.targets.each do |target|
    	target.build_configurations.eachdo|config|
    		config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64'
		end
	end
end

V simulátore sa nedá plynule scrollovať
 

V prípade, že po pustení kurzora pri scrolle nad UIScrollView okamžite zastane scroll, tak je problém v novej architektúre simulátora. O tomto probléme sa bavia iOS vývojári aj na Apple Developer Forums a spôsobuje to exludovanie architektúry arm64 v projekte. Pre odstránenie problému je potrebné rovnako, ako pri probléme s terminálom, spustiť simulátor pod Rosettou.
 

Aplikáciu simulátor nájdeme v zložke: Xcode ➡️ Show Package Contents ➡️ Contents ➡️ Developer ➡️ Applications ➡️ Simulator

Projekt sa nedá spustiť, pretože zobrazuje chybu ‘FIRAnalyticsConnector' for architecture arm64’

O probléme sa vie a je to spôsobené nekorektným linkovaním knižnice cez manažéra balíčkových závislostí CocoaPods. Tento problém by mal byť odstránený vo verzii 1.10.1, ktorá už je dostupná na stiahnutie.

V súčasnosti vývojári vo Firebase tíme pracujú na optimalizovaní knižníc pre architektúru arm64 . Aktuálne je možné vynútiť u niektorých knižníc Firebase, ako napríklad Firebase/Crashlytics optimalizovanú verziu pre architektúru arm64 a to špecifikovaním verzie takéhoto podu v Podfile vo formáte verzia-M1.

pod 'Firebase/Analytics', '7.4-M1'
pod 'Firebase/Core', '7.4-M1'
pod 'Firebase/Crashlytis', '7.4-M1'
pod 'Firebase/Performance', '7.4-M1'

Všeobecný stav tohto problému je možné sledovať na nasledovnej issue na Githube.

Hľadáš ďalšie užitočné tipy? Vybrali sme pre teba 6 skratiek, ktoré ocení každý iOS developer!
 

Pavol KmeťSenior iOS developer