Slicing হল App Thinning-এর একটি প্রক্রিয়া যার মাধ্যমে App Store স্বয়ংক্রিয়ভাবে বাইনারি ফাইলের একাধিক ভেরিয়েন্ট তৈরি করে, যার প্রতিটিতে শুধুমাত্র একটি নির্দিষ্ট ডিভাইস মডেলের জন্য রিসোর্স থাকে। Apple Developer Documentation, 2026 অনুযায়ী, Slicing অসমর্থিত কনফিগারেশনের জন্য রিসোর্স বিতরণ থেকে বাদ দেয়, যার ফলে ইনস্টলেশনের আকার হ্রাস পায়। আসুন কার্যনীতি, স্লাইসিং ভেরিয়েন্ট এবং ফলাফল যাচাইকরণ বুঝি।
মূল বিষয়
Slicing হল App Thinning-এর একটি উপাদান যা App Store-এর পক্ষ থেকে অ্যাপ্লিকেশন বাইনারির ভেরিয়েন্ট (স্লাইস) তৈরি করার জন্য দায়িত্বশীল। যখন ডেভেলপার সমস্ত সমর্থিত কনফিগারেশনের জন্য কোড এবং রিসোর্স ধারণকারী একটি ইউনিভার্সাল ফ্যাট বাইনারি আপলোড করে, তখন App Store এটি বিশ্লেষণ করে এবং একাধিক স্লাইস তৈরি করে: আলাদাভাবে A17 প্রসেসরযুক্ত iPhone-এর জন্য, আলাদাভাবে M4-যুক্ত iPad-এর জন্য, আলাদাভাবে Apple Watch-এর জন্য। প্রতিটি স্লাইসে শুধুমাত্র সেই কোড খণ্ড এবং রিসোর্স থাকে যা আর্কিটেকচার এবং রেজোলিউশনের সেই নির্দিষ্ট সংমিশ্রণের জন্য প্রয়োজনীয়।
iOS 9-এর আগে, ডেভেলপাররা ম্যানুয়ালি বিভিন্ন ডিভাইসের জন্য আলাদা বাইনারি ফাইল তৈরি করতেন বা একটি ইউনিভার্সাল ফ্যাট বাইনারি বিতরণ করতেন যাতে সবকিছু একসাথে থাকত। Slicing এই প্রক্রিয়াটিকে সম্পূর্ণরূপে স্বয়ংক্রিয় করেছে: ডেভেলপার Xcode-এ একটি প্রকল্প প্রস্তুত করে, App Store Connect-এ একটি আর্কাইভ আপলোড করে, এবং সার্ভার সাইডে Slicing সর্বোত্তম সংখ্যক ভেরিয়েন্ট তৈরি করে। ব্যবহারকারী কখনই স্লাইসিং প্রক্রিয়া দেখতে পায় না — সে তার ডিভাইসের জন্য অপ্টিমাইজ করা একটি প্রস্তুত .app পায়।
Slicing শুধুমাত্র কোড এবং ইমেজেই নয়, বরং Metal শেডার-এও প্রযোজ্য। Apple GPU তার নিজস্ব নির্দেশ সেট (Metal Shading Language) ব্যবহার করে, যা PowerVR বা ARM Mali নির্দেশ থেকে ভিন্ন। Slicing স্লাইসে শুধুমাত্র লক্ষ্য ডিভাইসের GPU পরিবারের জন্য শেডার অন্তর্ভুক্ত করে। এটি কাস্টম শেডারযুক্ত গেমের জন্য বিশেষভাবে গুরুত্বপূর্ণ — উদাহরণস্বরূপ, উচ্চ-বিস্তারিত পোস্ট-প্রসেসিং প্রভাব শুধুমাত্র শক্তিশালী GPU (iPad Pro M4, iPhone 16 Pro Max) যুক্ত ডিভাইসের জন্য কম্পাইল করা হয়।
Xcode কম্পাইলার একাধিক আর্কিটেকচার (armv7, arm64, arm64e) সহ একটি ফ্যাট বাইনারি তৈরি করে, কিন্তু রিসোর্স সরিয়ে ফেলে না — সব রেজোলিউশনের জন্য সব ইমেজ .app-এর ভিতরে থাকে। Slicing আরও এগিয়ে যায়: এটি Asset Catalogs, Metal শেডার এবং Swift লাইব্রেরি বিশ্লেষণ করে, প্রতিটি স্লাইস থেকে যা নির্দিষ্ট লক্ষ্যের জন্য প্রয়োজনীয় নয় তা সরিয়ে ফেলে। উদাহরণস্বরূপ, @3x গ্রাফিক্স iPhone SE-এর স্লাইসে যায় না, এবং iPhone-নির্দিষ্ট কন্ট্রোলার (যদি আলাদা রিসোর্সে নেওয়া হয়) iPad Air-এর স্লাইসে যায় না।
Slicing প্রক্রিয়া App Store Connect-এ বিল্ড আপলোড করার পরে শুরু হয় এবং তিনটি ধাপ নিয়ে গঠিত: বিশ্লেষণ, স্লাইসিং এবং প্যাকেজিং। বিশ্লেষণ ধাপে, App Store সার্ভার বাইনারি ফাইল পার্স করে, সমর্থিত আর্কিটেকচার, ডিভাইস, স্ক্রিন রেজোলিউশন এবং iOS সংস্করণ সম্পর্কে তথ্য বের করে। App Store সমস্ত বাণিজ্যিক Apple মডেলের তাদের প্রযুক্তিগত বৈশিষ্ট্যের সাথে ম্যাপিং ব্যবহার করে — ডিভাইস ডেটাবেস প্রতিটি iOS রিলিজের সাথে আপডেট হয়।
স্লাইসিং ধাপে, সার্ভার প্রতিটি অনন্য সংমিশ্রণের জন্য বাইনারি ফাইলের আলাদা কপি তৈরি করে। এর জন্য, App Store Asset Catalogs থেকে নির্দিষ্ট ট্যাগ (idiom, subtype, scale) সহ ইমেজ বের করে, শুধুমাত্র সেইগুলি নির্বাচন করে যা লক্ষ্য ডিভাইসের সাথে মেলে, এবং একটি নতুন রিসোর্স বান্ডেল একত্রিত করে। Swift স্ট্যান্ডার্ড লাইব্রেরি-ও স্লাইসিং-এর অধীন — এটি থেকে অব্যবহৃত প্রতীক এবং পদ্ধতি সরিয়ে ফেলা হয় (dead code stripping)।
প্যাকেজিং ধাপে, প্রতিটি স্লাইসকে একটি আলাদা বিতরণ প্যাকেজে রাখা হয় এবং মেটাডেটার সাথে লিঙ্ক করা হয় — ডিভাইস মডেলের একটি তালিকা যার জন্য এই স্লাইসটি উদ্দিষ্ট। যখন ব্যবহারকারী অ্যাপ্লিকেশন ডাউনলোড করে, App Store ডিভাইস মডেল, iOS সংস্করণ এবং সংযোগের ধরন অনুযায়ী উপযুক্ত স্লাইস নির্বাচন করে। যদি সঠিক মিল না থাকে, সার্ভার বৈশিষ্ট্যে নিকটতম স্লাইস ব্যবহার করে। Apple সমস্ত ভেরিয়েন্ট CloudKit CDN নেটওয়ার্কে বিশ্বব্যাপী দ্রুত ডেলিভারির জন্য সংরক্ষণ করে।
Slicing হল App Thinning-এর তিনটি প্রক্রিয়ার একটি, কিন্তু এটি ডাউনলোডের আকার কমানোর ক্ষেত্রে সবচেয়ে বেশি অবদান রাখে। Bitcode মেশিন কোড অপ্টিমাইজেশনের জন্য দায়ী, On-Demand Resources ডিভাইসে রিসোর্স ব্যবস্থাপনার জন্য, এবং Slicing বিতরণ ধাপে অপ্রয়োজনীয় রিসোর্স সরানোর জন্য। Slicing ছাড়া, প্রথম দুটি প্রক্রিয়া কাজ করে, কিন্তু ব্যবহারকারীরা সব ডিভাইসের জন্য রিসোর্স পায়, যা Asset Catalogs-এর সংখ্যার উপর নির্ভর করে আকার 20–40% বাড়িয়ে দেয়।
Slicing এবং Bitcode-এর মধ্যে পার্থক্য প্রয়োগের বিন্দুতে: Slicing রিসোর্স স্তরে (ইমেজ, শেডার, NIB ফাইল) কাজ করে, Bitcode মেশিন কোড স্তরে। Slicing কোডকে আর্কিটেকচার (arm64 vs arm64e) দ্বারা বিভক্ত করে, Bitcode Apple-কে নতুন আর্কিটেকচারের জন্য কোড পুনরায় কম্পাইল করার অনুমতি দেয়। Bitcode + Slicing একসাথে সর্বাধিক অপ্টিমাইজেশন প্রদান করে: Bitcode একটি নির্দিষ্ট আর্কিটেকচারের জন্য কোড তৈরি করে, এবং Slicing সেই আর্কিটেকচারের জন্য অপ্রয়োজনীয় রিসোর্স সরিয়ে ফেলে।
On-Demand Resources-এর সাথে সম্পর্ক — Slicing এবং ODR ওভারল্যাপ করে না। Slicing নির্ধারণ করে কোন রিসোর্স ডিভাইস বিতরণে পৌঁছাবে, যখন ODR পরিচালনা করে কখন এই রিসোর্স লোড এবং আনলোড হবে। ডেভেলপার একটি রিসোর্সকে ODR ট্যাগ দিয়ে চিহ্নিত করতে পারে, এবং Slicing এটি স্লাইসে অন্তর্ভুক্ত করবে যদি এটি ডিভাইসের সাথে মেলে। Apple ন্যূনতম ইনস্টলেশন আকারের জন্য একসাথে তিনটি প্রক্রিয়া ব্যবহার করার সুপারিশ করে।
| প্রক্রিয়া | অপ্টিমাইজেশনের লক্ষ্য | কখন প্রযোজ্য | আকারের উপর প্রভাব |
|---|---|---|---|
| Slicing | রিসোর্স (ইমেজ, শেডার) | App Store-এর পক্ষ থেকে | ~30% অপ্রয়োজনীয় রিসোর্স সরিয়ে ফেলে |
| Bitcode | মেশিন কোড | ব্যবহারকারী ডাউনলোড করার সময় | আর্কিটেকচারের জন্য কোড অপ্টিমাইজ করে |
| ODR | ডিভাইসে রিসোর্স | ইনস্টলেশনের পরে | প্রাথমিক আকার 40–60% হ্রাস করে |
Slicing বিভিন্ন মাত্রা অনুযায়ী আলাদা স্লাইস তৈরি করে: প্রসেসর আর্কিটেকচার, স্ক্রিনের আকার (রেজোলিউশন), iOS সংস্করণ এবং GPU পরিবার (Metal-এর জন্য)। আর্কিটেকচার CPU নির্দেশ সেট নির্ধারণ করে: arm64 — মৌলিক 64-বিট সেট (iPhone 5s — iPhone X), arm64e — Pointer Authentication এবং PAC সমর্থন সহ বিস্তৃত সেট (iPhone XS এবং নতুন, A12X+যুক্ত iPad Pro)। arm64e-এর স্লাইসে মেমরি সুরক্ষা নির্দেশ সহ কোড অন্তর্ভুক্ত যা arm64 ডিভাইসে উপলব্ধ নয়।
স্ক্রিন রেজোলিউশন — Slicing-এর দ্বিতীয় মূল মাত্রা। Apple স্কেল @1x (iPhone 3GS), @2x (iPhone 4 — iPhone SE 3), @3x (iPhone 6 Plus এবং নতুন) এবং iPad-নির্দিষ্ট (অতিরিক্ত মেট্রিক সহ 2x এবং 3x) ব্যবহার করে। Slicing স্লাইসে শুধুমাত্র লক্ষ্য ডিভাইসের সাথে মেলে এমন স্কেলের ইমেজ অন্তর্ভুক্ত করে। Xcode-এ Asset Catalogs-এর সঠিক সংগঠনের সাথে, এটি ম্যানুয়ালি রিসোর্স সেট পরিচালনার প্রয়োজনীয়তা দূর করে — কেবল ক্যাটালগে একটি ইমেজ যোগ করুন, সমর্থিত ডিভাইসের ধরন নির্দিষ্ট করে।
GPU পরিবার — তৃতীয় মাত্রা, Metal অ্যাপ্লিকেশনের জন্য গুরুত্বপূর্ণ। Apple GPU-কে প্রজন্ম অনুসারে শ্রেণিবদ্ধ করে: Apple GPU family 1 (A7), family 2 (A8), ... family 8 (M4)। Metal শেডার প্রতিটি পরিবারের জন্য আলাদাভাবে কম্পাইল করা হয়, কারণ Metal Shading Language নির্দেশ সেট প্রতিটি GPU প্রজন্মের সাথে প্রসারিত হয়। Slicing স্লাইসে শুধুমাত্র লক্ষ্য ডিভাইসের GPU পরিবারের জন্য শেডার অন্তর্ভুক্ত করে, যা রেন্ডারিং-এর জন্য Metal ব্যবহার করে এমন গেম এবং অ্যাপ্লিকেশনের আকার উল্লেখযোগ্যভাবে হ্রাস করে।
CPU আর্কিটেকচার সরাসরি স্লাইসের আকারকে প্রভাবিত করে: arm64e কোডে অতিরিক্ত Pointer Authentication (PAC) এবং Signed Return Address নির্দেশ থাকে, যা arm64-এর তুলনায় বাইনারি ফাইলের আকার 5–10% বাড়িয়ে দেয়। তবে, এই বৃদ্ধি এই সত্যের দ্বারা পূরণ হয় যে Slicing arm64e কোড শুধুমাত্র A12+ প্রসেসরযুক্ত ডিভাইসের স্লাইসে অন্তর্ভুক্ত করে। A15 Bionic-যুক্ত iPhone SE (তৃতীয় প্রজন্ম)-এর জন্য, Slicing এই চিপের ক্ষমতার জন্য অপ্টিমাইজ করা একটি আলাদা স্লাইস তৈরি করে।
Xcode-এ Slicing কনফিগারেশন ন্যূনতম — মূল কনফিগারেশন Asset Catalogs এবং Build Settings-এর মাধ্যমে করা হয়। Asset Catalog-এ ডিভাইসের ধরন (Any, iPhone, iPad, Apple Watch, Apple TV) অনুযায়ী সাজানো রিসোর্স থাকা উচিত যাতে স্কেল এবং ডিসপ্লে মোড সঠিকভাবে নির্দিষ্ট থাকে। Xcode স্বয়ংক্রিয়ভাবে বিল্ডে শুধুমাত্র সেই রিসোর্সগুলি অন্তর্ভুক্ত করে যা Deployment Target সেটিংসে নির্দিষ্ট লক্ষ্য ডিভাইসের সাথে মেলে।
Xcode-এ মূল Slicing সেটিং হল Build Setting App Thinning। উপলব্ধ মান:
General → Deployment Info-তে Targeted Device Families নির্ধারণ করে যে অ্যাপ্লিকেশনটি কোন ধরনের ডিভাইসের জন্য তৈরি (iPhone / iPad / Universal)। Slicing স্লাইসিং করার সময় এই প্যারামিটারের উপর নির্ভর করে — যদি অ্যাপ্লিকেশনটি শুধুমাত্র iPhone সমর্থন করে, তাহলে iPad-এর জন্য স্লাইস তৈরি হয় না। Deployment Target (সর্বনিম্ন iOS সংস্করণ) Slicing-কেও প্রভাবিত করে: পুরানো iOS সংস্করণের জন্য armv7 স্লাইস প্রয়োজন হতে পারে, যা iOS 13+ এর জন্য প্রয়োজনীয় নয়। Apple সর্বশেষ স্থিত iOS সংস্করণে Deployment Target সেট করার সুপারিশ করে — এটি স্লাইসের সংখ্যা এবং বাইনারির আকার হ্রাস করে।
সর্বাধিক Slicing দক্ষতার জন্য, Asset Catalogs-কে প্রতিটি রিসোর্সের জন্য নির্দিষ্ট ট্যাগ ব্যবহার করা উচিত। Xcode Attributes Inspector-এ ইমেজের জন্য প্রদান করে: Width Class (Any, Compact, Regular), Height Class (Any, Compact, Regular), Gamut (sRGB, Display P3), Memory (Any, Low, High), Graphics (Any, Low, High)। এই ট্যাগগুলি একত্রিত করে, ডেভেলপার নিয়ন্ত্রণ করে যে প্রতিটি ইমেজ কোন স্লাইসে যাবে। উদাহরণস্বরূপ, Regular Width + Regular Height ট্যাগযুক্ত একটি iPad ইমেজ শুধুমাত্র ল্যান্ডস্কেপ ওরিয়েন্টেশনে iPad স্লাইসে উপস্থিত হবে।
# একটি নির্দিষ্ট ডিভাইসের জন্য স্লাইস এক্সপোর্ট করুন
xcodebuild -exportArchive \
-archivePath "App.xcarchive" \
-exportPath "sliced/" \
-exportOptionsPlist "export.plist" \
-thinning "iPhone17,2" # iPhone 16 Pro Max
Xcodebuild প্যারামিটার -thinning এবং মডেল শনাক্তকারীর সাথে শুধুমাত্র সেই মডেলের জন্য স্লাইস তৈরি করে। শনাক্তকারীদের তালিকা Apple-এর ডিভাইস ডেটাবেসে পাওয়া যাবে (ফরম্যাট: iPhone17,2 — iPhone 16 Pro Max, iPad14,1 — iPad Pro 11 M4)। এই পদ্ধতি App Store Connect-এ জমা দেওয়ার আগে স্লাইসের আকার পরীক্ষা করার জন্য দরকারী। CI/CD স্বয়ংক্রিয় যাচাইয়ের জন্য এই কমান্ড ব্যবহার করতে পারে — যদি স্লাইসের আকার সীমা অতিক্রম করে (উদাহরণস্বরূপ, মোবাইল ডাউনলোডের জন্য 100 MB), পাইপলাইন একটি সতর্কতা জারি করে।
App Store Connect-এ আর্কাইভ আপলোড করার পরে, Apple স্লাইসের আকার সম্পর্কে বিস্তারিত পরিসংখ্যান সরবরাহ করে। App Store Connect → Activity → বিল্ড নির্বাচন করুন → App Thinning — ডিভাইস বিভাগ অনুসারে Estimated App Store Size প্রদর্শন করে: iPhone, iPad, Apple Watch, tvOS। আকারগুলি iOS সংস্করণ এবং প্রসেসরের ধরন অনুসারে বিভক্ত। যদি কোনো স্লাইস প্রত্যাশিত আকার অতিক্রম করে, App Store Connect এটি একটি হলুদ সতর্কতা দিয়ে চিহ্নিত করে।
Xcode Organizer-এর মাধ্যমে স্থানীয় যাচাই: আর্কাইভ করার পর, Window → Organizer খুলুন, আর্কাইভ নির্বাচন করুন এবং App Thinning Profiles-এ ক্লিক করুন। Xcode বর্তমান প্রকল্প কনফিগারেশনের ভিত্তিতে প্রতিটি সম্ভাব্য স্লাইসের জন্য আকার দেখাবে। একটি নির্দিষ্ট Slicing প্রোফাইল সহ IPA তৈরি করার জন্য Export বিকল্পও উপলব্ধ। Xcode একটি .app-thinning.plist ফাইল তৈরি করে যাতে তথ্য থাকে যে প্রতিটি স্লাইসে কোন রিসোর্স অন্তর্ভুক্ত রয়েছে।
CI/CD-তে Slicing যাচাই স্বয়ংক্রিয় করতে, -thinning সহ xcodebuild ব্যবহার করুন এবং তৈরি .app ফাইলের আকার বিশ্লেষণ করুন। Apple কমান্ড-লাইন ইউটিলিটি app-size (Xcode Command Line Tools-এর মাধ্যমে ইনস্টল করা) সরবরাহ করে, যা একটি বিস্তারিত রিপোর্ট আউটপুট করে: কোডের আকার, বিভাগ অনুসারে রিসোর্সের আকার (ইমেজ, শেডার, NIB), Swift লাইব্রেরির আকার। Asset Catalog অপ্টিমাইজেশনের আগে এবং পরে স্লাইসের আকার তুলনা করা ভুল কনফিগারেশনের কারণে Slicing-এ অংশ না নেওয়া রিসোর্স সনাক্ত করতে সাহায্য করে।
# স্লাইসের আকার বিশ্লেষণ করুন
app-size -m "sliced/App.app" \
--format json
App-size রিসোর্স বিভাগ দ্বারা বিভক্ত JSON রিপোর্ট আউটপুট করে। যদি Slicing সঠিকভাবে কনফিগার করা হয়, তাহলে "images" বিভাগে শুধুমাত্র একটি স্কেল সেট (@2x বা @3x) থাকবে, সব ভেরিয়েন্ট নয়। Asset Catalog কনফিগারেশন ত্রুটি তখন প্রকাশ পায় যখন সব স্কেল (@1x, @2x, @3x) স্লাইসে উপস্থিত থাকে — এর মানে Xcode এই ইমেজগুলির জন্য লক্ষ্য ডিভাইস নির্ধারণ করতে পারেনি, এবং Slicing কাজ করেনি।
সচরাচর জিজ্ঞাসা
হ্যাঁ, TestFlight-ও Slicing সমর্থন করে। যখন একজন পরীক্ষক TestFlight-এর মাধ্যমে অ্যাপ্লিকেশন ডাউনলোড করে, Apple সার্ভার পরীক্ষকের ডিভাইসের জন্য অপ্টিমাইজ করা একটি স্লাইস সরবরাহ করে। App Store Connect Enterprise এবং Ad Hoc বিল্ড বাদে, TestFlight সহ সমস্ত বিতরণের জন্য স্বয়ংক্রিয়ভাবে Slicing পরিচালনা করে।
হ্যাঁ, Asset Catalogs-এ প্রতিটি ইমেজের জন্য নির্দিষ্ট ডিভাইসের ধরনের ফ্ল্যাগ সরানো যেতে পারে। Xcode Attributes Inspector-এ নির্দিষ্ট করার অনুমতি দেয় যে রিসোর্সটি কোন Idiom (iPhone, iPad, Apple Watch, Mac) এবং স্কেলের জন্য অন্তর্ভুক্ত করা উচিত। যদি রিসোর্সটি সমস্ত ডিভাইসের জন্য প্রয়োজন হয়, যেকোনো স্কেল সহ Universal ব্যবহার করুন।
কাস্টম ফ্রেমওয়ার্ক (.framework) Slicing-এ অংশগ্রহণ করে যদি সেগুলি XCFramework (একাধিক আর্কিটেকচার সহ) হিসাবে তৈরি করা হয়। App Store স্লাইসে শুধুমাত্র ফ্রেমওয়ার্কের সেই আর্কিটেকচার অন্তর্ভুক্ত করে যা লক্ষ্য ডিভাইসের সাথে মেলে। স্ট্যাটিক লাইব্রেরি (.a) Slicing-এর অধীন নয় — এগুলি বাইনারি ফাইলে সম্পূর্ণরূপে এম্বেড করা হয়।
Xcode Organizer estimated size দেখায় — Apple সার্ভারে প্রকৃত স্লাইসিং বিবেচনা না করে একটি আনুমানিক আকার। App Store Connect Slicing-এর পরে প্রকৃত আকার প্রদর্শন করে, যা অনুমানের চেয়ে 10–15% কম হতে পারে কারণ সার্ভার অতিরিক্ত অপ্টিমাইজেশন (LZFSE অ্যালগরিদম, Zstandard রিসোর্স কম্প্রেশন) প্রয়োগ করে যা স্থানীয়ভাবে উপলব্ধ নয়।
হ্যাঁ, Slicing SwiftUI-এর সাথে সম্পূর্ণরূপে সামঞ্জস্যপূর্ণ। Asset Catalogs SwiftUI দ্বারা Image, Color এবং SymbolImage প্রকারের মাধ্যমে ব্যবহৃত হয়। Slicing ভেক্টর এবং রাস্টার ইমেজ, SF Symbols এবং Metal শেডার-এ প্রযোজ্য, ইন্টারফেস তৈরির জন্য SwiftUI বা UIKit ব্যবহার করা হোক না কেন।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন