tvOS: توسعه Apple TV با Focus Engine

نویسنده: IT Sectr منتشر شده: 2026-02-07 زمان مطالعه: 11 دقیقه

tvOS — سیستم عامل اپل برای Apple TV، اولین بار در سال ۲۰۱۵ همراه با Apple TV نسل چهارم منتشر شد. توسعه برنامه‌ها برای tvOS با Swift با استفاده از SwiftUI و TVMLKit انجام می‌شود. تفاوت اصلی با iOS کنترل فوکوس از طریق Siri Remote به جای لمس است. به گفته اپل، tvOS بر روی بیش از ۱۰۰ میلیون دستگاه فعال در سراسر جهان نصب شده است.

نکات کلیدی

  • tvOS — سیستم عامل اپل برای جعبه‌های ست‌تاپ تلویزیون بر روی هسته XNU با Focus Engine به جای لمس
  • Focus Engine — سیستم مدیریت فوکوس بین عناصر از طریق Siri Remote
  • SwiftUI و TVMLKit — دو رویکرد توسعه: بومی و قالب‌های JavaScript
  • Top Shelf — محتوای پویا در صفحه اصلی Apple TV
  • اندازه برنامه به شدت به ۴ گیگابایت محدود شده، توصیه می‌شود بیش از ۵۰۰ مگابایت نباشد

tvOS چیست؟

tvOS — سیستم عامل اپل برای جعبه‌های Apple TV، بر اساس همان هسته Darwin XNU مانند iOS. اولین بار در ۳۰ اکتبر ۲۰۱۵ با Apple TV نسل چهارم منتشر شد. tvOS جایگزین Apple TV Software قدیمی (مبتنی بر iOS، بدون App Store و SDK) شد. سیستم برای کار بر روی تلویزیون با وضوح تا 4K HDR (Dolby Vision) و صدای Dolby Atmos بهینه شده است.

به گفته اپل (WWDC 2025)، tvOS بر روی Apple TV HD (2015)، Apple TV 4K (2017, 2021, 2022) نصب شده و از طریق AirPlay در برخی مدل‌های Smart TV تعبیه شده است. Apple TV از تراشه‌های A8 (HD)، A10X Fusion (نسل اول 4K)، A12 Bionic (نسل دوم 4K) و A15 Bionic (نسل سوم 4K) استفاده می‌کند. همه مدل‌ها از tvOS 17 پشتیبانی می‌کنند. tvOS دوربین، میکروفون (به جز کنترل از راه دور)، صفحه لمسی یا GPS ندارد.

ویژگی کلیدی tvOS Focus Engine است که کنترل لمسی را با ناوبری فوکوس جایگزین می‌کند. کاربر با استفاده از Siri Remote انتخاب را بین عناصر UI جابجا می‌کند. توسعه‌دهندگان برنامه‌ها را به Swift/SwiftUI (بومی) یا JavaScript/TVML (برنامه‌های رسانه‌ای مانند Netflix, Hulu) می‌سازند.

تاریخچه نسخه‌های tvOS

tvOS 9 (2015) — اولین نسخه با SDK و App Store. tvOS 10 (2016) — ورود یکپارچه (SSO) برای اشتراک‌های کابلی. tvOS 11 (2017) — پشتیبانی از Amazon Prime Video و حالت خودکار. tvOS 12 (2018) — Dolby Atmos. tvOS 13 (2019) — حالت چند کاربره. tvOS 17 (2023) — FaceTime, VPN, پروفایل‌های صوتی از طریق HDMI.

نسخه tvOSسالنوآوری کلیدی
tvOS 92015App Store, SDK, Siri Remote
tvOS 102016ورود یکپارچه (SSO), Live Tune-In
tvOS 112017Amazon Prime, حالت خودکار
tvOS 122018Dolby Atmos, رمز عبور با iPhone
tvOS 132019چند کاربره, مرکز کنترل در تلویزیون
tvOS 172023FaceTime, VPN, پیدا کردن Siri Remote

معماری tvOS و تفاوت با iOS

معماری tvOS بر اساس همان پشته iOS است: هسته XNU، خدمات سیستمی Core Services، لایه Media و لایه کاربر Cocoa Touch. با این حال، تفاوت‌های قابل توجهی مرتبط با ویژگی‌های پلتفرم تلویزیون وجود دارد.

محدودیت‌های سخت‌افزاری

Apple TV 4K نسل سوم از A15 Bionic با ۶ هسته CPU (۲ عملکرد، ۴ کارایی) و GPU 5 هسته‌ای استفاده می‌کند. RAM — ۴ گیگابایت (حافظه SSD داخلی از ۶۴ گیگابایت). سیستم حافظه محلی دائمی به معنای کلاسیک ندارد: همه داده‌های برنامه ممکن است توسط tvOS در هنگام کمبود فضا حذف شوند (purgeable). توسعه‌دهنده باید از iCloud Key-Value Storage یا CloudKit برای حفظ وضعیت استفاده کند.

TVMLKit و TVJS

TVMLKit — چارچوب منحصر به فرد tvOS که امکان ایجاد رابط‌ها به JavaScript و TVML (زبان شبیه XML خاص اپل) را فراهم می‌کند. TVMLKit JSON/XML را از سرور بارگیری می‌کند و اجزای UI بومی را نمایش می‌دهد. این فناوری اصلی برای سرویس‌های پخش جریانی است: Netflix, Hulu, Amazon Prime Video از TVMLKit استفاده می‌کنند. TVJS — محیط JavaScript که در زمینه ایزوله اجرا می‌شود.

فقدان حافظه دائمی

tvOS به طور خودکار فضای دیسک را مدیریت می‌کند: هنگام کمبود فضا، سیستم ممکن است حافظه پنهان، منابع دانلود شده و حتی خود برنامه را حذف کند (با حفظ آیکون). هنگام باز شدن مجدد، برنامه باید وضعیت خود را بازیابی کند. iCloud NSUbiquitousKeyValueStore تنها حافظه دائمی تضمین شده برای تنظیمات است (تا ۱ مگابایت در هر برنامه).

swift
import Foundation

// // حفظ و بازیابی وضعیت در tvOS
final class StateManager {

    private let store = NSUbiquitousKeyValueStore.default
    private let coder = JSONEncoder()
    private let decoder = JSONDecoder()

    // در حال ذخیره پیشرفت تماشا
    func saveProgress<T: Codable>(_ value: T, for key: String) {
        if let data = try? coder.encode(value) {
            store.set(data, for: key)
            store.synchronize()
        }
    }

    // در حال بازیابی وضعیت پس از حذف حافظه پنهان
    func restoreProgress<T: Codable>(_ type: T.Type, for key: String) -> T? {
        guard let data = store.data(for: key) else { return nil }
        return try? decoder.decode(type, from: data)
    }

    // مدیریت اعلان تغییر در دستگاه دیگر
    init() {
        NotificationCenter.default.addObserver(
            self,
            selector: #selector(ubiquitousKeyValueStoreDidChange),
            name: NSUbiquitousKeyValueStore.didChangeExternallyNotification,
            object: store
        )
    }

    @objc
    private func ubiquitousKeyValueStoreDidChange(_ notification: Notification) {
        print("داده‌ها در دستگاه دیگر تغییر کرد")
    }
}

StateManager از NSUbiquitousKeyValueStore برای ذخیره وضعیت برنامه در tvOS استفاده می‌کند. از آنجا که حافظه محلی ممکن است توسط سیستم پاک شود، فقط iCloud ماندگاری داده را تضمین می‌کند. store.synchronize() بلافاصله داده‌ها را به سرور ارسال می‌کند، در حالی که didChangeExternallyNotification برنامه را از تغییرات دستگاه‌های دیگر کاربر مطلع می‌کند.

Focus Engine: ناوبری و فوکوس

Focus Engine — مکانیسم کلیدی tvOS که رویدادهای لمسی را با ناوبری فوکوس جایگزین می‌کند. کاربر با استفاده از Siri Remote (سطح لمسی یا دکمه‌ها) انتخاب را بین عناصر UI جابجا می‌کند. سیستم به طور خودکار عنصر فوکوس بعدی را بر اساس فاصله و جهت حرکت محاسبه می‌کند.

UIFocusEnvironment و سلسله مراتب فوکوس

هر عنصر UI که قادر به دریافت فوکوس است، پروتکل UIFocusEnvironment را پیاده‌سازی می‌کند. UIKit به طور خودکار ترتیب ناوبری را بر اساس هندسه عناصر تعیین می‌کند. توسعه‌دهنده می‌تواند فوکوس ترجیحی را از طریق preferredFocusEnvironments لغو کند، آرایه‌ای از focusEnvironment فرزند مشخص کند و حرکت را از طریق UIFocusHeading (up, down, left, right) کنترل کند. UIFocusGuide امکان تعیین مسیرهای سفارشی برای چیدمان‌های غیرمعمول را فراهم می‌کند.

UIFocusEffect و پارالاکس

tvOS به طور خودکار UIFocusEffect را به عنصر فوکوس شده اضافه می‌کند: سایه، برجسته‌سازی و اثر پارالاکس (جابجایی هنگام کج کردن کنترل). توسعه‌دهنده می‌تواند اثر را از طریق focusedValue غیرفعال کند یا از طریق UIFocusEffect.transform سفارشی کند. در SwiftUI، پارالاکس با اصلاح‌کننده .hoverEffect(.highlight) اضافه می‌شود.

swift
import SwiftUI

// // جزء tvOS با فوکوس سفارشی
struct MovieCardView: View {
    let movie: Movie
    @State private var isFocused = false
    @Environment(\.isFocused) var envFocused

    var body: some View {
        VStack(spacing: 8) {
            AsyncImage(url: movie.posterURL) { phase in
                if let image = phase.image {
                    image
                        .resizable()
                        .aspectRatio(contentMode: .fill)
                        .frame(width: 320, height: 180)
                        .cornerRadius(8)
                        .overlay(
                            RoundedRectangle(cornerRadius: 8)
                                .stroke(isFocused ? Color.blue : Color.clear, lineWidth: 3)
                        )
                        .scaleEffect(isFocused ? 1.08 : 1.0)
                }
            }

            Text(movie.title)
                .font(.caption)
                .lineLimit(2)
                .foregroundStyle(isFocused ? .white : .gray)
        }
        .onHover { hovering in
            withAnimation(.spring(response: 0.35)) {
                isFocused = hovering
            }
        }
        .onPlayPauseCommand {
            // مدیریت دکمه Play/Pause روی کنترل
            startPlayback()
        }
        .focusable()
        .focusEffect { phase in
            // اثر فوکوس سفارشی
            phase == .active ?
                AnyView(self.scaleEffect(1.08)) :
                AnyView(self.scaleEffect(1.0))
        }
    }

    private func startPlayback() {
        print("در حال پخش: \(movie.title)")
    }
}

// // صفحه اصلی با شبکه فیلم‌ها
struct MovieGridScreen: View {
    let movies: [Movie]

    var body: some View {
        ScrollView {
            LazyVGrid(columns: [GridItem(.adaptive(minimum: 320, maximum: 400))], spacing: 24) {
                ForEach(movies) { movie in
                    MovieCardView(movie: movie)
                }
            }
            .padding(60)
        }
        .focusSection() // گروه‌بندی برای ناوبری
    }
}

MovieCardView Focus Engine را در SwiftUI نشان می‌دهد: اصلاح‌کننده .focusable() عنصر را قابل فوکوس می‌کند، .onHover تغییرات وضعیت را ردیابی می‌کند، .focusEffect امکان انیمیشن فوکوس سفارشی را فراهم می‌کند. .onPlayPauseCommand فشار دکمه Play/Pause را در Siri Remote مدیریت می‌کند. focusSection یک شبکه را برای ناوبری چرخه‌ای گروه‌بندی می‌کند.

Siri Remote: حرکات و دکمه‌ها

Siri Remote نسل دوم (2021) دارای سطح لمسی، ۵ دکمه و میکروفون است. tvOS از حرکات پشتیبانی می‌کند: کشیدن (ناوبری)، ضربه زدن (انتخاب)، ضربه دوبل (مرکز کردن)، نیشگون-بزرگنمایی (تصاویر)، فشار طولانی (منوی زمینه). UIPress با انواع .select, .playPause, .menu, .upArrow, .downArrow, .leftArrow, .rightArrow — انواع فشار از پیش تعریف شده. میکروفون کنترل برای Siri و جستجوی صوتی استفاده می‌شود.

Top Shelf و صفحه برنامه‌ها

Top Shelf ناحیه‌ای در صفحه اصلی Apple TV است که محتوای پویای برنامه را هنگامی که در ردیف بالایی است نمایش می‌دهد. در tvOS 17، Top Shelf تا ۸ ویجت با پس‌زمینه‌های سفارشی و عناصر تعاملی پشتیبانی می‌کند. توسعه‌دهنده TVTopShelfProvider را برای ارائه محتوا پیاده‌سازی می‌کند.

سبک‌های Top Shelf

سه سبک Top Shelf در دسترس است: Sectioned — فهرست دسته‌بندی شده (سریال‌ها بر اساس ژانر)، Inset — عنصر مرکزی با توضیحات دقیق (فیلم توصیه‌شده)، Photo — شبکه تصاویر (آلبوم‌های عکس). سیستم Top Shelf را در پس‌زمینه از طریق BGTaskScheduler به‌روزرسانی می‌کند، مشابه watchOS. ارائه‌دهنده باید به سرعت محتوا را برگرداند — tvOS داده‌ها را به مدت ۲۴ ساعت ذخیره می‌کند.

صفحه برنامه‌ها

صفحه اصلی tvOS از یک ردیف Top Shelf و یک شبکه برنامه تشکیل شده است. کاربران می‌توانند آیکون‌ها را مرتب کنند و پوشه بسازند. tvOS به طور خودکار برنامه‌ها را از حافظه هنگام کمبود منابع تخلیه می‌کند، بنابراین توسعه‌دهنده باید UISceneDidDisconnectNotification را به درستی مدیریت کرده و وضعیت را هنگام راه‌اندازی مجدد بازیابی کند.

سبک Top Shelfقالبچه زمانی استفاده شود
Sectionedبخش‌هایی با عنوان و مواردسریال‌ها, پادکست‌ها, لیست‌های پخش
Insetیک مورد بزرگ با توضیحاتفیلم روز, اختصاصی
Photoشبکه تصاویر بدون عنوانآلبوم‌های عکس, گالری‌ها
Tabتب‌های قابل تعویضورزش بر اساس نوع, اخبار بر اساس موضوع

SwiftUI برای Apple TV

SwiftUI از tvOS 13 به طور کامل در tvOS پشتیبانی می‌شود. اپل SwiftUI را برای همه پروژه‌های جدید توصیه می‌کند. همان کد SwiftUI در iOS, iPadOS, macOS و tvOS با حداقل تطبیق برای Focus Engine کار می‌کند. SwiftUI برای tvOS اصلاح‌کننده‌های .focusable(), .focusSection(), .onPlayPauseCommand و .onExitCommand را فراهم می‌کند.

تطبیق با tvOS

هنگام انتقال برنامه iOS به tvOS، باید: TabView را با NavigationView با ناوبری فوکوس جایگزین کنید، اندازه قلم‌ها را افزایش دهید (حداقل ۳۰pt برای عنوان‌ها، ۲۲pt برای متن)، حاشیه اضافه کنید (حداقل ۴۰pt از لبه‌ها — منطقه امن در تلویزیون‌ها). tvOS از UIAlertController با فیلد متنی، UIWebView و MFMailComposeViewController پشتیبانی نمی‌کند.

جزء iOSمعادل tvOSیادداشت
UISliderUIProgressView + دکمه‌هاSlider پشتیبانی نمی‌شود
UIPickerViewجدول با فوکوسPicker با لیست جایگزین شد
UITextFieldUIAlertController (فقط خواندنی)ورود متن از طریق Siri
UIActionSheetUIAlertControllerپشتیبانی می‌شود
UIWebViewپشتیبانی نمی‌شوداز WKWebView استفاده کنید
MFMailComposeپشتیبانی نمی‌شودURL mailto: را باز کنید

توصیه‌های طراحی

HIG اپل برای tvOS: حداقل اندازه ناحیه لمسی ۶۰×۶۰ نقطه، متن قابل خواندن از فاصله ۳ متر (اندازه قلم برای بدنه کمتر از ۲۲pt نباشد)، تضاد متن ۴.۵:۱، پس‌زمینه تیره (پس‌زمینه روشن در تلویزیون‌های OLED بازتاب ایجاد می‌کند)، همه عناصر بدون حرکات پیچیده قابل دسترسی هستند. وضوح: Apple TV 4K خروجی ۳۸۴۰×۲۱۶۰ (4K) یا ۱۹۲۰×۱۰۸۰ (HD) در ۶۰ FPS. همه تصاویر باید @2x (برای 1080p) و @4x (برای 4K) باشند.

TVMLKit و برنامه‌های رسانه‌ای

TVMLKit — چارچوبی برای ایجاد برنامه‌های رسانه‌ای در tvOS با استفاده از فناوری‌های وب: JavaScript (TVJS) و TVML (XML خاص اپل). برنامه‌های TVMLKit نیاز به کامپایل ندارند — رابط از سرور بارگیری می‌شود و به‌روزرسانی محتوا را بدون عبور از App Review امکان‌پذیر می‌کند. سرویس‌های پخش جریانی اصلی از آن برای چرخ‌دنده محتوا استفاده می‌کنند.

TVML: ساختار قالب‌ها

TVML قالب‌های آماده ارائه می‌دهد: CatalogTemplate (کاتالوگ با بخش‌ها), ProductTemplate (صفحه جزئیات محتوا), FormTemplate (فرم‌های ورود), LoadingTemplate (نشانگر بارگیری). قالب‌ها در XML توصیف و از طریق ویژگی‌های شبیه CSS سبک‌دهی می‌شوند. کد TVJS فشارها را مدیریت می‌کند و APIهای بومی را فراخوانی می‌کند.

xml
<!-- CatalogTemplate — کاتالوگ فیلم‌ها در TVML -->
<document>
  <catalogTemplate>
    <banner>
      <title>جدیدترین فیلم‌ها</title>
      <description>جدیدترین اکران‌ها و محتواهای اختصاصی</description>
    </banner>
    <section>
      <header>
        <title>محبوب‌ترین‌ها</title>
      </header>
      <items>
        <lockup>
          <img src="https://cdn.example.com/movie1.jpg" width=300 height=450/>
          <title>اینترستلار</title>
        </lockup>
        <lockup>
          <img src="https://cdn.example.com/movie2.jpg" width=300 height=450/>
          <title>ناچالو</title>
        </lockup>
      </items>
    </section>
  </catalogTemplate>
</document>

قالب TVML CatalogTemplate شامل بنری با عنوان و بخش‌هایی با عناصر lockup است. هر lockup یک کارت فیلم با تصویر و عنوان است. Focus Engine به طور خودکار ناوبری بین عناصر lockup را مدیریت می‌کند. با فشار، مدیریت‌کننده TVJS رویداد select را دریافت می‌کند و می‌تواند صفحه جزئیات را از طریق ProductTemplate نمایش دهد.

TVJS: مدیریت رویداد

TVJS یک محیط JavaScript جدا شده از برنامه اصلی است. کد TVJS هنگام بارگیری قالب TVML و مدیریت رویدادها فراخوانی می‌شود. TVJS از طریق Appliance و Player به APIهای بومی برای کنترل پخش ویدیو دسترسی دارد. اپل استفاده از TVMLKit را فقط برای برنامه‌های رسانه‌ای با به‌روزرسانی مکرر محتوا توصیه می‌کند. برای بازی‌ها و برنامه‌های تعاملی، SwiftUI ترجیح داده می‌شود.

انتشار برنامه‌های tvOS

انتشار برنامه tvOS نیاز به اشتراک Apple Developer Program (۹۹ دلار/سال) دارد. برنامه از طریق App Store Connect به عنوان یک محصول جداگانه یا بخشی از یک باینری جهانی (iOS + tvOS) بارگذاری می‌شود. App Review پایداری، انطباق با HIG و محدودیت اندازه ۴ گیگابایت را بررسی می‌کند.

ساخت و توزیع

Xcode یک هدف tvOS با پسوند .app (بسته .ipa) ایجاد می‌کند. معماری — arm64 (Apple TV از تراشه‌های ARM Apple Silicon استفاده می‌کند). tvOS از چارچوب‌های دارای i386 یا x86_64 پشتیبانی نمی‌کند. برنامه با گواهی Apple Development (تست) یا Apple Distribution (انتشار) امضا می‌شود. توزیع از طریق Volume Purchase Program برای مشتریان تجاری امکان‌پذیر است.

الزامات App Review

الزامات ویژه tvOS: همه عناصر رابط باید از طریق Focus Engine بدون استفاده از صفحه لمسی یا صفحه کلید قابل دسترسی باشند. برنامه‌هایی که نیاز به مجوز دارند باید از ورود یکپارچه (SSO) از طریق iTunes Store پشتیبانی کنند. محتوای تبلیغاتی نمی‌تواند بدون رضایت کاربر پخش را قطع کند. اندازه باینری بارگذاری شده نباید از ۴ گیگابایت تجاوز کند.

الزامتوضیحات
اندازه برنامهبیشتر از ۴ گیگابایت نباشد, ۵۰۰ مگابایت توصیه می‌شود
وضوح گرافیک@2x (1920×1080) و @4x (3840×2160) برای 4K
ناوبری فوکوسهمه عناصر از طریق Siri Remote قابل دسترسی
فرمت ویدیوH.264, HEVC, Dolby Vision (Profile 5)
صداDolby Atmos (E-AC-3 JOC) و استریو AAC

سوالات متداول

چه زبان‌هایی برای توسعه tvOS استفاده می‌شود؟

زبان اصلی Swift با چارچوب‌های SwiftUI و UIKit است. برای برنامه‌های رسانه‌ای، TVMLKit با JavaScript و قالب‌های TVML بارگیری شده از سرور استفاده می‌شود. Objective-C برای پروژه‌های قدیمی پشتیبانی می‌شود. اپل SwiftUI را برای همه پروژه‌های جدید tvOS توصیه می‌کند.

tvOS چه تفاوتی با iOS دارد؟

tvOS از Focus Engine به جای رویدادهای لمسی استفاده می‌کند، دوربین و میکروفون ندارد (به جز Siri Remote)، اندازه برنامه را به ۴ گیگابایت محدود می‌کند، از حافظه محلی دائمی (purgeable) پشتیبانی نمی‌کند و برای رندر به Metal نیاز دارد. همه برنامه‌ها فقط روی ARM64 کار می‌کنند.

Focus Engine در tvOS چگونه کار می‌کند؟

Focus Engine حرکت فوکوس بین عناصر UI را با استفاده از Siri Remote مدیریت می‌کند. توسعه‌دهنده فوکوس ترجیحی را از طریق preferredFocusEnvironments تنظیم می‌کند. UIFocusHeading (up, down, left, right) جهت را تعیین می‌کند. UIFocusEffect به طور خودکار پارالاکس و سایه را به عنصر فعال اضافه می‌کند.

چگونه برنامه‌های Apple TV را منتشر کنیم؟

انتشار نیاز به اشتراک Apple Developer Program (۹۹ دلار/سال) دارد. برنامه از طریق Xcode Organizer یا Transporter به App Store Connect بارگذاری می‌شود. بررسی: سازگاری با Focus Engine، پایداری، عدم وجود UIWebView و محدودیت اندازه ۴ گیگابایت.

آیا می‌توان از UIKit در tvOS استفاده کرد؟

بله، UIKit به طور کامل در tvOS پشتیبانی می‌شود: UIView, UIViewController, UICollectionView, UITableView. با این حال، UIKit برای Focus Engine تطبیق داده شده است: UIButton و UIControl رویدادها را از طریق فشار کنترل دریافت می‌کنند، نه لمس. SwiftUI به دلیل تطبیق خودکار فوکوس برای پروژه‌های جدید توصیه می‌شود.

خلاصه

  • tvOS — سیستم عامل اپل برای جعبه‌های ست‌تاپ تلویزیون بر روی هسته XNU با کنترل Focus Engine
  • Focus Engine کنترل لمسی را با حرکت فوکوس از طریق Siri Remote با اثرات پارالاکس جایگزین می‌کند
  • TVMLKit — چارچوب منحصر به فرد برای برنامه‌های رسانه‌ای با JavaScript با قالب‌های TVML سمت سرور
  • Top Shelf محتوای پویا را در صفحه اصلی از طریق TVTopShelfProvider ارائه می‌دهد
  • SwiftUI از tvOS 13 با اصلاح‌کننده‌های focusable, focusSection و onPlayPauseCommand کاملاً پشتیبانی می‌شود
  • محدودیت‌های tvOS: اندازه ۴ گیگابایت, حافظه purgeable, بدون دوربین, UIWebView یا MFMailCompose
  • انتشار نیاز به Apple Developer Program, گرافیک @2x/@4x, فرمت HEVC و Dolby Atmos دارد

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید