• SDK iOS pentru colectarea de telemetrie offline cu criptare, livrare în fundal și integrare într-o aplicație existentă

    11 ore în urmă
    • Buget dorit până la 900.28 USD
    • Se așteaptă un executant...
  • Situație inițială - există o aplicație iOS funcțională pentru angajații din teren (iOS 15-17, Swift, UIKit + câteva ecrane pe SwiftUI). Utilizatorul poate lucra fără conexiune, iar datele despre utilizare și procesul tehnic (evenimente, timpi, erori, parametri de sesiune) trebuie să fie garantate pentru a fi livrate către API-ul nostru atunci când apare conexiunea. În prezent, telemetria este trimisă direct prin URLSession și se pierde în mod regulat din cauza offline-ului, a uciderii aplicațiilor și a competiției de sarcini de fundal. Există, de asemenea, cerințe pentru stocarea datelor sensibile pe dispozitiv și controlul volumului.

    Sarcina este de a dezvolta și implementa un SDK modular pentru iOS (cum ar fi Pachetul Swift) pentru colectarea și livrarea de încredere a telemetriei.

    Mediu tehnic și limitări - Swift 5.9+, Xcode 15+, iOS 15+. Este interzisă conectarea SDK-urilor analitice grele (Firebase/Amplitude etc.). Nu puteți colecta identificatori de publicitate și nu puteți urmări utilizatorul. Datele trebuie stocate local pentru un timp și un volum limitat. Partea de server este deja acolo - REST endpoint /v1/telemetry/batch acceptă gzip JSON, autorizare printr-un token de acces existent din aplicație (vom furniza un protocol pentru primirea jetonului). Formatul evenimentului este fix - id (UUID), ts (ISO8601), tip (șir), sarcină utilă (dicționar), sessionId.

    Ce să fac -
    1) Proiectați o arhitectură SDK - un API public pentru înregistrarea evenimentelor din aplicație, coadă internă, stocare, livrare, retray.
    2) Stocare locală în coadă - selectați și implementați (Core Data sau SQLite/GRDB fără servicii externe). Cerințe: atomicitate, rezistență la crash, capacitate de eșantionare în loturi, deduplicare prin id.
    3) Criptare pe dispozitiv - stocați încărcătura utilă în formă criptată (AES-GCM), stocați cheia în Keychain, suportați rotația cheilor fără a pierde coada.
    4) Livrare - trimiterea loturilor cu gzip, limitând dimensiunea lotului (de exemplu, 256 KB) și dimensiunea totală a cozii de așteptare (de exemplu, 20 MB) cu o politică de drop cea mai veche. Retray cu întârziere exponențială, jitter și luând în considerare codurile de răspuns ale serverului (429/5xx). Respectați modul de putere redusă.
    5) Scripturi de fundal - funcționează corect atunci când intri în fundal și omorâți aplicația. Utilizați BGTaskScheduler pentru livrare periodică, precum și pentru trimiterea atunci când rețeaua devine disponibilă. Nu încălcați restricțiile iOS privind activitatea de fundal.
    6) Monitorizarea rețelei - Network.framework (NWPathMonitor) pentru declanșarea livrării atunci când conexiunea este restabilită.
    7) Integrare în aplicație - înlocuiți trimiterea directă curentă cu SDK-ul la 2-3 puncte de înregistrare (de exemplu, erori, evenimente de navigare, cronometraje ale sistemului). Furnizați apeluri sigure pentru fire din diferite fire.
    8) Testare - acoperiți părțile cheie cu teste unitare (codare, criptare, formare lot, politici de retray). Adăugați teste minime de integrare la serverul simulat (URLProtocol) și testarea scripturilor offline-online.

    Rezultatul specific este un depozit cu Pachetul Swift (surse, teste), un exemplu de utilizare și instrucțiuni de integrare într-o aplicație existentă, plus MR/PR cu conectarea pachetului și înlocuirea apelurilor de trimitere vechi.

    Criterii de acceptare măsurabile -
    - Când Modul Avion este activat, evenimentele sunt scrise în coadă și nu se pierd după repornirea aplicației; după ce Modul Avion este dezactivat, toate evenimentele acumulate sunt livrate la punctul final în maximum 15 minute când aplicația este utilizată activ.
    - Coada este limitată ca dimensiune la 20 MB - dacă este depășită, cele mai vechi evenimente sunt șterse, aplicația nu se blochează și nu se blochează.
    - Sarcina utilă pe disc nu este stocată în text clar - verificare prin inspecția fișierelor container (șirurile din JSON nu sunt citite ca text simplu).
    - SDK-ul nu utilizează servicii analitice interzise de la terți și nu solicită permisiuni inutile.
    - Livrarea se efectuează în loturi cu gzip, procesele corecte 429 și 5xx (retray), 4xx, cu excepția cazului 429, nu sunt retrasate.
    - Testele unitare sunt executate local în CI (test xcodebuild) și acoperă cel puțin 60% din codul modulului de livrare/codă de așteptare.

    În plus, puteți oferi optimizare a formatului (de exemplu, JSON/CBOR compact), dar formatul final al firului ar trebui să rămână JSON, așa cum este acum pe server.
Oferta ta

Încă nu ai trimis o ofertă pentru această comandă.
Apasă „Trimite o ofertă” pentru a o trimite.

Aveți nevoie de o sarcină similară?

Dacă acest proiect este apropiat de ceea ce aveți nevoie, puteți consulta servicii gata în categorie sau publica propria sarcină cu bugetul, termenul și cerințele necesare.

The project «SDK iOS pentru colectarea de telemetrie offline cu criptare, livrare în fundal și integrare într-o aplicație existentă» can be used as a reference for your own brief: what should be done, what result is needed and what budget to set.