XCode nu suportă versiunea actuală de IOS. Ce este de făcut?

Tocmai ce-am făcut update la ultima versiune de IOS – 11.3 (15E216) și bineînțeles că versiunea mea de XCode – 9.2 (9C40b) nu mai îmi poate “vedea” telefonul pentru teste.Din ce motiv se întâmplă acest lucru?

Ori de câte ori este lansată o nouă versiune semnificativă de iOS, Apple lansează și o nouă versiune de XCode. La sfârșitul lunii martie 2018 a fost lansată versiunea 11.3 de IOS simultan cu XCode 9.3, prin urmare dacă sunt developer și îmi actualizez telefonul la ultima versiune de IOS, musai trebuie să actualizez și XCode-ul. Însă developer-ii nu-și actualizează XCode-ul imediat după apariția sa, acest lucru însemnând, de cele mai multe ori, upgrade de proiect.
Revenind, nouă versiune de XCode – 9.3 conține DeveloperDiskImage, un folder având numele versiunii, în cazul nostru – 11.3 (15E216), necesară pentru a rula proiectele pe cele mai recente versiuni de iOS. Prin urmare, pentru a rula o aplicație pe un IOS 11.3 ar trebui neapărat să actualizăm XCode-ul la 9.3.

Cum putem ieși din acest impas?
Momentan, țin XCode-ul la 9.2 fiind limitat de faptul că 9.3 îmi cere și upgrade la sistemul de operare, fiind necesar High Sierra. Soluția utilizată în aceste situații este folosirea unui disk DeveloperDiskImage de IOS 11.3 de la un XCode 9.3 pe care să-l importăm în Xcode-ul nostru 9.2. Practic, este un folder care va ști să “asculte” device-urile cu IOS 11.3 pe versiuni inferioare de XCode.

Această arhivă conține DeveloperDiskImage de IOS – 11.3 (15E216). Conținutul arhivei, folderul numit 11.3 (15E216) trebuie copiat în /Application/XCode/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/. Restart la XCode-ul nostru și acum putem rula aplicațiile noastre din XCode 9.2 în IOS 11.3

Share Button

Swift 3 – Xcode -View – Aspect Fit, Aspect Fill si Scale To Fit

Nu de putine ori atunci cand adaugam o poza (image) intr-un ImageView Controller avem probleme cu dimensionarea acesteia. In mod normal o poza este deformata pentru a intra in ImageView si nu se tine cont de ratio in acest caz. E cazul VIEW -> MODE -> SCALE TO FIT

 

Daca vreau sa imi pastrez original ratio pentru poza astfel incat ea sa se incadreze in ImageView Controller-ul meu, solutia este VIEW -> MODE -> ASPECT FIT. Poza este corect redimensionata pe dimensiunea controller-ului.

 

O alta varianta ar fi l VIEW -> MODE -> ASPECT FILL, caz in care poza este incadrata pe original ratio insa nu se mai respecta granita ImageView-ului, imaginea fiind incadrata corect pe dimensiunea ecranului.

 

Share Button

Xcode 8 – problema loguri

La rularea unei aplicații în XCode8 apar în consolă tot felul de loguri ciudate:

2016-09-28 10:18:45.945891 test[1106:54365] bundleid: com.test.test, enable_level: 0, persist_level: 0, propagate_with_activity: 0
2016-09-28 10:18:45.946484 test[1106:54365] subsystem: com.apple.siri, category: Intents, enable_level: 1, persist_level: 1, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0, enable_private_data: 0
2016-09-28 10:18:45.956716 test[1106:54704] subsystem: com.apple.UIKit, category: HIDEventFiltered, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0

Aceste loguri interne sunt o povară atunci când trebuie să urmăresc logurile mele interne.
Cum le dezactivez?

1- Xcode -> Product -> Scheme -> Edit Scheme

2- Adaug în Environment Variables set OS_ACTIVITY_MODE = disable


xcode

Share Button

IOS – colturi rotunjite si borduri la poza de profil

Fie un UIImageView care va “încarca” o imagine. În cazul meu, am folosit imageTAView pentru a încarca poză de profil pentru aplicația mea de Twitter.
@property (nonatomic,strong) UIImageView *imageTAView;

In .m definim următoarele:
self.imageTAView.layer.cornerRadius = self.imageTAView.frame.size.width / 2;
self.imageTAView.clipsToBounds = YES;

Pentru a transforma imaginea pătrată în formă circulară definim raza circulara a layer-ului ca fiind jumătate din lățimea layerului pătrat. clipsToBounds “pune” masca nou-creată peste layerul inițiat pătrat.

Aplicarea bordurii se realizează cu borderWidth, proprietate din clasa CALayer, după cum urmează:

self.imageTAView.layer.borderWidth = 3.0f;
self.imageTAView.layer.borderColor = [UIColor lightGrayColor].CGColor;

Share Button

Care este diferența între bounds și frame în IOS?

Cea mai elocventă explicație despre ce înseamnă bounds, center și frame în IOS este dată de Paul Hegarty în acest slide:

Diferenta bounds frame in IOS

De reținut este faptul că un CGRect din View se poate roti, prin urmare size și origins ale bounds-ului pot avea valori diferite față de origins și size ale frame-ului.

Share Button