ساخت داشبورد بازار سهام در زمان واقعی برای iOS نیاز به درک جامد از شبکه، پردازش داده ها و رندر نمودار دارد.این راهنما کل جریان کار را پوشش می دهد - از تنظیم پروژه و ادغام API برای به روز رسانی های زنده و تنظیم عملکرد - بنابراین شما می توانید یک برنامه پاسخگو، کیفیت تولید ارائه دهید.

پیش بینی ها و ابزار سازی

قبل از شروع، اطمینان حاصل کنید که محیط شما آماده است:

  • [در این میان] با آخرین نسخه از Xcode نصب شده است.
  • [FLT:] زبان مورد استفاده در این پیاده سازی.
  • - یک کتابخانه شبکه بالا برای ساده سازی درخواست های HTTP و پاسخ. ادغام از طریق مدیر بسته Swift (SPM) یا CocoaPods.
  • ] - کتابخانه نمودار شناخته شده iOS (یک پورت MPAndroidChart) استفاده از SPM: ]
  • [[ویرایش] [۱] [۱] [۱] [۱] [۱] [۱]] [۱] [۱] [۱] [۱] [۱] [۱]] [۱] [۱] [۱] [۱]] [۱] [۱] [۱۰] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۳] [۳] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۲]
  • CocoaPods یا SPM - مدیران وابستگی به SPM در Xcode ساخته شده و توصیه می شود.

راه اندازی پروژه و وابستگی

یک پروژه جدید Xcode با استفاده از [FLT1] [FLT1] را ایجاد کنید که iOS 16+ را هدف قرار می دهد. File >؛ Add Packages ، اضافه کردن Alamofire و نمودارها.

هنگامی که اضافه شد، پیکربندی خود را (FLT:0)info.plist برای اجازه دسترسی به شبکه (HTTP در صورت نیاز) با یک استثناء امنیت حمل و نقل App برای دامنه API خود، یا بهتر، استفاده از نقاط انتهایی HTTPS.

طراحی مدل های داده

(در این میان، در این زمینه به صورت زیر به صورت زیر به آن اشاره کنید: ⁇ ) و در این صورت، اکثر برنامه ها به صورت زیر به صورت زیر به صورت زیر به صورت زیر به صورت زیر به صورت زیر به کار می روند و به صورت زیر به صورت زیر به صورت زیر می روند.

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

یک ظرف را تعریف کنید که دارای آرایه ای از این نقاط است، به علاوه متادی مانند نماد و آخرین زمان تازه سازی استفاده کنید. برای مطابقت با مار case از API به شتر کیس در سوئیفت.

لایه شبکه با قابلیت های Real-Time

یک کلاس [FLT13] ایجاد کنید که از Alamofire برای به روز رسانی در زمان واقعی استفاده می کند، شما دو رویکرد دارید:

  • فشار - به طور دوره ای درخواست های HTTP GET (هر 5 تا 30 ثانیه بسته به محدودیت های نرخ API) ارسال کنید.
  • WebSocket - حفظ یک اتصال مداوم برای دریافت به روز رسانی فشار (حمایت شده توسط Finnhub، IEX، و غیره).

پیاده سازی یک روش که ناشر (FLT:14) را باز می گرداند یا از الگوی برای به دست آوردن آخرین داده ها استفاده می کند، برای نظرسنجی، برنامه ریزی یک را در مدل دید خود برای WebSockets، استفاده از اپل و یا یک کتابخانه مانند ستاره ها (هر چند Alamofire 5 نیز دارای پشتیبانی تجربی وب است).

مثالی از (FLT 18) :

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
}

پارس کردن و ردیابی داده ها

مدل دید شما باید پاسخ را اداره کند، آن را به نمودار ورودی ها و حفظ یک بافر از نقاط اخیر استفاده از خواص به طوری که SwiftUI یا UIKit دیدگاه می تواند به تغییرات واکنش نشان دهد، به عنوان مثال، حفظ یک آرایه از اشیاء (از کتابخانه نمودار) که نشان دهنده آخرین نقاط داده N است.

هنگامی که داده های جدید وارد می شوند، ورودی و برش قدیمی را برای نگه داشتن نمای نمودار محدود کنید، این مانع نفخ حافظه می شود و نمودار قابل خواندن را نگه می دارد.

ساخت نمودار با کتابخانه چارت

در حال حرکت به سمت کتابخانه ی چارت ها در صفحه ی داستان یا برنامه ریزی آن هستید و محدودیت های آن را تنظیم کرده و ظاهر آن را پیکربندی کنید:

  • استفاده از با استفاده از
  • برای استفاده از برچسب های قیمت، گزینه ی Save را انتخاب کنید و به چند نکته ی مهم توجه کنید.
  • [در این میان] برای خطوط صاف تر (PLT 26)
  • سفارشی سازی قالب های محور (FLT 27) برای فرمت x-axis (زمان) و y-axis (قیمت)

مثال:

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

برای به روز رسانی های زمان واقعی، شما تمام داده های تنظیم شده در هر تیک را تنظیم نمی کنید، ورود جدید را اضافه کنید و تماس بگیرید (FLT 29) برای تازه کردن دیدگاه به طور فزاینده ای.

استراتژی های به روز رسانی زمان واقعی

پردازش با Timer

از مدل دید خود استفاده کنید.در هنگام ناپدید شدن دید، از محدودیت های نرخ API آگاه باشید – کراوات های آزاد اغلب اجازه می دهند فقط 5 تا 10 درخواست در دقیقه استفاده کنند.

اتصال WebSocket

اگر API شما از WebSockets پشتیبانی می کند، زمانی که مشاهده ظاهر می شود و تماس می گیرد (FLT 31) در یک حلقه برای انتقال داده ها، پارس هر پیام ورودی را به عنوان JSON و به روز رسانی نمودار استفاده از : 32:3)

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 تاخیر و بارگذاری شبکه را کاهش می دهد، اما نیاز به برقراری ارتباط مجدد و پیگیری دارد.

UI چیدمان و Responsiveness

داشبورد شما باید شامل:

  • (در این میان، در یک باره یا در یک باره، به صورت زیر به صورت زیر به صورت زیر به صورت زیر به صورت زیر استفاده می شود.
  • در این میان، یک برچسب قیمت در حال حاضر [FLT 1] که به روز رسانی با انیمیشن (به عنوان مثال، فلش سبز / قرمز برای افزایش قیمت / کاهش قیمت).
  • [در این میان] [در این میان]، [[[۱]] [۱]] [۱] [۱] [۱] [۱] [۱]] [۱] [۱۰] [۱] [۱] [۱] [۱] [۱۰] [۱] [۱] [۱] [۱] [۱] [۱] [۳] [۳] [۱] [۱] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۱] [۱] [۳] [۳] [۱] [۳] [۳] [۳] [۳] [۱] [۱] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳]
  • معیارهای اضافی: درصد تغییر روزانه، حجم بالا / پایین.
  • [[۱] [۱] [۱۰] [۱] [۱] [۱] [۱]] [[۱]]] [[۳]] [۱]] [۱]] [۱] [۱] [۱]] [۱]] [۱] [۱] [۱]] [۲] [۲] [۲]] [۲] [۲] [۲] [۲] [۳] [۳] [۳] [۳] [۲] [۲] [۲] [۲] [۲] [۲]] [۲] [۲] [۲]] [۲]] [۲] [۲] [۲] [۲]]] [۲]]]]] [۲] [۲] [۲] [۲] [۲] [۲] [۲]] [۲] [۲] [۲] [۲] [۲]] [۲] [۲] [۲] [۲] [۲] [۲] [۲] [۱] [۲] [۱] [۲] [۲] [۲] [۲] [۲] [۲]]]] [۲] [۲]]] [۲] [۲

از SwiftUI برای یک طرح یکپارچه یا UIKit با Auto چیدمان استفاده کنید.اطمینان حاصل کنید که کار سنگین (پاریس، ساخت و ساز داده نمودار) از موضوعات اصلی خارج می شود. به روز رسانی های UI Dispatch برای (FLT:34).

خطا و انعطاف پذیری

شکست شبکه اجتناب ناپذیر است.اجرا دوباره منطق با بازگشت به طور نمایی برای درخواست های HTTP ( درخواست ارسال کننده درخواست آتش نشانی برای WebSockets، گوش دادن به کدهای نزدیک و تلاش پس از یک تاخیر.

از استفاده کنید تا با استفاده از خطاهایی که به طور ماهرانه ای وارد می شوند، خطایی را به سرویسی از راه دور مانند Crashlytics تنها در تولید انجام دهید.

بهینه سازی عملکرد

یک نمودار زمان واقعی چندین بار در دقیقه به روز می کند تا UI را صاف نگه دارد:

  • تعداد اطلاعات را به یک پنجره ثابت محدود کنید (برای مثال ۲۰۰ ورودی).
  • در این میان، از عناصر غیر ضروری ( استفاده می شود.
  • استفاده از در UIKit یا ترجیح دادن سوئیفت (FLT 39) برای ترکیب فلز مورد حمایت.
  • به روز رسانی Throttle: اگر پیام های WebSocket سریعتر از نرخ تجدید صفحه نمایش (60 هرتز)، چندین امتیاز به یک به روز رسانی نمودار.

تست داشبورد

تست های واحد را برای تجزیه و تحلیل داده ها و مدیر شبکه با استفاده از پاسخ های JSON مسخره بنویسید. یا برای شبیه سازی پاسخ های API.برای نمایش نمودار، تست های فوری با استفاده از می تواند پس از به روز رسانی تست رفتار زمان واقعی با تست های UI که زمان را تزریق داده ها از طریق یک سرور سفارشی.

نظرات مقدماتی

کلید API خود را به طور ایمن ذخیره کنید – هرگز آن را سخت نگیرید.از متغیرهای محیطی در طرح های Xcode یا یک استفاده کنید که در هنگام انتظار برای داده های تازه، آخرین داده های شناخته شده را نشان می دهد.

برای ارسال App Store، اطمینان حاصل کنید که برنامه شما تنظیمات تازه را رعایت می کند و از (FLT:0BGTaskScheduler استفاده می کند، اگر شما می خواهید به روز رسانی های دوره ای زمانی زمانی زمانی که برنامه برای پیش زمینه نیست، هر چند برای یک احساس واقعی، اتصالات WebSocket تنها در پیش زمینه کار می کنند.

نتیجه گیری

با ترکیب Alamofire برای درخواست های شبکه، کتابخانه نمودارها برای تجسم و یا نظرسنجی یا WebSockets برای به روز رسانی های زنده، شما می توانید یک داشبورد بازار سهام قوی در زمان واقعی برای iOS ایجاد کنید. تمرکز بر معماری تمیز، پردازش خطا و تنظیم عملکرد برای ارائه یک تجربه حرفه ای که کاربران به یاد داشته باشند برای احترام به محدودیت های API و ارائه بازخورد روشن زمانی که داده ها با تأخیر می توانند به تأخیر در مدیریت چند نماد، یا حتی نظارت بر روی آنها، گسترش دهند، و یا نظارت بر روی شاخص های فنی، حتی می تواند نظارت بر روی صفحه نمایش داده ها، نظارت بر روی جزئیات فنی نظارت بر روی آنها را بررسی کند.