Reaaliaikaisen iOS-osakemarkkinakojelautan rakentaminen vaatii vankkaa otetta verkottumisesta, tietojen käsittelystä ja kaavion renderoinnista. Tämä opas kattaa koko työnkulun projektin setup- ja API-integroinnista live-päivityksiin ja suorituskykyyn virittämällä.

Edeltävät opinnot ja Tooling

Ennen kuin aloitat, varmista, että ympäristösi on valmis:

  • macOS, jossa on Xcoden viimeisin versio asennettuna.
  • Swift 5.7+ .
  • Alamofire[ . ... korkean tason verkkokirjasto HTTP-pyyntöjen ja vastausten käsittelyn yksinkertaistamiseksi. Integroi Swift Package Manager (SPM) tai CocoaPods.
  • Kirjasto [ .
  • ]A osaketiedot API[ . . suosittuja vaihtoehtoja ovat Alfa Vantage[ (vapaa taso API-avaimella), ].IEX Cloud tai Finnhub. Jokainen tarjoaa reaaliaikaisia ja historiallisia päätetapahtumia.
  • CocoaPods tai SPM . SPM on rakennettu Xcode ja suositellaan.

Projektin asetukset ja riippuvuudet

Luo uusi Xcode-projekti App-mallilla iOS 16+:ssa. Tiedosto > Lisää paketit[, lisää Alamofire ja kaaviot. Alamofire-sivuston päähaarassa käytetään ja kaavioiden käyttöä . Tämä välttää manuaalisen latauksen ja pitää riippuvuutesi ajan tasalla.

Kun olet lisätty, määritä [Info.plist, jotta verkkoyhteys (HTTP tarvittaessa) on App Transport Security poikkeus oman API-verkkotunnuksen, tai parempi, käyttää HTTPS päätepisteitä.

Datamallien suunnittelu

Luo rakenne, joka heijastaa JSON-rakennetta, jonka palveluntarjoajasi on palauttanut. Useimmat API-ohjelmat palauttavat kohteita, joiden kentät ovat , , [, [], [[[]] ja [[[]]. Reaaliaikaisen kojelaudan osalta keskity viimeisimpiin hintoihin ja liikkuvan ikkunan historiallisia tietoja (esim. viimeiset 100 rastia).

struct StockDataPoint: Codable {
 let timestamp: TimeInterval
 let price: Double
 let volume: Int
}

Määrittele astia, jossa on joukko näitä pisteitä, plus metatiedot kuten symboli ja viimeinen päivitysaika. Käytä verrataksesi käärme koteloa API:stä kamelikakkuun Swiftissä.

Verkkotaso reaaliajassa kapasiteetilla

Luo luokka, jossa Alamofire-koodia käytetään tietojen noutamiseen. Reaaliaikapäivityksiä varten on kaksi lähestymistapaa:

  • Polling[] . ... ......................................................................................................................................................................................................................................
  • WebSocket[ . ... ylläpitää jatkuvaa yhteyttä saadakseen työntöpäivityksiä (jota Finnhub, IEX jne.).

Toteuta menetelmä, joka palauttaa kustantajan tai käyttää -mallia uusimman tiedon hakemiseen. Äänestysten yhteydessä on esitettävä [] kuvamalli. WebSockets-sovelluksessa käytetään Apple.s tai Starscreamin kaltaista kirjastoa (vaikka Alamofire 5:llä on myös kokeellinen WebSocket-tuki).

Esimerkki fetch-toiminto:

func fetchLatestPrice(for symbol: String) async throws -> StockDataPoint {
 let url = "https://api.example.com/quote?symbol=\(symbol)&apikey=\(apiKey)"
 let response = try await AF.request(url).serializingDecodable(StockDataPoint.self).value
 return response
}

Jäsennys- ja tallennustiedot

Näkymämallin tulisi käsitellä vastaus, kartoittaa se kartoittaa merkinnät ja ylläpitää puskuri viimeaikaiset kohdat. Käytä ominaisuuksia niin SwiftUI tai Uikit näkymät voivat reagoida muutoksiin. Esimerkiksi ylläpitää joukko objekteja (kaavioiden kirjastosta), jotka edustavat viimeisiä N-tietopisteitä.

Kun uusia tietoja saapuu, liitä merkintä ja leikata vanhoja pitää kaavion näkymä rajallinen. Tämä estää muistin turpoaa ja pitää kaavion luettavissa.

Rakennamme kaaviota kaaviokirjastolla

Vedä Charts-kirjastosta tarinataulullesi tai instantioi se ohjelmallisesti. Aseta sen rajoitteet ja määritä ulkonäkö:

  • Käytetään ] -rakenteita.
  • Ota käyttöön hintalappuja, mutta rajoita muutamaan viimeiseen kohtaan välttääksesi sotkua.
  • Aseta tasaisempiin riveihin.
  • Muokkaa kohteiden akselia ... x-akselin (aika) ja y-akselin (hinta) muotoilussa.

Esimerkki:

let entries = stockDataPoints.map { ChartDataEntry(x: $0.timestamp, y: $0.price) }
let dataSet = LineChartDataSet(entries: entries, label: "\(symbol) Price")
dataSet.drawCirclesEnabled = false
dataSet.lineWidth = 2
dataSet.setColor(.systemBlue)

let chartData = LineChartData(dataSet: dataSet)
lineChartView.data = chartData

Reaaliaikapäivityksiä varten voit palauttaa koko datan jokaisessa rastissa. Sen sijaan lisää uusi merkintä ja soita päivittääksesi näkymää asteittain.

Reaaliaikapäivitysstrategiat

Potku ajastimen kanssa

Käytä -mallia. Virheellinen se, kun näkymä katoaa. Huomioi API-nopeusrajat . Vapaat tasot sallivat usein vain 5...10 pyyntöä minuutissa. Käytä pidempiä väliaikoja (10.15 sekuntia) ja paljasta konfiguroitava virkistysnopeus.

WebSocket- yhteys

Jos API tukee WebSocketsia, luo yhteys, kun näkymä ilmestyy ja soita [] silmukkaan saadaksesi streamed dataa. Määrittele jokainen saapuva viesti JSONina ja päivitä kaavio. Esimerkkinä :

let task = session.webSocketTask(with: url)
task.resume()
func receive() {
 task.receive { result in
 switch result {
 case .success(let message):
 if case .string(let text) = message,
 let data = text.data(using: .utf8),
 let point = try? JSONDecoder().decode(StockDataPoint.self, from: data) {
 DispatchQueue.main.async { self.updateChart(with: point) }
 }
 self.receive()
 case .failure(let error):
 // reconnect logic
 }
 }
}

WebSockets vähentää latenssia ja verkkokuormaa, mutta vaatii käsittelyä uudelleenkytkeytyminen ja säilyvyys ping.

Käyttöliittymän asettelu ja resonanssi

Kojelautaan tulisi sisältyä:

  • hakupalkki tai poimintapalkki[, joka syöttää varastotunnuksen.
  • nykyinen hintamerkki[, joka päivittää animaatiolla (esim., flash green/red for price crease/development).
  • -rivikaavio, joka ottaa suurimman osan näyttötilasta.
  • Lisämittarit: päivittäinen muutosprosentti, suuri/pieni, tilavuus.
  • tilan osoitin, josta näkyy yhteyden tila (liitin / irrotettu / lastaus).

Käytä SwiftUI-järjestelmää ilmoittavaan ulkoasuon tai UIKit-järjestelmään Auto Layout-toiminnolla. Varmista, että raskas työ (parsing, kaaviotietojen rakenne) irtoaa päälangasta. Lähetä käyttöliittymäpäivitykset tuotteeseen .

Virheen käsittely ja selviytyminen

Verkkohäiriöt ovat väistämättömiä. Toteuta uudelleen logiikka eksponentiaalisella backoff-toiminnolla HTTP-pyyntöihin ([]Alamofire.S RequestRetrier[]). WebSockets-sovelluksessa kuuntelet lähikoodeja ja yrität uudelleenyhdistää viiveen jälkeen. Näytä käyttäjäystävällinen virhetunnus tai paikkakartta, kun tiedot ovat himmentyneet.

Käytä kanssa virheiden käsittelyyn hienovaraisesti. Lokivirheet etäpalveluun kuten Crashlytics vain tuotannossa.

Suorituskyvyn optimointi

Reaaliaikainen kaaviopäivitykset monta kertaa minuutissa. Jotta käyttöliittymä olisi sujuva:

  • Rajataan datapisteiden määrä kiinteään ikkunaan (esim. 200 tietuetta).
  • Poista piirustukset tarpeettomista elementeistä (, , ainoastaan kerrannaisista).
  • Käytä kerrostausta[ Uikitissa tai suosi mieluummin SwiftUI.s metallista tuettua säveltämistä varten.
  • Surffaa päivitykset: jos WebSocket-viestit saapuvat nopeammin kuin näytön virkistysnopeus (60 Hz), erä useita pisteitä yhdeksi kaaviopäivitykseksi.

Kojelautaa testataan

Kirjoita yksikkötestit datan jäsentämiseen ja verkkopäällikön kanssa käyttäen pilkkaa JSONin vastauksia. Käytä tai simuloidaksesi API-vastauksia. Kaaviokuvaa varten :lla voidaan todentaa oikea renderointi päivitysten jälkeen. Testaa reaaliaikaista käyttäytymistä UI-kokeilla, jotka ruiskuttavat aikaistettua pilkkaa tietoa mukautetun palvelimen kautta.

Käyttöönottoa koskevat näkökohdat

Säilytä API-näppäintä turvallisesti . Käytä ympäristömuuttujia Xcode-järjestelmissä tai , että. Harkitkaa paikallisen välimuistin (esim., Core Data) toteuttamista, joten kojelauta näyttää viimeisimmät tiedossa olevat tiedot välittömästi käynnistettäessä tuoreita tietoja.

App Store -sovelluksen toimittamisen yhteydessä varmista, että sovellus kunnioittaa tausta-app-päivitysasetuksia ja käyttää [BGTaskScheduler:tä, jos haluat ajoittaisia päivityksiä, kun sovellusta ei ole tulostettu, vaikkakin tosi reaaliaikaisen tuntuman vuoksi WebSocket-yhteydet toimivat vain etualalla.

Päätelmät

Yhdistämällä Alamofire verkkopyyntöihin, Charts-kirjasto visualisointia varten ja joko äänestysten tai WebSockets-versioiden live-päivityksiä varten voit rakentaa vankan reaaliaikaisen osakemarkkinoiden kojelauta iOS-järjestelmälle. Keskity puhtaaseen arkkitehtuuriin, hienostuneeseen virheiden käsittelyyn ja suorituskyvyn viritykseen, jotta käyttäjät voivat luottaa ammatilliseen kokemukseen. Muista noudattaa API-korkorajoja ja antaa selkeää palautetta, kun tiedot viivästyvät. Näillä perustuksilla voit laajentaa kojelaudan useita symboleja, teknisiä indikaattoreita tai jopa katselulistan hallintaa.