২০২৫ সালে, একটি আইফোনে আপনার নিজস্ব সঙ্গীত প্লে করা অদ্ভুতভাবে কঠিন, যদি আপনি অ্যাপল পরিশোধ না করেন বা সীমাবদ্ধতাগুলির একটি ল্যাবরেটরি পরিচালনা না করেন. সুতরাং আমি সম্পূর্ণ টেক্সট অনুসন্ধান, iCloud সমর্থন এবং একটি স্থানীয়-প্রথম অভিজ্ঞতা সহ আমার নিজের প্লেয়ার তৈরি করেছি।
২০২৫ সালে, একটি আইফোনে আপনার নিজস্ব সঙ্গীত প্লে করা অদ্ভুতভাবে কঠিন, যদি আপনি অ্যাপল পরিশোধ না করেন বা সীমাবদ্ধতাগুলির একটি ল্যাবরেটরি পরিচালনা না করেন. সুতরাং আমি সম্পূর্ণ টেক্সট অনুসন্ধান, iCloud সমর্থন এবং একটি স্থানীয়-প্রথম অভিজ্ঞতা সহ আমার নিজের প্লেয়ার তৈরি করেছি।
কেন আমি আমার নিজস্ব অডিও প্লেয়ার তৈরি
অনেকের মতো, আমি অ্যাপল (iCloud, Apple Music) এর মাধ্যমে অনেকেই অতিরিক্ত সাবস্ক্রিপশন পেয়েছি, অন্যরা র্যান্ডম প্ল্যাটফর্মগুলিতে হারিয়ে গেছে (ফ্ল্যাটফর্মের মতো, যা আমি এখনও পরিশোধ করতে ভুলে গেছি)।
প্রথমে আমি ভেবেছিলাম, আমি শুধুমাত্র iCloud মিউজিক লাইব্রেরি ব্যবহার করবো ডিভাইসগুলির মধ্যে মিউজিক সিন্চর্য করার জন্য, কিন্তু একবার আমি অ্যাপল মিউজিক সাবস্ক্রিপশন বাতিল করেছিলাম, সিন্চর্য কাজ বন্ধ করে দিয়েছে।behind a paywallআপনি প্রযুক্তিগতভাবে এটি পুনরায় পেতে পারেনiTunes খেলা(২৪.৯৯ ডলার প্রতি বছর). Match শুধুমাত্র 256-kbps AAC কপিগুলি অনলাইন সংরক্ষণ করে; আপনার মূল ফাইলগুলি স্থাপন করা হয়, যদি না আপনি তাদের প্রতিস্থাপন করার সিদ্ধান্ত নেন।
iTunes খেলাবিকল্পের অভাবের কারণে আমি হতাশ হয়ে গেলাম।builder route. যদি আমি একটি কম্পিউটার ডিভাইস (এই ক্ষেত্রে আইফোন) কিনেছি, তাহলে কী আমাকে ব্যবহার করার জন্য কোড দিয়ে ঠিক কী নির্মাণ করতে বাধা দেয়?এটি এখনও একটি সাধারণ উদ্দেশ্য কম্পিউটার, আমি যা চাই তা করতে পারি.
অ্যাপল (এবং অন্যান্যরা) আজ কী অফার করে
আমার নিজস্ব অ্যাপ্লিকেশন লিখার আগে, আমি অফলাইন সঙ্গীত প্লেয়ারের জন্য অফিসিয়াল এবং তৃতীয় পক্ষের বিকল্পগুলি অনুসন্ধান করেছি।
অ্যাপল এর ভিত্তিক অ্যাপস
অ্যাপল প্রযুক্তিগতভাবে আপনাকে ফাইল অ্যাপের মাধ্যমে iCloud থেকে সরাসরি সঙ্গীত প্লে করতে দেয়, তবে এর কার্যকারিতাটি সঙ্গীত শুনতে ডিজাইন করা হয় না।lacks essential featuresযেমন প্লেলিস্ট ম্যানেজমেন্ট, মেটাডেটা সাজানোর, বা প্লেবাক রেখা. যদিও এটি সঙ্গীত প্লেয়ার সমর্থন করে, এটি খুব সীমিত এবং সামগ্রিকভাল ব্যবহারকারীর অভিজ্ঞতা নয়.
ভাল ব্যবহারকারীর অভিজ্ঞতা নয়তৃতীয় পক্ষের অ্যাপস
আমি অ্যাপ্লিকেশন দোকানে গিয়েছিলাম যেগুলি আমার সমস্যার সমাধান করে, যদিও তাদের অনেক আছে, অনেকগুলি উপর নির্ভর করেsubscription-based pricing, একটি অ্যাপ্লিকেশনের জন্য একটি সন্দেহজনক মডেল যা কেবলমাত্র ব্যবহারকারীদের ইতিমধ্যে মালিকানাধীন ফাইলগুলি প্লে করে।ডোপলার. আমি একটি পরীক্ষার সময় এটি দিয়ে খেলেছি, কিন্তু UX অ্যালবামগুলি পরিচালনা করার চারপাশে গঠিত হয়. অনুসন্ধান এত ভাল ছিল না, এবং iCloud থেকে আমদানি কার্যকারিতা ধীর ছিল এবং একটি বড় সংখ্যক নকল ফোল্ডারে ব্যবহার করা কঠিন।
Going Builder Mode: আমার প্রযুক্তিগত যাত্রা
যাইহোক, আমি আমার নিজস্ব আদর্শ সঙ্গীত প্লেয়ার তৈরি করার সিদ্ধান্ত নিয়েছি যা আমার ব্যথা পয়েন্ট সমাধান করে:
- iCloud ফোল্ডারগুলিতে নমনীয় সম্পূর্ণ টেক্সট অনুসন্ধান, যাতে আমি গান বা নির্দিষ্ট ফাইল সহ একটি ফোল্ডার দ্রুত নির্বাচন এবং আমদানি করতে পারি।
- অফিসিয়াল মিউজিক অ্যাপ্লিকেশনের সাথে কমপক্ষে সমানভাবে সঙ্গীত পরিচালনার কার্যকারিতা: র ্যাংকিং, প্লেলিস্ট ব্যবস্থাপনা, অ্যালবাম দ্বারা সাজানো, ইত্যাদি
- পরিচিত এবং বন্ধুত্বপূর্ণ ইন্টারফেস।
প্রথমে প্রতিক্রিয়া নেওয়ার চেষ্টা
কয়েক বছর আগে, আমি সিনট্যাক্স পছন্দ করেছি (টাইপস্ক্রিপ্টের কাছাকাছি অনুভব করেছি) এবং রাস্টের মতো মেমরি নিরাপত্তা মূল্যায়ন করেছি, কিন্তু নৈরাজ্যহীনasync
/await
সেই সময়ে, গো বা জিএস / টিএস তুলনায় একই সময়ে কোড লিখতে কঠিন এবং বায়ারপ্ল্যাট ভারী মনে হয়. সেই অভিজ্ঞতা আমাকে হতাশ করে রেখেছিল, তাই যখন আমি এই প্রকল্পটি পুনরায় দেখেছি, আমি প্রথমে কিছু পরিচিত করার জন্য পৌঁছলাম।
যাইহোক, আমি React Native বা এক্সপো দিয়ে গিয়েছিলাম, আমার ওয়েব ডেভেলপমেন্ট অভিজ্ঞতা পুনরায় ব্যবহার করার আশা করেছিলাম এবং বিদ্যমান টেমপ্লেট থেকে একটি প্লেয়ার ইউআই পুনরুদ্ধার করেছিলাম।টেমপ্লেট প্রকল্প Gionatha Sturba, কারণ এটি আমার অ্যাপ্লিকেশনের জন্য প্রয়োজনীয় সমস্ত বৈশিষ্ট্য রয়েছে বলে মনে হয়।
ফাইল সিস্টেম অ্যাক্সেস এবং ক্লাউড ফাইল সমন্বয় বড় রাস্তা বাধা: লাইব্রেরি যেমনexpo-filesystem
সমর্থিত মৌলিক ফাইল পিকিং, কিন্তু গভীরভাবে গঠিত iCloud ডিরেক্টরিগুলির উপর পুনরাবৃত্তি ট্র্যাভেলিংoften failed or even caused app crashesএটি স্পষ্ট করে দিয়েছে যে একটিJavaScript-based approach introduced more complexityশুধু অ্যাপলের মৌলিক এপিআইগুলির সাথে কাজ করার চেয়ে, এমনকি যদি এটি একটি ধীরে ধীরে শিখার কোর্স মানে।
আইওএস স্যান্ডবক্সিং অ্যাপ্লিকেশনগুলি ব্যবহারকারীর স্পষ্ট অনুমতি ছাড়া ফাইলগুলি পড়তে বাধা দেয়, যার ফলে React Native নির্ভরযোগ্যভাবে বহিরাগত ফোল্ডার অ্যাক্সেস করতে পারে না।
SwiftUI এর জন্য পরিবর্তন
সঙ্গে গিয়েছিলামSwiftUIঅথবা অ্যালবামের পরিবর্তে, কারণ আমি একটিclean and declarative UIএকটি স্তর যা আমি ডোমেইন লজিক এবং ডেটা সমন্বয় উপর ফোকাস যখন পথ থেকে বাদ থাকবে. async / waiting এবং ইন্টিগ্রেশন মত আধুনিক বৈশিষ্ট্য সঙ্গেSwift Actors, আমি ডেটা প্রবাহ এবং সমন্বয় পরিচালনা করা আরও সহজ খুঁজে পেয়েছি. SwiftUI অবশ্যই অ্যাপ্লিকেশনটি আলাদা ViewModel উপাদানগুলিতে গঠন করা আরও সহজ করে দিয়েছে, যা আমাকে OpenAI o1 এবং DeepSeek মত LLMs থেকে ভাল ফলাফল পেতে সাহায্য করে।
অ্যাপ আর্কিটেকচার এবং ডেটা মডেল
আসুন আমি যে অ্যাপ্লিকেশনটি তৈরি করেছি তা নিয়ে আলোচনা করি: আমি স্থিতিশীল ডেটা স্টোরেজের জন্য SQLite ব্যবহার করেছি এবং অ্যাপ্লিকেশনটি একটি সহজ সার্ভার অ্যাপ্লিকেশন হিসাবে এগিয়ে এসেছি।
তিনটি প্রধান স্ক্রিন
The app consists of 3 screen/modes:
- লাইব্রেরি আমদানি. এখানে আপনি আপনার iCloud লাইব্রেরি ফোল্ডার যোগ করুন. অ্যাপ্লিকেশন অডিও ফাইলগুলির জন্য প্রতিটি ফোল্ডার স্ক্যান করে এবং একটি SQLite ডাটাবেসের প্রতিটি পথ ইনপুট করে. এইভাবে, আপনি অনুসন্ধান, ফোল্ডারগুলি এবং subfolders যোগ করার ক্ষেত্রে সম্পূর্ণ নমনীয়তা পেতে পারেন. অ্যাপলের ন্যাশনাল ফাইল প্লেয়ারটি খুব কঠিন; আপনি কীওয়ার্ড দ্বারা অনুসন্ধান করা কয়েকটি ডিরেক্টরি নির্বাচন করতে পারেন না এবং তারপর একবারে ফাইলগুলির একটি বোতামও নির্বাচন করতে পারেন।
- লাইব্রেরি ব্যবস্থাপনা. এখানে আপনি যোগ করা গানগুলি পরিচালনা করতে পারেন এবং প্লেলিস্টগুলি সংগঠিত করতে পারেন. বেশিরভাগ ক্ষেত্রে, আমি অ্যাপল তাদের মিউজিক অ্যাপ্লিকেশনে এটি কীভাবে করেছিলেন তা প্রতিফলিত করেছি, এবং এটি আমার প্রয়োজনগুলির জন্য যথেষ্ট ভাল ছিল।
- এই অ্যাপ্লিকেশনের এই অংশটি রিং ম্যানেজমেন্ট (পুনরাবৃত্তি, shuffle) ইত্যাদি পরিচালনা করে এবং প্লে, স্টপ এবং পরবর্তী গান কার্যকারিতা পরিচালনা করে।
এখানে একটি সহজ ব্যবহারকারীর ফ্লো ডিগ্রী প্রদর্শিত হয়:
User flow in practice:যখন অ্যাপ্লিকেশনটি একটি খালি লাইব্রেরি দিয়ে চালু হয়, তখন এটি সিনাক্স ট্যাবলে পৌঁছায়, যাতে একটি বড় "iCloud সূত্র যোগ করুন" বোতাম দেখা যায়। সেখানে একটি ফোল্ডার নির্বাচন করুন এবং সিনাক্স স্ক্রিনটি গাছটি হাঁটার সময় একটি অগ্রগতি বার প্রদর্শন করে।Playlists / Artists / Albums / Songs. কোনও তালিকায় ডুফ করুন, একটি ট্র্যাক ট্যাপ করুন, এবং একটি মিনি-প্লেয়ার নিচের দিকে উপস্থিত হয়; সেই মিনি বারটি ট্যাপ করুন যাতে সম্পূর্ণ স্ক্রিনের প্লেয়ারটি শুফল, পুনরাবৃত্তি, লাইন পুনরাবৃত্তি এবং ভলিউম দিয়ে খোলা যায়। স্লিপ বা বন্ধ আইকনটি ট্যাপ করুন, এবং আপনি সরাসরি লাইব্রেরিতে ফিরে যান যখন প্লেয়ারটি চালু হয়। যেকোনো সময় আপনাকে আরও সঙ্গীতের প্রয়োজন হয়, সিনাকআপে ফিরে যান, ন্যাভি বারের "+" ট্যাপ করুন, অন্য ফোল্ড নির্বাচন করুন, এবং আমদানি পরিষেবা ভিতরে নতুন গানগুলি একত্রিত করে, কোনও পুনরায়
Backend-Like লজিক্যাল লেয়ার
একটি ওয়েব / ক্লাউড ব্যাকগ্রাউন্ড আছে এবং স্টার্টআপগুলিতে কাজ করার সময় অনেক সার্ভার কোড সরবরাহ করে, আমি একটিbackend-like architectureমোবাইলে অ্যাপ্লিকেশনের জন্য. পুরো ডোমেইন / লজিকাল লেয়ারটিView and View-Model layerকারণ আমাকে নখ কাটাতে হয়েছিল।cloud syncing, metadata parsingঅ্যাপ্লিকেশন এবং একটি SQLite DB এর জন্য পরিষ্কার ডেটা অ্যাক্সেস আছে।এখানে আমি এখানে ব্যবহৃত একটি প্রায় স্তরযুক্ত আর্কিটেকচার ডিগ্রী:
How the layers talk:SQLite নিচের দিকে অবস্থিত, কাঁচা গান লাইন এবং FTS সূচকগুলি সংরক্ষণ করে। তারপরে রিপোজিটরগুলি ডাটাবেসটি প্যাকেজ করে এবং async APIs প্রদর্শন করে।domain actors, সুইফট অভিনেত্রী যারা সমস্ত ব্যবসায়িক নিয়মগুলি (অন্তর্ভুক্ত, অনুসন্ধান, রেখা লজিক) মালিক, তাই স্টেট মিউটেশন থাকবেthread-safeViewModels অভিনেতাদের জন্য সাবস্ক্রাইব করে, ডেটাকে UI-র জন্য প্রস্তুত কাঠামোতে রূপান্তর করে এবং SwiftUI পজিশনগুলি কেবল তাদের যা কিছু পাওয়া যায় তা রূপান্তর করে।nicely decoupled.
SQLite সঙ্গে সম্পূর্ণ টেক্সট অনুসন্ধান বাস্তবায়ন
যেমন আমি আগে উল্লেখ করেছি, এটি সৌভাগ্যবান যে আপনি FTS বৈশিষ্ট্যগুলির সাথে একটি SQLite সংস্করণ আমদানি করতে পারেন: iOS 11 থেকে শুরু করে, এটি বক্সের বাইরে পাওয়া যায়।without extra setupএটি আমার সঙ্গীত লাইব্রেরিতে বিভ্রান্ত অনুসন্ধানকে অন্তর্ভুক্ত করতে সহজ করে দিয়েছে।without any third-party dependenciesউপরন্তু, আমি নিয়মিত চাহিদাগুলির জন্য SQLite.swift লাইব্রেরি ব্যবহার করেছি (যা কম্পাইল-টাইম সুরক্ষা সহ একটি ধরনের চাহিদা বিল্ডার হিসাবে কাজ করে); তবে, FTS চাহিদাগুলির জন্য, আমি নিয়মিত SQL বিবৃতিগুলি ব্যবহার করতে হয়েছিল।
সাকিবেরপিসি 5এটি আমাকে ফাইল নাম এবং শিল্পী, অ্যালবাম এবং শিরোনামের মতো মেটাডেটা ছাড়া অতিরিক্ত ইন্ডেক্সিং অবকাঠামো ছাড়াই অনুসন্ধান করতে দেয়।
FTS টেবিল নির্মাণ
Domain |
Swift actor / repo |
FTS5 table |
Columns that get indexed |
---|---|---|---|
Library songs |
|
|
|
Source-browser paths |
|
|
|
লাইব্রেরি গান
SQLiteSongRepository
songs_fts
artist
,title
,album
,albumArtist
ব্রাউজার পথ
SQLiteSourcePathSearchRepository
source_paths_fts
fullPath
,fileName
আমি দুটি FTS5 টেবিল ব্যবহার করেছি: একটি সূচক গানগুলির জন্য ( শিল্পী / শিরোনাম / অ্যালবাম) এবং একটি ফাইল পথগুলির জন্য ফোল্ডার আমদানি করার সময়।songs
,source_paths
FTS এরread-only for the UIসমস্ত লিখা রিপোজিটরগুলির ভেতরে ঘটে, যাতে কোনও জায়গা ছড়িয়ে পড়ে না।
অনুসন্ধান ইন্ডেক্স তৈরি করুন
SQLite এর ভিত্তিক FTS5 দ্রুত অনুসন্ধান সহজ করে তোলে. এখানে একটি সহজ টেবিল সংজ্ঞা আমি ব্যবহার করেছি:
try db.execute("""
CREATE VIRTUAL TABLE IF NOT EXISTS songs_fts USING fts5(
songId UNINDEXED,
artist, title, album, albumArtist,
tokenize='unicode61'
);
""")
ব্যবহৃতunicode61
টোকেনাইজার নিশ্চিত করে যে বহু ধরনের চরিত্রগুলি পরিচালিত হয়।UNINDEXED
তাই তারা শব্দটি শব্দবিন্দুতে ছড়িয়ে দেয় না।
তথ্য নির্ভরযোগ্যভাবে আপডেট
জিনিসগুলি সহজ এবং নিরাপদ রাখার জন্য, আমি আপডেটগুলি প্যাকেজ করেছি এবং লেনদেনগুলিতে অন্তর্ভুক্ত করেছি।
func upsertSong(_ song: Song) async throws {
db.transaction {
// insert or update main song data
// insert or update search index data
}
}
Fuzzy অনুসন্ধান
ব্যবহারকারী বন্ধুত্বপূর্ণ অনুসন্ধানের জন্য, আমি স্বয়ংক্রিয়ভাবে ওয়াইল্ডকার্ড সমর্থন যোগ করি. যদি আপনি "লিমিন" টাইপ করেন, তাহলে এটি অভ্যন্তরীণভাবে "লিমিন*" অনুসন্ধান করে, তাত্ক্ষণিক ফলাফল দেয় এমনকি আংশিক অনুরোধগুলির সাথেও।
আমি এছাড়াও SQLite এর ভিত্তিক স্মার্ট র্যাঙ্কিং ব্যবহার করি (bm25
) অতিরিক্ত জটিলতা ছাড়া আরো প্রাসঙ্গিক ফলাফল ফেরত:
SELECT s.*
FROM songs s JOIN songs_fts fts ON s.id = fts.songId
WHERE songs_fts MATCH ?
ORDER BY bm25(songs_fts)
LIMIT ? OFFSET ?;
মোটামুটি, কাঁচা SQLite ব্যবহার আমাকে প্রয়োজনীয় নমনীয়তা দিয়েছে: পূর্বাভাসযোগ্য পরিকল্পনা, স্থানীয়-প্রথম অ্যাক্সেস, এবং শক্তিশালী সম্পূর্ণ টেক্সট অনুসন্ধান, কোনও নেটওয়ার্ক নির্ভরতা বা বহিরাগত পরিষেবা প্রবর্তন ছাড়া।
iOS ফাইল এবং বুকমার্ক সঙ্গে কাজ
iOS এ, অ্যাপ্লিকেশনগুলি ফাইলের অবস্থানগুলির জন্য স্থায়ী বুকমার্কগুলি সংরক্ষণ করতে পারে, কিন্তুsecurity-scoped bookmarks, যা অ্যাপ্লিকেশনের স্যান্ডবক্সের বাইরে ফাইলগুলির জন্য বিস্তৃত অ্যাক্সেস প্রদান করে, শুধুমাত্রmacOSiOS অ্যাপ্লিকেশনগুলি ফাইল পথগুলি মনে রাখতে নিয়মিত বুকমার্কগুলি ব্যবহার করতে পারে এবং ডকুমেন্ট প্লেয়ারের মাধ্যমে অ্যাক্সেসের জন্য আবার অনুরোধ করতে পারে, তবে এই অ্যাক্সেসটি নীরবে অব্যাহত থাকার জন্য নিশ্চিত করা হয় না।অ্যাপলের বইমার্ক ডকুমেন্টেশন.
এই সমস্যা হ্রাস করার জন্য, আমি একটি ফ্ল্যাব্যাক মেশিন বাস্তবায়ন করেছি যা ফাইলগুলি কপি করেapp's own sandboxed containerএটি সিকিউরিটি সীমিত বুকমার্কগুলির দুর্বল জীবনযাত্রা এড়াতে পারে যা আইওএস অনুমোদনগুলি পুনরুদ্ধার করে থাকলে নীরবে ভেঙে যেতে পারে. ফাইলগুলি প্রাকৃতিকভাবে ব্যাকগ্রাউন্ডে কপি করে, যখন বুকমার্কটি বৈধ থাকে, তখন অডিও ফাইলের অপরিহার্য রেফারেন্স অ্যাক্সেস করার কোন ঝুঁকি নেই.
এই পদ্ধতিটি এছাড়াও ইনডেক্সিং গতি উন্নত করে। আমি ফোল্ডারের কাঠামো একবার স্ক্যান করতে পারি (অ্যাক্সেস সক্রিয় থাকলে), শুধুমাত্র প্রাসঙ্গিক অডিও ফাইলগুলি আমদানি করতে পারি, এবং নিরাপদে গভীরভাবে নকল ডিরেক্টরিগুলি ক্রস করতে পারি. কিন্তু নির্ভরযোগ্যভাবে বাইরের অবস্থান থেকে পৃথক অডিও ফাইলগুলি পুনরায় প্লে, বিশেষ করে ডিভাইসটি পুনরায় চালু করার পরে,আমার কাছে এখনো সমাধানহীন সমস্যাএতে বোঝা যাচ্ছে কিভাবেunder-supportedএই ব্যবহারের ক্ষেত্রে, এমনকি ন্যাশনাল অ্যাপগুলির জন্য, এবং এটি এখনও কতটা জটিলhandle file access reliably on iOS.
Playback এবং UI তৈরি করুন
মেটাডাটা পার্সিং
অডিও ফাইল থেকে মেটাডাটা বিশ্লেষণ করার জন্য, আমি অ্যাপলেরAVFoundation frameworkবিশেষ করে এইAVURLAssetক্লাস, যা মিডিয়া ফাইল মেটাডেটা, যেমন শিরোনাম, অ্যালবাম শিল্পী, ইত্যাদি পরীক্ষা করার অনুমতি দেয় যদিও মেটাডেটা পাসিং ন্যাশনাল এসডি কে দ্বারা পরিচালিত হয়, ট্র্যাক নম্বরগুলির মতো নির্দিষ্ট ক্ষেত্রগুলি ID3 ট্যাগ থেকে ম্যানুয়ালভাবে অনুসন্ধান করতে হবে।GitHub অনুসন্ধানউদাহরণগুলি খুঁজে বের করতে, কারণ আনুষ্ঠানিক ডকুমেন্টেশনটি এজেন্টসের ক্ষেত্রে কভারেজের অভাব ছিল।
AVFoundation এর সাথে অডিও প্লেব্যাক
লাইব্রেরি ইনডেক্স করার পরে, একটি অডিও প্লেয়ার বাস্তবায়ন বেশ সহজ মনে হয়: আপনাকে শুধু একটি ইন্সটিলাইজ করতে হবেAVAudioPlayer
এছাড়াও, জীবনের মানের বৈশিষ্ট্যগুলির জন্য: কন্ট্রোল সেন্টার থেকে সঙ্গীত বাজানো, আমাকে কন্ট্রোল সেন্টারটি বাস্তবায়ন করতে হয়েছিল।AVAudioPlayerDelegate
প্রোগ্রাম এবং এছাড়াও অ্যাপলের মধ্যে আটকেMPRemoteCommandCenter
, যা ডেভেলপারদের সিস্টেম স্তরের প্লেয়ার কন্ট্রোলগুলিতে প্রতিক্রিয়া দেয়।
অ্যাপল, ডেভেলপার লক-ইন এবং ভবিষ্যত
এখানে উন্নয়নের সময় কী চিহ্নিত হয়েছে:
খারাপ
Xcode's limitations remain frustrating.রিয়েল টাইম SwiftUI প্রিভিউ অবশ্যই একটি পদক্ষেপ অগ্রগতি, কিন্তু সামগ্রিক উন্নয়ন অভিজ্ঞতা এখনও ফ্লুটার পাঁচ বছর আগে প্রস্তাবিত: কঠোর VSCode ইন্টিগ্রেশন, রিয়েল টাইম সিমুলেটর পুনরায় লোড, এবং পরিচিত ডাবগিং সরঞ্জাম।
Lack of editor flexibility.Neovim বা VSCode এ Swift এর জন্য ভাষা সার্ভার প্রোটোকল (এলএসপি) সমর্থন সেট আপ করার জন্য অতিরিক্ত টুলিং প্রয়োজন, যেমনxcode-build-server
, এবং এখনও সম্পূর্ণরূপে ওয়েব-প্রথম ইকোসিস্টেমের ডেভেলপার অভিজ্ঞতার সাথে সামঞ্জস্যপূর্ণ নয়।
Some corners of Apple's SDK still live in Objective-C land.স্পটলাইট ফাইল অনুসন্ধান, উদাহরণস্বরূপ, শুধুমাত্রNSMetadataQuery
, যা Key-Value Observing (KVO) এবং string keys ব্যবহার করে, এখনও কোন Swift-friendly wrapper নেই।
SwiftUI's declarative UI is great, but debugging iCloud interactions still requires manual mocks.SwiftUI প্রিভিউগুলি iCloud অধিকারগুলি অন্তর্ভুক্ত সম্পূর্ণ অ্যাপ্লিকেশন আচরণকে অনুকরণ করতে পারে না, তাই আপনাকে ম্যানুয়ালভাবে ক্লাউড ইন্টারেক্টিভেশনগুলি মজা করতে হবে, একটি সামান্য বিরক্তিকর কিন্তু উল্লেখযোগ্য।
ভালো
Async/await.অবশেষে, আমি কোন বিরক্তিকর কলবাক্স ছাড়াই একটি জরুরি হিসাবে I / O-bound সমন্বিত কোড লিখতে পারি।
Plethora of native libs.হ্যাঁ, আপনি React Native/Flutter ইকোসিস্টেমের মতো ওপেন সোর্স লিঙ্কগুলির দ্বারা সীমাবদ্ধ নন. এখানে আপনি আপনার কোম্পানির / পণ্য ওয়েবসাইটের পরিবর্তনের চেয়ে "আরো গুরুত্বপূর্ণ" কিছু বিকাশ করতে অনেক বেশি স্বাধীনতা পেয়েছেন (স্বল্প মোবাইল-প্রথম অভিজ্ঞতার কারণে). অনেক অ্যাপলের এপিআইগুলি উদাহরণগুলির সাথে উপলব্ধ, যা শুরু করা সহজ করে দিয়েছে।
SwiftUIহ্যাঁ, ইন্টারফেস নির্মাণ করার রিয়েট স্টাইল পদ্ধতি আরও উৎপাদনশীলতা এবং অনুসন্ধানের জন্য স্থান দেয়।
ট্যাগ: নির্মাণ সহজ হতে হবে
হ্যাকিংয়ের 1.5 সপ্তাহ পরে, আমি এমন সফটওয়্যার পেতে সক্ষম হয়েছি যা আমার চাহিদাগুলি সঠিকভাবে পূরণ করে:local/offline music playerএটি ক্লাউড স্টোরেজ থেকে অডিও ফাইল আমদানি করতে পারে।
কিন্তু ডেভেলপাররা দ্রুত বুঝতে পারেন যে তারা আজকাল তাদের নিজস্ব ডিভাইসগুলিতে অ্যাপগুলি সহজে বিস্তৃত করতে পারে না এবং এটি সম্পর্কে ভুলতে পারে: অ্যাপগুলি শুধুমাত্রডেভি সার্টিফিকেট ছাড়া 7 দিন, এবং তারপর, আপনাকে এটি পুনর্গঠন করতে হবে, যদি না আপনি অ্যাপলকে ডেভেলপমেন্ট প্রোগ্রামে নিবন্ধন করার জন্য 99 ডলার পরিশোধ করেন।
ডেভি সার্টিফিকেট ছাড়া 7 দিনএমনকি পরেওDMA Act in the EUইউরোপীয় ইউনিয়নের ব্যবহারকারীরা এখন তৃতীয় পক্ষের বাজার থেকে সরাসরি একটি ডেভেলপার সাইট থেকে অ্যাপ্লিকেশন ইনস্টল করতে পারেন, কিন্তু শুধুমাত্র যদি সেই ডেভেলপার এখনও অ্যাপলের $ 99 / বছর প্রোগ্রামে নিবন্ধিত হয় এবং অ্যাপলের বিকল্প শর্তাবলী সম্মত হয়।
একটি উদ্ভাবনী প্রযুক্তি কোম্পানি সক্রিয়ভাবে গণতান্ত্রিক অ্যাপ্লিকেশন ডেভেলপমেন্টের পথ বন্ধ করে দেয়।আইওএসে উল্লেখযোগ্য সীমাবদ্ধতা: অ্যাপলের 16-18.x আপডেটগুলির পরেও, iOS PWAs এখনও Safari এর স্যান্ডবক্সের ভিতরে চলছে. তারা WebGL2 এবং ওয়েব-পাস পায়, কিন্তু তারা ওয়েব ব্লুটুথ / ইউএসবি / এনএফসি, ব্যাকগ্রাউন্ড সিনাক্স, বা ~50 মেগাবাইটের বেশি গ্যারান্টেড স্টোরেজ পায় না।
আজকাল, আইটি আধুনিক সফ্টওয়্যার ডেভেলপমেন্টের জটিলতাকে কমিয়ে দিয়েছে, যাতে কেউ অজানা প্রযুক্তির সাথে সমস্ত প্রয়োজনীয় জ্ঞান সরবরাহ করে অ্যাক্সেসযোগ্যভাবে সমাধান করতে পারে. আপনি স্পষ্টভাবে দেখতে পারেন যে ওয়েব ডেভেলপমেন্টটি অ-টেকনিক্যাল লোকেদের কাছ থেকে আরও আগ্রহ পেয়েছে যারা তাদের ধারণাগুলি বহু প্রযুক্তির উপর বিশেষজ্ঞতা ছাড়াই তৈরি করার উপায় আছে. কিন্তু মোবাইল অ্যাপ্লিকেশনগুলির ক্ষেত্রে, আপনাকে কেবলমাত্র শিল্পী নিয়মগুলি খেলতে হবে.এমনকি যদি আপনি নিজেই এটি তৈরি করেন, নিজের জন্য, অ্যাপল এখনও শেষ কথা বলেএকই কোম্পানি যা একবার স্বাধীন ডেভেলপারদের ক্ষমতা দেয় এখনtight restrictions that hinder personal app developmentAI নতুন সরঞ্জামগুলি তৈরি করতে আগের চেয়ে সহজ করে দিয়েছে, যদি না আপনি আইওএসের জন্য নির্মাণ করছেন, যেখানে গেটটি এখনও লক করা হয়।
বামপন্থী
- iTunes Match - অ্যাপল সমর্থন
- অ্যাপল ডকুমেন্টস - Apple Docs
- FTS5 - SQLite ডকুমেন্টেশন
- অ্যাপ্লিকেশন স্টোর (App Store)
- EXPO ফাইল সিস্টেম ডকুমেন্টেশন
- অ্যাপল ডেভেলপার প্রোগ্রাম তথ্য (7 দিনের বিল্ডিং)
- অ্যাপল কমিউনিটি: ফাইল অ্যাপ্লিকেশন & MP3 প্লেয়ার