লাইব্রেরী? স্ট্যাটিক? ডায়নামিক? না ফ্রেমওয়ার্ক? অন্য প্রকল্পের ভিতরে প্রকল্প


151

আমার একটি বিদ্যমান আইওএস অ্যাপ্লিকেশন রয়েছে এবং আমি পরীক্ষার স্বাচ্ছন্দ্যের জন্য অন্য একটি প্রকল্প হিসাবে বিকাশ করছি এমন একটি বিশাল সংখ্যক কোড যুক্ত করতে চাই। নতুন অংশটি মূলত বিভিন্ন ভাগ করে নেওয়ার পরিষেবা ইত্যাদিতে একটি চিত্র সাশ্রয় করার বিষয়টি নিয়ে কাজ করে .. কারণ যে ভাগ করে নেওয়ার কোডটি অনেকগুলি পরীক্ষার এবং ভবিষ্যতের আপডেটের প্রয়োজন, তাই আমি ভাবছিলাম যে এই কোডটিকে আমার বিদ্যমান অ্যাপটিতে অন্তর্ভুক্ত করার সবচেয়ে ভাল উপায়।

আমি জানি না এটি স্ট্যাটিক লাইব্রেরি, ডায়নামিক লাইব্রেরি বা কাঠামো হওয়া উচিত এবং সত্যই, আমি পার্থক্যটি কী তা সত্যই নিশ্চিত নই বা আমার কীভাবে এটি সম্পর্কে যাওয়া উচিত এবং এটি Xcode এ সেট আপ করা উচিত।

আমি শুধু জানি যে আমার ভাগ করে নেওয়ার কোডের জন্য একটি পৃথক পরীক্ষা এবং আপডেট করার অ্যাপ রাখতে হবে এবং প্রধান অ্যাপটি এটি ব্যবহার করতে চাই।


আপনি ছাতা ফ্রেমওয়ার্ক তৈরি করতে পারেন যা ফ্রেমওয়ার্কের অভ্যন্তরে ফ্রেমওয়ার্কের মতো কিছু রয়েছে stackoverflow.com/a/27638841/1582217
মোহাম্মদ ইফতেখার কুরেশি

উত্তর:


204

প্রথমত, কিছু সাধারণ সংজ্ঞা (আইওএসের জন্য নির্দিষ্ট):

স্ট্যাটিক লাইব্রেরি - সংকলনের সময় সংযুক্ত কোডের একক, যা পরিবর্তিত হয় না।

যাইহোক, আইওএস স্ট্যাটিক লাইব্রেরি হয় না ইমেজ / সম্পদ (শুধুমাত্র কোড) ধারণ করার অনুমতি দেওয়া। আপনি যদিও মিডিয়া বান্ডেল ব্যবহার করে এই চ্যালেঞ্জটি পেতে পারেন ।

আরও ভাল, আরও আনুষ্ঠানিক সংজ্ঞা এখানে উইকিপিডিয়ায় পাওয়া যাবে

ডায়নামিক লাইব্রেরি - কোডের একটি ইউনিট এবং / অথবা রানটাইমের সময় সংযুক্ত সম্পদের পরিবর্তন হতে পারে

তবে, শুধুমাত্র অ্যাপলকে আইওএসের জন্য ডায়নামিক লাইব্রেরি তৈরির অনুমতি রয়েছে। আপনাকে এগুলি তৈরি করার অনুমতি নেই, কারণ এটি আপনার অ্যাপ্লিকেশনটিকে প্রত্যাখ্যান করবে। ( এই বিষয়ে নিশ্চিতকরণ এবং যুক্তির জন্য এই অন্যান্য এসও পোস্টটি দেখুন )।

সফ্টওয়্যার ফ্রেমওয়ার্ক - একটি সংকলিত কোড যা কোনও কার্য সম্পাদন করে ... সুতরাং, আপনার কাছে আসলে একটি স্ট্যাটিক কাঠামো বা ডায়নামিক কাঠামো থাকতে পারে , যা সাধারণত উপরের সংস্করণগুলির সংকলিত সংস্করণ।

দেখুন সফটওয়্যার ফ্রেমওয়ার্ক উপর উইকি আরো বিস্তারিত জানার জন্য।

সুতরাং আইওএসে আপনার একমাত্র বিকল্পটি মূলত একটি স্ট্যাটিক লাইব্রেরি বা স্ট্যাটিক কাঠামো ব্যবহার করা হয় (মূল পার্থক্য হ'ল স্থির কাঠামোটি .aপ্রায়শই একটি সংকলিত ফাইল হিসাবে বিতরণ করা হয় , তবে একটি স্ট্যাটিক লাইব্রেরি কেবল একটি সাবপ্রজেক্ট হিসাবে অন্তর্ভুক্ত থাকতে পারে - আপনি দেখতে পারেন সমস্ত কোড - যা প্রথমে সংকলিত হয় এবং এর ফলস্বরূপ .aফাইলটি প্রকল্প দ্বারা নির্ভরতা হিসাবে ব্যবহৃত হয়)।

এখন আমরা এই শর্তাদি সম্পর্কে পরিষ্কার (এর) হয়েছি, একটি স্থির লাইব্রেরি স্থাপন এবং আইওএসের জন্য মিডিয়া বান্ডেল সমর্থন করা খুব কঠিন নয়, এবং কীভাবে এটি করা যায় সে সম্পর্কে অনেক টিউটোরিয়াল রয়েছে। আমি ব্যক্তিগতভাবে এটির জন্য সুপারিশ করব:

https://github.com/jverkoey/iOS-Framework

এটি একটি দুর্দান্ত সোজা-ফরোয়ার্ড গাইড এবং "জাল স্ট্যাটিক লাইব্রেরি" ব্যবহার করার অসুবিধা নেই ... আরও তথ্যের জন্য এটি পরীক্ষা করে দেখুন ...

একবার আপনি আপনার স্ট্যাটিক লাইব্রেরি তৈরি করার পরে, এটি বিভিন্ন প্রকল্পে ব্যবহারের জন্য গিটের মধ্যে একটি উপ-মডেল হিসাবে অন্তর্ভুক্ত করা যত সহজ ।

শুভকামনা

সম্পাদনা

একটি প্রকল্পের মধ্যে একটি সাবপ্রজেক্ট সম্পর্কে , যতদূর আমি জানি, এটি সঠিকভাবে কাজ করতে / সংকলন করতে, আপনাকে অবশ্যই একটি কমপাইল চেইন স্থাপন করতে হবে যেখানে সাবপ্রজেক্টটি প্রথমে সংকলিত হয়, যা একটি স্থিতিশীল কাঠামো .aফাইল তৈরি করে যা নির্ভরতা হিসাবে ব্যবহৃত হয় প্রকল্প দ্বারা

এখানে আরও দরকারী টিউটোরিয়াল যা এ সম্পর্কে কথা বলে:

http://www.cocoanetics.com/2011/12/sub-projects-in-xcode/

সম্পাদনা 2

আইওএস 8-এর হিসাবে, অ্যাপল এখন বিকাশকারীদের গতিশীল ফ্রেমওয়ার্কগুলি তৈরি করার অনুমতি দেয়! (দ্রষ্টব্য: একটি গতিশীল কাঠামো অন্তর্ভুক্ত করতে আপনার অ্যাপ্লিকেশনটির আইওএস 8 এর ন্যূনতম লক্ষ্য থাকতে হবে ... ব্যাক পোর্টিং অনুমোদিত নয়))

এটি একটি নতুন প্রকল্পের টেম্পলেট হিসাবে যুক্ত করা হয়েছে। এক্সকোড 6.1 এ এটি পাওয়া যাবে:

New Project -> iOS -> Framework & Library -> Cocoa Touch Framework

এখনও অবধি, মনে হচ্ছে সাবপ্রজেক্টটি আমি যা চাই তা এবং নিবন্ধটি নিখুঁত ছিল। আমি একটি অদ্ভুত পার্শ্ব প্রতিক্রিয়া লক্ষ্য করেছি: আমার মূল প্রকল্পের ভিতরে যে সাবপ্রজেক্টটি আমি টেনে নিয়েছি সেগুলিরও আমার পরীক্ষার কোড রয়েছে (ভিউকন্ট্রোলার এবং নিব, অ্যাপ্লিগেট ইত্যাদি), এবং আমি নিশ্চিত করেছি যে আমি যে ক্লাসগুলিতে ব্যবহার করতে চাইছি মূল প্রকল্পটি স্ট্যাটিক লাইব্রেরিতে ব্যবহার করার জন্য পরীক্ষা করা হয়। তবে কোনও কারণে, যখন আমি আমার মূল প্রকল্পের নিব ফাইলটিতে সংযুক্তি করতে যাই, এটি আমার সাবপ্রজেক্টের আউটলেট এবং ক্রিয়াগুলিও দেখায়। এটি অবশ্যই কিছু বিভ্রান্তির কারণ হতে পারে। এগুলি থেকে মুক্তি পেতে কোনও পরামর্শ? ধন্যবাদ!
পিজ্জাফিল্মস

কোনও গতিশীল প্রকল্পকে কী টেনে এনে একটি স্ট্যাটিক প্রকল্পে ফেলে দেওয়া যেতে পারে, যার ফলে এটি একটি স্ট্যাটিক প্রকল্প হয়? আমি সত্যিই বিভ্রান্ত, কিছু স্পষ্টতা আসলেই দুর্দান্ত হবে! অগ্রিম ধন্যবাদ :-)
রবীন্দ্রনাথ আকিলা

1
@ জেআরজি-ডেভেলপার ব্যাক পোর্টিং গতিশীল কাঠামো অনুমোদিত যদি আপনি কিছু নিয়ম মেনে
চলেন

কম ন্যূনতম লক্ষ্য নির্ধারণ এবং পাঠাগারটি optionচ্ছিক করা কি সম্ভব?
কুকুদাস

1. আপনি স্ট্যাটিক লাইব্রেরি, গতিশীল গ্রন্থাগার, কাঠামোর কয়েকটি সুপরিচিত উদাহরণ অন্তর্ভুক্ত করতে পারেন? ২. আপনি কোথায় এমন কাজ করতে হবে তার উদাহরণ দিতে পারেন? ৩. কৌতুহল একটি পোড এবং একটি স্ট্যাটিক লাইব্রেরির মধ্যে পার্থক্য কি?
মধু

30

মাচ-ও ফাইল ফর্ম্যাট (মাচ অবজেক্ট - .o)

আইওএস দুনিয়াতে প্রতিটি উত্স ফাইলকে অবজেক্ট ফাইলে রূপান্তর করা হয় - এবিআই [সম্পর্কে] মাচ-ও ফাইল [সম্পর্কে] যা একটি চূড়ান্ত সম্পাদনযোগ্য বান্ডেল (যেমন অ্যাপ্লিকেশন, ফ্রেমওয়ার্ক ...), ফাইল (যেমন লাইব্রেরি ...) হিসাবে প্যাকেজ হয়ে থাকবে) এবং এর আচরণটি [সম্পর্কে] দ্বারা নির্ধারিত হয়Mach-O type

Packageএকটি ডিরেক্টরি যা নিজেকে ফাইল হিসাবে আচরণ করে - opaque file। এটি ব্যবহারকারীর অভিজ্ঞতার জন্য অভ্যন্তরীণ কাঠামোয় কিছু পরিবর্তন আনাকে জটিল করার জন্য তৈরি করা হয়েছিল যা অনাকাঙ্ক্ষিত প্রোগ্রামের আচরণের কারণ হতে পারে। প্যাকেজটি এ Document Packageবা এর সাথে ব্যবহৃত হয় Bundle। আপনি Show Package Contentsএকটি ফাইন্ডার ব্যবহার করতে পারেন

Bundleসেই কোডের জন্য বাইনারি (এক্সিকিউটেবল কোড) এবং সংস্থানগুলি (যেমন চিত্র, নিবস ...) সংগঠিত করার জন্য একটি নির্দিষ্ট কাঠামোর একটি ডিরেক্টরি is বান্ডলে Info.plist[সম্পর্কে] ফাইল রয়েছে। বান্ডেলটি বিকাশকারীদের অভিজ্ঞতার জন্য তৈরি করা হয়েছিল । এছাড়াও এটি প্যাকেজ করা যেতে পারে। বিভিন্ন ধরণের বান্ডিল রয়েছে:

  • application bundle - Application target
  • framework bundleএবং versioned bundleএকটি সাব টাইপ হিসাবে -Framework Target
  • loadable bundle(ওরফে plug-in bundle) - Bundle target(ইউআই টেস্টিং বান্ডেল, ইউনিট টেস্টিং বান্ডেল)
  • অন্যরা ( dSYM[প্রায়] বান্ডিল)

Application- .ipa, .app[সম্পর্কে] - packaged application bundle- লঞ্চযোগ্য প্রোগ্রাম।

Tests- packaged loadable bundleযা বাইনারি পরীক্ষা করতে ব্যবহৃত হয়। প্লাগ-ইন আর্কিটেকচার আমাদের বিদ্যমান বাইনারিগুলিতে পৃথক মডিউল হিসাবে একটি নতুন কার্যকারিতা (পরীক্ষার কেস) যুক্ত করতে দেয়

গ্রন্থাগার ও ফ্রেমওয়ার্ক

ইনভার্জনওফকন্ট্রোল-এ মার্টিন ফওলার

একটি লাইব্রেরি মূলত ফাংশনগুলির একটি সেট যা আপনি কল করতে পারেন, এই দিনগুলিতে সাধারণত শ্রেণিতে ভাগ করা হয়। প্রতিটি কল কিছু কাজ করে এবং ক্লায়েন্টকে নিয়ন্ত্রণ ফিরিয়ে দেয়।

ফ্রেমওয়ার্কটিতে কিছু বিমূর্ত নকশা তৈরি করা হয়েছে, এতে আরও আচরণ অন্তর্নিহিত রয়েছে it এটি ব্যবহার করার জন্য আপনাকে ফ্রেমওয়ার্কের বিভিন্ন জায়গায় আপনার আচরণটি সাবক্লাসিং বা নিজের ক্লাসে প্লাগ করে sertোকানো দরকার। ফ্রেমওয়ার্কের কোডগুলি তখন আপনার পয়েন্টগুলিতে এই কোডগুলিতে কল করে। প্রোগ্রামটির প্রধান নিয়ন্ত্রণটি উল্টানো হয়, আপনার থেকে কাঠামোর দিকে সরানো হয়। (নিয়ন্ত্রণ বিপর্যয়)

আইওএসে গ্রন্থাগার ও ফ্রেমওয়ার্ক

Libraryএক বা একাধিক আর্কিটেকচারের জন্য সংকলিত মাচ-ও অবজেক্ট ফাইলের [স্ট্যাটিক বা ডায়নামিক চেক] সংকলন।

Static library- .a(ওরফে স্ট্যাটিক সংরক্ষণাগার গ্রন্থাগার, স্ট্যাটিক ভাগ লিঙ্ক গ্রন্থাগার [ডক] ) - যখন আপনি আপনার আবেদন মধ্যে এটি যোগ স্ট্যাটিক linker সময় সংকলন সময় লাইব্রেরি থেকে অবজেক্ট ফাইলগুলি একত্রীকরণ এবং এক এক্সিকিউটেবল মধ্যে আবেদন অবজেক্ট ফাইলগুলি সহ তাদের প্যাকেজ হবে ফাইল। অসুবিধাটি একটি বড় আউটপুট ফাইল

এক্সকোড 9.0 থেকে, সুইফট স্ট্যাটিক লাইব্রেরি সমর্থিত।

Dynamic library- .dylib(ওরফে ডায়নামিক শেয়ার্ড লাইব্রেরি, শেয়ার করা অবজেক্ট, ডায়নামিকালি লিঙ্কড লাইব্রেরি [ডক] ) অ্যাপ্লিকেশনটির লোড বা রানটাইমের সময় কার্যকর হওয়ার সাথে গতিশীলভাবে সংযুক্ত , তবে এতে অনুলিপি করা হয়নি। অনুশীলন অন অ্যাপের প্যাকেজে ফাইল সহ ফ্রেমওয়ার্ক ফোল্ডার থাকবে । সমস্ত আইওএস এবং ম্যাকোস সিস্টেম লাইব্রেরি । অসুবিধা হ'ল ধীরে ধীরে প্রবর্তন সময় যেহেতু সমস্ত গতিশীল লাইব্রেরি অনুলিপি করা এবং লিঙ্ক করা উচিত।.dylibdynamic

[স্থির বনাম গতিশীল সংযোগ]

Text-based stub library- .tbd[সম্পর্কে] , এটি একটি পাঠ্য স্টাব dynamic libraryযা একটি লক্ষ্য ডিভাইসে অবস্থিত। ফলস্বরূপ আপনার বান্ডলে কোনও গতিশীল লাইব্রেরি প্যাকেজ করা উচিত নয়। এটি একটি আকার প্রভাব আছে।

Frameworkওরফে binary framework- .frameworkহ'ল একটি not packaged framework bundle(বিকাশকারীদের সহজেই শিরোনাম এবং সংস্থানসমূহের দিকে নজর দেওয়ার জন্য) যাতে একটি সংকলিত static or dynamicগ্রন্থাগার, শিরোনামের ফাইল এবং সংস্থান রয়েছে।

Static frameworkstatic libraryএর সংস্থানগুলি সহ একটি প্যাকেজ ধারণ করুন ।

Dynamic frameworkdynamic libraryসংস্থান এবং সংস্থান রয়েছে । এগুলি ছাড়াও, গতিশীল কাঠামোয় একই ডায়নামিক লাইব্রেরির বিভিন্ন সংস্করণকে একটি একক বান্ডেলে অন্তর্ভুক্ত করতে পারে ( versioned bundle)

[স্ট্যাটিক বনাম গতিশীল কাঠামো]

Embedded frameworkএটি dynamic frameworkএমনটি যা অ্যাপের স্যান্ডবক্সে থাকে। সাধারণ কোড এবং সংস্থানগুলি ভাগ করে নেওয়ার জন্য এই প্রকারটি সবার আগে তৈরি করা হয়েছিল extension এটি যখন ডিপ্লোয়মেন্ট টার্গেট আইওএস 8+ থাকে তখন এটি উপলব্ধ।

Umbrella framework [সমষ্টিগত লক্ষ্য] এমন একটি কাঠামো যা অন্যান্য ফ্রেমওয়ার্কগুলি ধারণ করে। এটি আইওএসে আনুষ্ঠানিকভাবে সমর্থিত নয় এবং এ কারণেইবিকাশকারীদের তাদের [অফিসিয়াল ডক] তৈরি করার পরামর্শ দেওয়া হয় না । বাস্তবে এটি উপ-ফ্রেমওয়ার্ক (বা নেস্টেড ফ্রেমওয়ার্কস) এর একটি সেট। যখন আপনি একটি কাঠামো তৈরি করেন যার নির্ভরতা থাকে, তখন কোনও গ্রাহক (যেমন একটি অ্যাপ্লিকেশন) আপনার কাঠামোর পাশাপাশি প্রকল্পের সাথে এই নির্ভরতা যুক্ত করার জন্য দায়ী। একজন বিকাশকারী হিসাবে, ভোক্তা থেকে আপনার দায়িত্বের প্রতি এই দায়িত্ব স্থানান্তর করার কোনও উপায় অনুসন্ধান করার চেষ্টা করা স্বাভাবিক। ফলস্বরূপ আপনি মনে করেন যেএটি উদ্ধার তবে সাধারণত এটি সংস্করণগুলি পরিচালনা এবং এটি তৈরি এবং সমর্থন করার জটিলতার সাথে একটি গুরুতর সমস্যা নিয়ে আসে।Umbrella framework

Fake Framework- এটি এক্সটেনশন static libraryসহ একটি বান্ডিল তৈরির জন্য নির্দিষ্ট অপারেশনের ফলাফল .frameworkযা নিজেকে হিসাবে হিসাবে আচরণ করবে dynamic framework। এই টেকনিকটি তখন ব্যবহার করা হয়েছিল যখন কোনও ফ্রেমওয়ার্ক টেম্পলেট না থাকায় এক্সকোড কোনও কাঠামো তৈরি করা সমর্থন করে না। একটি জাল কাঠামোর উপলব্ধি । এক্সকোড 6 এর সাহায্যে অ্যাপল আইওএস ফ্রেমওয়ার্ক সমর্থন যুক্ত করেছে।

Modular Framework[সম্পর্কে] -@importএটি এমন একটি কাঠামো যা.modulemapভিতরেএকটিফাইল থাকে। মডিউলটিতে সাবমডিউল থাকতে পারে। প্রধান সুবিধা হ'ল আপনি একটি বিল্ড সময় সাশ্রয় করুনModular Framework

Universal Library or Framework(ওরফে ফ্যাট) [লিপো] [সমষ্টি লক্ষ্য] একাধিক আর্কিটেকচার ধারণ করে। উদাহরণস্বরূপ আপনার রিলিজ বিল্ডে এমন কিছু খিলানকে সমর্থন করা উচিত যা আপনি [কেবলমাত্র_অ্যাকটিভিউ মার্চ] এর মাধ্যমে নিয়ন্ত্রণ করতে পারবেনBuild Active Architecture Only

Dependency[সম্পর্কে] আপনি আপনার টার্গেটের অংশ হিসাবে তৃতীয় পক্ষের কোডটি ব্যবহার করতে সক্ষম। এটি আপনাকে প্রচুর উত্স থেকে কোড পুনরায় ব্যবহার করতে সহায়তা করে - অন্য প্রকল্প, একই কর্মক্ষেত্রের প্রকল্প, অন্য লক্ষ্য, গ্রন্থাগার, ফ্রেমওয়ার্ক ইত্যাদি from

স্ট্যাটিক লাইব্রেরি কীভাবে তৈরি এবং ব্যবহার করবেন:

কীভাবে ডায়নামিক ফ্রেমওয়ার্ক তৈরি এবং ব্যবহার করতে হয় [ স্থিতিতে পরিবর্তন]

[এক্সকোড বিল্ড সিস্টেম]
[এক্সকোড উপাদানগুলি]
[গতিশীল লিংক]


1
অনেক সুইফ্ট টিউটোরিয়ালে এর উল্লেখ করা হয়েছে যে অবজেক্টিভ সি ডায়নামিক লাইব্রেরি সমর্থন করে না, যেখানে সুইফট সমর্থন করে, [ altexsoft.com/blog/engineering/… ] তবে আমি জানি, ওএস 8 এর পরে অবজেক্টিভ সি ডায়নামিক লাইব্রেরি সমর্থন করে। আপনি কি এই ব্যাখ্যা করতে পারেন?
প্রতিমা

@ প্রতিমা, আপনি আইওএসের জন্য উদ্দেশ্য সি-তে একটি গতিশীল কাঠামো তৈরি করতে সক্ষম হবেন
yoAlex5

1
"স্ট্যাটিক ফ্রেমওয়ার্কে এর সংস্থানগুলি সহ একটি স্ট্যাটিক লাইব্রেরি থাকে" " কোথা থেকে এই সংজ্ঞা এসেছে? আফাক, স্থির কাঠামোর "কপি বান্ডিল রিসোর্স" বিল্ড ফেজ যেমন স্থির লাইব্রেরির মতো কাজ করে না। স্ট্যাটিক ফ্রেমওয়ার্ক এবং স্ট্যাটিক লাইব্রেরির মধ্যে পার্থক্য কী?
toshi0383

@ toshi0383 আপনি কি স্ট্যাটিক লাইব্রেরি (.a) এবং এর সংস্থানসমূহ (.বান্ডেল) কে একক ফ্রেমওয়ার্কে মার্জ করার কোনও উপায় খুঁজে পেয়েছেন যা আমরা ভোক্তাকে বিতরণ করতে পারি?
ব্যবহারকারী 121095

2

আপনি কোকোপডসের জন্য .podspec ফাইলও তৈরি করতে পারেন ( http://guides.cocoapods.org/making/private-cocoapods.html#1.-create-a-private-spec-repo ) এবং অন্য পোডের মতো এটি ব্যবহার করুন কেবলমাত্র পার্থক্য যে এটি আপনার প্রাইভেট পোড এবং বাইরের বিশ্বের কাছে দৃশ্যমান নয় (আপনার পোড কোরডাটা মডেল তৈরি করা উচিত তবে কী হবে তা আমি নিশ্চিত নই, তবে বিষয়টি আমি বুঝতে পারি না)।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.