Info.plist: এটি কী, বাধ্যতামূলক কী এবং লঞ্চ কনফিগারেশন

লেখক: IT Sectr প্রকাশিত: 2026-05-31 পড়ার সময়: 8 মিনিট

Info.plist হল iOS এবং macOS অ্যাপ্লিকেশনের জন্য একটি XML কনফিগারেশন ফাইল যা মেটাডেটা, অনুমতি এবং লঞ্চ সেটিংস ধারণ করে। এটি অ্যাপ্লিকেশন কোড আরম্ভের আগে সিস্টেম দ্বারা প্রক্রিয়া করা হয়। Apple Developer, 2025 অনুযায়ী, সঠিকভাবে কনফিগার করা Info.plist ছাড়া অ্যাপ্লিকেশনটি App Store পর্যালোচনা পাস করবে না। Info.plist বান্ডেল আইডেন্টিফায়ার, বিল্ড সংস্করণ, অনুরোধকৃত অনুমতি এবং সমর্থিত স্ক্রিন ওরিয়েন্টেশন সংজ্ঞায়িত করে।

মূল বিষয়

  • Info.plist হল plist ফরম্যাটে iOS/macOS অ্যাপ্লিকেশন কনফিগারেশন কী-র একটি XML অভিধান
  • Bundle identifier হল সই এবং পরিষেবার জন্য Apple ইকোসিস্টেমে একটি অনন্য অ্যাপ্লিকেশন শনাক্তকারী
  • গোপনীয়তা কী (NSCameraUsageDescription) ক্যামেরা, মাইক্রোফোন এবং জিওলোকেশনে অ্যাক্সেসের জন্য বাধ্যতামূলক
  • Custom URL schemes গভীর লিঙ্কের জন্য CFBundleURLTypes কী-র মাধ্যমে কনফিগার করা হয়
  • UIRequiredDeviceCapabilities App Store ইনস্টলেশনের জন্য ন্যূনতম ডিভাইস প্রয়োজনীয়তা নির্ধারণ করে

Info.plist কী

Info.plist হল XML ফরম্যাটে একটি ফাইল যার মূল উপাদান dict এবং প্রপার্টি লিস্ট হিসেবে কী-ভ্যালু জোড়া থাকে। এটি অ্যাপ্লিকেশন বান্ডেলের ভিতরে অবস্থিত এবং কোড নির্বাহের আগে প্রতিটি লঞ্চে সিস্টেম দ্বারা পড়া হয়। plist ফরম্যাট স্ট্রিং, সংখ্যা, অ্যারে, অভিধান, তারিখ এবং বুলিয়ান মান সমর্থন করে, যা জটিল কনফিগারেশন বর্ণনা করতে দেয়।

Apple অ্যাপ্লিকেশনের পরিচয়, ক্ষমতা এবং প্রয়োজনীয়তা সংজ্ঞায়িত করতে Info.plist ব্যবহার করে। কিছু কী পরিবর্তনের জন্য বান্ডেল পুনর্নির্মাণের প্রয়োজন হয়, কারণ সেগুলি মেটাডেটাকে প্রভাবিত করে যা App Store বিল্ড আপলোড করার সময় পরীক্ষা করে। উদাহরণস্বরূপ, প্রকাশের পরে CFBundleVersion বা CFBundleIdentifier পরিবর্তন করলে অ্যাপ আপডেট প্রক্রিয়া ভেঙে যেতে পারে, কারণ App Store Connect সংস্করণ শনাক্ত করতে এই মানগুলি ব্যবহার করে।

Xcode-এ প্রজেক্ট তৈরি করার সময় মৌলিক কীগুলি স্বয়ংক্রিয়ভাবে তৈরি হয়, কিন্তু অধিকাংশ সেটিংস অ্যাপ্লিকেশনের কার্যকারিতার বিকাশের সাথে ম্যানুয়ালি যোগ করা হয়। Xcode স্ট্যান্ডার্ড কী-র জন্য ড্রপডাউন তালিকা সহ একটি গ্রাফিকাল Info.plist সম্পাদক সরবরাহ করে, যা টাইপোর ঝুঁকি হ্রাস করে। তবে, Scene Manifest বা Background Modes-এর মতো জটিল কনফিগারেশনের জন্য সরাসরি মূল XML সম্পাদনা করার সুপারিশ করা হয়।

বাধ্যতামূলক Info.plist কী

কিছু Info.plist কী App Store-এ প্রকাশের জন্য বাধ্যতামূলক। এদের অনুপস্থিতি যাচাইকরণ পর্যায়ে বিল্ড প্রত্যাখ্যানের দিকে নিয়ে যায়। Apple Xcode Organizer বা Transporter-এর মাধ্যমে আর্কাইভ আপলোড করার সময় স্বয়ংক্রিয়ভাবে এই কীগুলি পরীক্ষা করে। ডেভেলপারকে পর্যালোচনার জন্য জমা দেওয়ার আগে নিশ্চিত করতে হবে যে সমস্ত বাধ্যতামূলক ক্ষেত্র সঠিকভাবে পূরণ করা হয়েছে।

বান্ডেল শনাক্তকারী

কী CFBundleIdentifier রিভার্স ডোমেন নোটেশন (com.company.appname)-এ একটি অনন্য অ্যাপ্লিকেশন শনাক্তকারী সেট করে। এটি কোড সাইনিং, Push Notifications, CloudKit, App Groups এবং আরও অনেক Apple পরিষেবার জন্য ব্যবহৃত হয়। প্রকাশের পরে শনাক্তকারী পরিবর্তন করলে App Store এটিকে একটি নতুন অ্যাপ্লিকেশন হিসেবে বিবেচনা করে এবং বিদ্যমান ব্যবহারকারীরা আপডেট পাবেন না। তাই, অ্যাপ্লিকেশন জীবনচক্র জুড়ে শনাক্তকারী অপরিবর্তিত থাকা উচিত।

xml
<key>CFBundleIdentifier</key>
<string>com.itsectr.myapp</string>

অ্যাপ্লিকেশন সংস্করণ

কীগুলি CFBundleShortVersionString (প্রদর্শিত সংস্করণ) এবং CFBundleVersion (বিল্ড নম্বর) App Store Connect এবং সিস্টেম দ্বারা আপডেট ব্যবস্থাপনার জন্য ব্যবহৃত হয়। সংস্করণ major.minor.patch ফরম্যাটে নির্দিষ্ট করা হয়। বিল্ড নম্বর App Store Connect-এ আপলোড করা প্রতিটি বিল্ডের সাথে বৃদ্ধি পেতে হবে, এমনকি যদি অ্যাপ সংস্করণ না পরিবর্তিত হয়। Apple একটি বিল্ড নতুন না পূর্বে আপলোড করা বিল্ডের অনুলিপি তা নির্ধারণ করতে CFBundleVersion ব্যবহার করে। যদি বিল্ড নম্বর পূর্বে আপলোড করা বিল্ডের সাথে মেলে, তাহলে ITMS-90161 ত্রুটি ফেরত আসে।

xml
<key>CFBundleShortVersionString</key>
<string>1.2.0</string>
<key>CFBundleVersion</key>
<string>42</string>

সমর্থিত ইন্টারফেস ওরিয়েন্টেশন

কীগুলি UISupportedInterfaceOrientations iPhone-এর জন্য সমর্থিত স্ক্রিন ওরিয়েন্টেশন সংজ্ঞায়িত করে। iPad-এর জন্য, ডিভাইস সাফিক্স সহ একটি পৃথক কী UISupportedInterfaceOrientations~ipad ব্যবহার করা হয়। প্রতিটি ওরিয়েন্টেশন একটি স্ট্রিং হিসেবে নির্দিষ্ট করা হয়: UIInterfaceOrientationPortrait, UIInterfaceOrientationLandscapeLeft, UIInterfaceOrientationLandscapeRight, UIInterfaceOrientationPortraitUpsideDown। যদি একটি অ্যাপ শুধুমাত্র পোর্ট্রেট ওরিয়েন্টেশন সমর্থন করে এবং শুধুমাত্র iPhone না হয়, তাহলে App Store বিল্ড প্রত্যাখ্যান করবে যদি iPad-এর জন্য শুধুমাত্র পোর্ট্রেট নির্দিষ্ট করা হয়।

xml
<key>UISupportedInterfaceOrientations</key>
<array>
    <string>UIInterfaceOrientationPortrait</string>
    <string>UIInterfaceOrientationLandscapeLeft</string>
</array>

অনুমতি এবং গোপনীয়তা কী

iOS 10 থেকে, Apple NS উপসর্গ (NeXTStep) সহ কী-র মাধ্যমে প্রতিটি অনুরোধকৃত অনুমতির জন্য একটি বিবরণ প্রয়োজন। বিবরণটি প্রাইভেট API-তে অ্যাক্সেসের প্রথম অনুরোধে ব্যবহারকারীকে সিস্টেম ডায়ালগে দেখানো হয়। অনুমতি প্রয়োজন এমন API কল করার সময় সংশ্লিষ্ট NS কী-র অনুপস্থিতি একটি ব্যতিক্রম সহ তাত্ক্ষণিক অ্যাপ্লিকেশন ক্র্যাশের দিকে নিয়ে যায়, যা শুধুমাত্র ক্র্যাশ লগে রেকর্ড করা হয়।

কীউদ্দেশ্য
NSCameraUsageDescriptionছবি এবং ভিডিওর জন্য ক্যামেরায় অ্যাক্সেস
NSPhotoLibraryUsageDescriptionফটো লাইব্রেরিতে অ্যাক্সেস
NSLocationWhenInUseUsageDescriptionব্যবহারের সময় জিওলোকেশন
NSMicrophoneUsageDescriptionঅডিও রেকর্ডিংয়ের জন্য মাইক্রোফোনে অ্যাক্সেস
NSContactsUsageDescriptionডিভাইস কন্টাক্টে অ্যাক্সেস

প্রতিটি গোপনীয়তা কী-তে অনুরোধের কারণের একটি ব্যবহারকারী-বোধ্য বিবরণ থাকতে হবে। খালি বা টেমপ্লেট টেক্সট, যেমন “অ্যাপ্লিকেশন পরিচালনার জন্য” বা “অ্যাক্সেস প্রয়োজন”, App Store প্রত্যাখ্যানের দিকে নিয়ে যায়। বিবরণে নির্দিষ্ট কার্যকারিতা ব্যাখ্যা করা উচিত: “QR কোড স্ক্যান এবং প্রোফাইল ছবি তৈরির জন্য ক্যামেরা অ্যাক্সেস প্রয়োজন।” প্রতিটি সমর্থিত ভাষার জন্য InfoPlist.strings ফাইলের মাধ্যমে বিবরণের স্থানীয়কৃত সংস্করণ ব্যবহার করার সুপারিশ করা হয়।

ব্যক্তিগত ডেটা অ্যাক্সেস করে এমন API কল করার সময় প্রয়োজনীয় NS কী-র অনুপস্থিতি অ্যাপ্লিকেশনটিকে ক্র্যাশ করে। সিস্টেম একটি ব্যতিক্রম সহ প্রক্রিয়া শেষ করে, যা শুধুমাত্র Xcode বা Firebase Crashlytics-এর ক্র্যাশ রিপোর্ট লগে লক্ষণীয়। ব্যবহারকারী কোনো ব্যাখ্যা ছাড়াই শুধুমাত্র হঠাৎ অ্যাপ বন্ধ হওয়া দেখেন। তাই, ক্যামেরা, মাইক্রোফোন বা জিওলোকেশন ব্যবহার করে এমন নতুন কার্যকারিতা যোগ করার আগে, প্রথমে Info.plist-এ সংশ্লিষ্ট গোপনীয়তা কী যোগ করতে হবে, তারপর API কল বাস্তবায়ন করতে হবে।

Custom URL Schemes এবং App Links

কী CFBundleURLTypes অ্যাপ্লিকেশনে ডিপ লিংকিংয়ের জন্য কাস্টম URL স্কিম নিবন্ধন করে। এটি ব্রাউজার, ইমেল বা অন্যান্য অ্যাপ্লিকেশন থেকে myapp://profile/123-এর মতো লিংকের মাধ্যমে অ্যাপ খোলার অনুমতি দেয়। প্রতিটি স্কিম অ্যাপ্লিকেশনটিকে অনন্যভাবে শনাক্ত করে: যদি দুটি অ্যাপ একই স্কিম নিবন্ধন করে, সিস্টেম ব্যবহারকারীকে একটি ডায়ালগ দেখায় কোনটি ব্যবহার করবেন তা বেছে নিতে।

xml
<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>com.itsectr.myapp</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>myapp</string>
        </array>
    </dict>
</array>

Universal Links সমর্থনের জন্য, Entitlements ফাইলে কী com.apple.developer.associated-domains প্রয়োজন, Info.plist-এ নয়। Universal Links তখনই কাজ করে যখন সার্ভারে একটি কনফিগার করা apple-app-site-association ফাইল থাকে যা ডোমেনকে অ্যাপ্লিকেশনের সাথে লিংক করে। কাস্টম URL স্কিমের বিপরীতে, Universal Links কোনো নিশ্চিতকরণ ডায়ালগ দেখায় না এবং অন্যান্য অ্যাপ্লিকেশনের সাথে বিরোধ করে না, কারণ এগুলি কাস্টম স্কিমের পরিবর্তে HTTPS লিংক ব্যবহার করে। তবে, এগুলির একটি বৈধ SSL সার্টিফিকেট সহ একটি ডোমেন প্রয়োজন।

কাস্টম স্কিমগুলি স্ট্যান্ডার্ড iOS স্কিমের সাথে বিরোধ করতে পারে। অন্যান্য অ্যাপের সাথে সংঘর্ষ কমানোর জন্য কমপক্ষে 4 অক্ষরের স্কিম ব্যবহার করার সুপারিশ করা হয়। উদাহরণস্বরূপ, স্কিম “fb” খুব ছোট এবং বিরোধ করতে পারে। রিভার্স নোটেশন ব্যবহার করা ভাল: app://-এর পরিবর্তে myapp://। এছাড়াও মনে রাখবেন যে যদি অ্যাপটি মুছে ফেলা হয় কিন্তু অন্য একটি অ্যাপ একই স্কিম নিবন্ধন করে থাকে, তাহলে ব্যবহারকারী একটি লিংকের মাধ্যমে নেভিগেট করার সময় অপ্রত্যাশিত আচরণ অনুভব করতে পারেন।

লঞ্চ কনফিগারেশন এবং ব্যাকগ্রাউন্ড মোড

কী UIBackgroundModes অ্যাপ্লিকেশনের ব্যাকগ্রাউন্ড ক্ষমতা ঘোষণা করে। প্রতিটি মোডের জন্য Info.plist-এ সংশ্লিষ্ট বিবরণ এবং Xcode প্রজেক্ট ক্যাপাবিলিটিতে নিশ্চিতকরণ প্রয়োজন। মোড উল্লেখ না করলে, সিস্টেম 30 সেকেন্ড পরে বা সম্পদের অভাব হলে ব্যাকগ্রাউন্ড টাস্ক জোরপূর্বক শেষ করতে পারে।

xml
<key>UIBackgroundModes</key>
<array>
    <string>fetch</string>
    <string>remote-notification</string>
    <string>location</string>
    <string>processing</string>
</array>

কী UIApplicationSupportsMultipleScenes iPad এবং Mac Catalyst-এ মাল্টিটাস্কিং সমর্থন সক্ষম করে। এই কী ছাড়া, অ্যাপ্লিকেশন একাধিক উইন্ডো পরিচালনার জন্য SwiftUI ScenePhase বা UIKit UISceneDelegate ব্যবহার করতে পারে না। iPadOS-এ, ব্যবহারকারীরা একই অ্যাপের একাধিক উইন্ডো খুলতে পারে, তাদের মধ্যে কন্টেন্ট টেনে আনতে পারে এবং Split View ব্যবহার করতে পারে। যদি অ্যাপ্লিকেশন মাল্টি-উইন্ডো মোড সমর্থন না করে, তাহলে এই কী false-এ সেট করলে সংশ্লিষ্ট কার্যকারিতা নিষ্ক্রিয় হয়।

কী LSRequiresIPhoneOS iPad-এ অ্যাপ ইনস্টলেশন প্রতিরোধ করে। এটি শুধুমাত্র iPhone অ্যাপের জন্য ব্যবহৃত হয় যা iPad ইন্টারফেস সমর্থন করে না বা বড় পর্দার সাথে খাপ খাইয়ে নেয়নি। তবে, Apple প্রয়োজন ছাড়া এই কী ব্যবহার করার সুপারিশ করে না, কারণ ব্যবহারকারীরা আশা করে যে অ্যাপগুলি iOS এবং iPadOS চালিত সমস্ত ডিভাইসে কাজ করবে। যদি অ্যাপ এখনও iPhone-এর মধ্যে সীমাবদ্ধ থাকে, তাহলে নিশ্চিত করুন যে এই প্রয়োজনীয়তা প্রযুক্তিগতভাবে ন্যায়সঙ্গত এবং App Store বিবরণে উল্লেখ করা হয়েছে।

কী UIViewControllerBasedStatusBarAppearance স্ট্যাটাস বার শৈলী নিয়ন্ত্রণ করে। যদি NO-তে সেট করা হয়, স্ট্যাটাস বার শৈলী Info.plist কী UIStatusBarStyle-এর মাধ্যমে বিশ্বব্যাপী সেট করা হয়। যদি YES (iOS 7 থেকে ডিফল্ট), প্রতিটি ViewController preferredStatusBarStyle ওভাররাইড করে নিজের স্ট্যাটাস বার পরিচালনা করতে পারে। আধুনিক অ্যাপের জন্য, বিভিন্ন স্ক্রিনে ভিন্ন স্ট্যাটাস বার শৈলী রাখতে YES রাখার সুপারিশ করা হয়, উদাহরণস্বরূপ গাঢ় পটভূমিতে হালকা এবং হালকা পটভূমিতে গাঢ়।

কী UIApplicationExitsOnSuspend ব্যাকগ্রাউন্ডে যাওয়ার সময় স্থগিত হওয়ার পরিবর্তে অ্যাপটিকে সম্পূর্ণরূপে শেষ করতে বাধ্য করে। এটি খুব কমই ব্যবহৃত হয়, শুধুমাত্র উচ্চ নিরাপত্তা প্রয়োজনীয়তা সম্পন্ন অ্যাপের জন্য: ব্যাংকিং অ্যাপ বা গোপনীয় ডেটা নিয়ে কাজ করে এমন অ্যাপ। এই ক্ষেত্রে, ব্যবহারকারী দ্রুত অ্যাপে ফিরে আসার ক্ষমতা হারান এবং প্রতিটি লঞ্চ একটি পরিষ্কার অবস্থা থেকে শুরু হয়। App Store পর্যালোচনার সময় এই কী ব্যবহারের জন্য যুক্তি চাইতে পারে।

কী NSAppTransportSecurity অ্যাপের নেটওয়ার্ক সংযোগ পরিচালনা করে। iOS 9 থেকে, App Transport Security (ATS) HTTPS প্রয়োজন করে ডিফল্টরূপে সমস্ত HTTP সংযোগ ব্লক করে। নির্দিষ্ট ডোমেনে অস্থায়ীভাবে HTTP অনুরোধের অনুমতি দিতে, NSAppTransportSecurity-এর ভিতরে NSExceptionDomains অভিধান ব্যবহার করা হয়। ডেভেলপমেন্টের জন্য, NSAllowsArbitraryLoads = true-এর মাধ্যমে সম্পূর্ণ ATS নিষ্ক্রিয়করণ অনুমোদিত, কিন্তু Apple যুক্তি প্রয়োজন এবং বৈধ কারণ ছাড়া এই ধরনের বিল্ড অনুমতি দেয় না। প্রোডাকশন বিল্ডে, ব্যবহারকারীর ডেটা পরিচালনা করে এমন সমস্ত ডোমেনের জন্য ATS সক্ষম থাকতে হবে।

সচরাচর জিজ্ঞাসা

Xcode প্রজেক্টে Info.plist কোথায় পাওয়া যাবে?

Info.plist ফাইলটি অ্যাপ্লিকেশনের নামের সাথে মিলিয়ে প্রজেক্ট ফোল্ডারে অবস্থিত। Xcode-এ, এটি Supporting Files গ্রুপের ভিতরে প্রজেক্ট নেভিগেটরে নীল বইয়ের আইকন সহ প্রদর্শিত হয়। এটি প্রজেক্টে Spotlight অনুসন্ধানের মাধ্যমেও পাওয়া যেতে পারে।

Info.plist ম্যানুয়ালি সম্পাদনা করা যাবে কি?

হ্যাঁ, Info.plist যেকোনো টেক্সট এডিটরে বা Xcode গ্রাফিকাল ইন্টারফেসের মাধ্যমে সম্পাদনা করা যেতে পারে। ম্যানুয়াল সম্পাদনা বিষয়বস্তুর উপর সম্পূর্ণ নিয়ন্ত্রণ দেয় কিন্তু XML সিনট্যাক্সে মনোযোগ প্রয়োজন: প্রতিটি খোলার <key> নির্দেশিকার সংশ্লিষ্ট </key> থাকতে হবে এবং ডেটা প্রকারগুলি Apple প্রত্যাশিত অনুযায়ী হতে হবে।

SwiftUI প্রজেক্টে Info.plist কী?

SwiftUI প্রজেক্টে, Info.plist UIKit প্রজেক্টের মতোই কাজ করে। অতিরিক্তভাবে, UIApplicationSceneManifest কী-র প্রয়োজন হতে পারে যদি প্রজেক্ট সীন পরিচালনার জন্য App প্রোটোকল ব্যবহার না করে। SwiftUI App প্রোটোকল স্বয়ংক্রিয়ভাবে সীন কনফিগারেশন তৈরি করে, কিন্তু কাস্টমাইজেশনের জন্য ম্যানুয়ালি কী যোগ করা প্রয়োজন।

Info.plist-এ কাস্টম কী কীভাবে যোগ করবেন?

Xcode-এ Info.plist খুলুন, প্লাস বাটনে ক্লিক করুন এবং কী-র নাম লিখুন। কাস্টম কী-র জন্য, Apple সিস্টেম কী-র সাথে বিরোধ এড়াতে কোম্পানি উপসর্গ ব্যবহার করুন, উদাহরণস্বরূপ শুধু CustomKey-এর পরিবর্তে ITSCustomKey। মান প্রকার (String, Number, Array, Dictionary) প্রত্যাশিত ডেটা ফরম্যাটের উপর ভিত্তি করে নির্বাচন করা হয়।

কেন App Store Info.plist-এর কারণে আমার বিল্ড প্রত্যাখ্যান করেছে?

সাধারণ কারণ: অনুরোধকৃত অনুমতির জন্য গোপনীয়তা কী-র অভাব, ভুল CFBundleIdentifier, Info.plist এবং App Store Connect-এর মধ্যে সংস্করণ অসামঞ্জস্য, খালি NS কী মান। ব্যবহৃত API-র জন্য সমস্ত NS কী পরীক্ষা করুন এবং নিশ্চিত করুন যে প্রতিটি বিবরণে অ্যাপের স্থানীয়করণ ভাষায় একটি অর্থপূর্ণ ব্যাখ্যা রয়েছে।

সারাংশ

  • Info.plist মেটাডেটা, অনুমতি এবং লঞ্চ সেটিংস সহ iOS/macOS অ্যাপের জন্য XML কনফিগারেশন
  • CFBundleIdentifier এবং CFBundleVersion শনাক্তকরণ এবং App Store প্রকাশের জন্য বাধ্যতামূলক কী
  • গোপনীয়তা কী (NSCameraUsageDescription) ক্যামেরা, মাইক্রোফোন এবং অন্যান্য প্রাইভেট API-তে অ্যাক্সেসের জন্য বাধ্যতামূলক
  • Custom URL schemes CFBundleURLTypes-এর মাধ্যমে কনফিগার করা হয়, Universal Links Entitlements এবং apple-app-site-association-এর মাধ্যমে
  • UIBackgroundModes সঠিক ব্যাকগ্রাউন্ড অপারেশনের জন্য ব্যাকগ্রাউন্ড ক্ষমতা ঘোষণা করে
  • বাধ্যতামূলক কী-র অভাব অ্যাপ ক্র্যাশ বা App Store বিল্ড প্রত্যাখ্যানের দিকে নিয়ে যায়
  • Info.plist সম্পাদনা Xcode ইন্টারফেস বা XML সিনট্যাক্স নিয়ন্ত্রণ সহ টেক্সট এডিটরের মাধ্যমে উপলব্ধ

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন