আপনি কি আইওএসের জন্য ডায়নামিক লাইব্রেরি তৈরি করতে এবং রানটাইম এগুলি লোড করতে পারেন?


114

ডায়নামিক লাইব্রেরিগুলি কি আইওএস (আইফোন / আইপ্যাড) এ সমর্থিত?

এক্সকোডে, আমি একটি নতুন প্রকল্প -> ফ্রেমওয়ার্ক এবং লাইব্রেরি -> কোকো লাইব্রেরি (গতিশীল) তৈরি করার চেষ্টা করেছি । প্রকল্পের সেটিংস, আমি সেট বেজ SDK এর কাছে iOS device 4.1এবং লক্ষ্য iOS4.1, কিন্তু এটা একটি build ত্রুটি আছে:

টার্গেট পণ্যের ধরণ 'com.apple.product-type.library.dynamic' নির্দিষ্ট করে, তবে 'আইফোনেসিমুলেটর' প্ল্যাটফর্মের জন্য এমন কোনও পণ্যের ধরণ নেই "।

আমি যে বিল্ডটি নির্বাচন করেছি তা হ'ল সিমুলেটর -> ডিবাগ -> আই 386



4
iOS8 + ভাগ করা লাইব্রেরির উপর ভিত্তি করে ফ্রেমওয়ার্কগুলিকে সমর্থন করে।
ইওনিল

1
@ ইউনিল, আপনি কি এ বিষয়ে বিস্তারিত বলতে পারবেন? আমি এটি সম্পর্কে আরও জানতে চাই, একটি নিবন্ধ বা কিছু তথ্যের লিঙ্কটি অনেক প্রশংসা হবে।
ম্যাক্সিম চেত্রুসকা

উত্তর:


105

এই প্রশ্নটি জিজ্ঞাসা করার সময়, ডায়নামিক লাইব্রেরিগুলি আইওএস দ্বারা সমর্থিত ছিল না এবং ফলস্বরূপ আপনার অ্যাপ্লিকেশনটি প্রত্যাখাত হবে। কেবল স্থির লাইব্রেরি অনুমোদিত

তবে iOS8 এ আপনি গতিশীল লাইব্রেরি এবং ফ্রেমওয়ার্ক ব্যবহার করতে পারেন। এটি "শুধু কাজ" করা উচিত


14
কেউ কেন জানেন কেন? আমার কাছে এটি সম্পূর্ণ উন্মাদ বলে মনে হচ্ছে।
এরিক দে কাস্ত্রো লোপো

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

6
আমি একটি ইন-হাউস অ্যাপ্লিকেশন বিকাশ করছি যা অ্যাপস্টোরের মাধ্যমে বিতরণ করা হবে না, তাই অ্যাপল স্টোরের জন্য অ্যাপলের বিধিনিষেধের বিষয়ে আমি মাথা ঘামাই না। আইওএস অ্যাপের জন্য ডায়নামিক লাইব্রেরি তৈরি করা কি প্রযুক্তিগতভাবে সম্ভব?
আলিয়াকসেই

3
@ আলিয়াক্সেই: প্রযুক্তিগতভাবে হ্যাঁ, না হলে আপনি অ্যাপলের লাইব্রেরিতে লিঙ্ক করতে সক্ষম হবেন না। আফাইক ডায়নামিক লাইব্রেরি সমর্থনটি ম্যাক ওএস এক্সের মতোই। তবে, এক্সকোড এটি সমর্থন করে না, তবে মনে হচ্ছে আপনি বান্ডিলগুলি ব্যবহার করতে পারেন। এই নিবন্ধটি দেখুন
ডার্কডাস্ট

3
সমর্থিত নয় অনুমোদিত হিসাবে অনুমোদিত নয়।
dtech

162

আমি সত্যিই না দ্বিমত পোষণ করছি DarkDust এর উত্তর , কিন্তু যদি আমি আমার ভিতরের বিল ক্লিনটনের চ্যানেলের পারে, এটা কি মানে উপর নির্ভর করে সমর্থিত হয় :)

অ্যাপল চায় না আপনি অ্যাপ স্টোর অ্যাপ্লিকেশনগুলির জন্য এটি করছেন, তবে অপারেটিং সিস্টেম অবশ্যই এটি মঞ্জুরি দেয়। জেলব্রেক অ্যাপগুলি এই কৌশলটি সর্বদা ব্যবহার করে। আপনি সাধারণত একটি ফ্রেমওয়ার্ক / লাইব্রেরিটি গতিশীলভাবে খোলার জন্য একটি মানক ইউনিক্স কৌশল ব্যবহার করেন এবং তারপরে এটি স্টাফ ব্যবহার করেন। Dlopen ফাংশন আপনি পাশ দিয়ে গ্রন্থাগার খুলতে সক্ষম হবেন যে ফ্রেমওয়ার্ক পাথ , বা dylib। জেলinit() ব্রেক ব্রেক অ্যাপ্লিকেশন তৈরির জন্য কিছু ডক্স থেকে , এখানে আপনার নিজের মধ্যে প্রয়োগ করা একটি ফাংশন কল করার একটি উদাহরণ রয়েছে , পৃথক dylib:

#include <dlfcn.h>

initWrapper() {
    char *dylibPath = "/Applications/myapp.app/mydylib2.dylib";

    void *libHandle = dlopen(dylibPath, RTLD_NOW);
    if (libHandle != NULL) {
        // This assumes your dylib’s init function is called init, 
        //    if not change the name in "".
        void (*init)() = dlsym(libHandle, "init");
        if (init != NULL)  {
            init();
        }
        dlclose(libHandle);
    }
}

তদুপরি, আইওএসের জন্য আপনাকে গতিশীল লাইব্রেরি প্রকল্প তৈরি করার অনুমতি দেওয়ার বিরুদ্ধে ডিফল্ট সীমাবদ্ধতা হ'ল এক্সকোডের এমন কিছু যা আপনার কাছে কয়েকটি এক্সকোড এক্সএমএল ফাইল সম্পাদনা করে ওভাররাইড করার ক্ষমতা রাখে:

IOS এ dylib তৈরি এবং ব্যবহার করুন

একবার আপনি এটি করার পরে, আপনি একটি সাধারণ iOS .dlib গ্রন্থাগার তৈরি করতে পারেন এবং উপরের নমুনা কোড অনুযায়ী এটি ব্যবহার করতে পারেন। (হ্যাঁ, আপনি যখনই নতুন এক্সকোড সংস্করণ ইনস্টল করবেন তখন আপনাকে সম্ভবত এই ক্ষমতাটি আনলক করতে হবে)।

সুতরাং, এটি কোনও প্রযুক্তিগত সীমাবদ্ধতা নয়, তবে অ্যাপ স্টোরের নীতি সীমাবদ্ধতা। আপনি যদি অ্যাপ স্টোরের মধ্যে সীমাবদ্ধ না হন তবে আপনি এটি করতে পারেন। নোট যে এই কৌশল নেই না jailbreaking প্রয়োজন, যদিও যদি অ্যাপ্লিকেশন স্যান্ডবক্সভুক্ত হয়, এটি সীমিত হতে পারে যেখানে dylibs থেকে লোড করা যাবে।

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


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

1. সম্পত্তি ফাইল তালিকাতে এই ফাইলগুলি খুলুন: / ডেভেলপার / প্ল্যাটফর্মগুলি / ম্যাকোএসএক্স.প্ল্যাটফর্ম / ডেভেলপার / লাইবারি / এক্সকোড / স্পেসিফিকেশনস / ম্যাকসএক্স পণ্য প্রকার.এক্সসিএসপেক এবং / ডেভেলপার / প্ল্যাটফর্ম / আইফোনসিমুলেটর.প্ল্যাটফর্ম / ডেভেলপার / লাইফেরি / এক্সকোডফিকেশন / আইফোন সিমুলেটার প্রোডাক্টটাইপস.এক্সসিএসপেক

২. " ম্যাকসএক্সএক্স পণ্য প্রকার। Xcspec " এ আইটেমটি সন্ধান করুন যা পণ্যের ধরণ রয়েছে com.apple.product-type.library.dynamicএবং এটিকে " আইফোন সিমুলেটর প্রোডাক্টটাইপস.এক্সসিস্পেক " এ টানুন

এক্সকোড স্ক্রিনশট 1

৩. একই জায়গায় পাওয়া যায় " ম্যাকসএক্সএক্স প্যাকেজ প্রকার। Xcspec " এবং " আইফোন সিমুলেটর প্যাকেজটাইপস। এক্সসিএসপেক " খুলুন ।

৪. প্যাকেজের ধরণ রয়েছে এমন " ম্যাকোসএক্স পণ্য প্রকারের প্রকার। Xcspec " এ আইটেমটি সন্ধান করুন com.apple.package-type.mach-o-dylibএবং এটিকে " আইফোন সিমুলেটর প্যাকেজটাইপস.এক্সসিস্পেক " এ টানুন ।

এক্সকোড স্ক্রিনশট 2

৫. " আইফোন.এস.প্ল্যাটফর্ম " এর জন্য পদক্ষেপগুলি পুনরাবৃত্তি করুন এবং এক্সকোড চালু থাকলে এটি পুনরায় চালু করুন।

এখন, একটি dylib নির্মাণ করা যাক। " কোকো টাচ স্ট্যাটিক লাইব্রেরি " টেম্পলেট দিয়ে শুরু করুন। প্রকল্পের মধ্যে ফাউন্ডেশন.ফ্রেমওয়ার্ক অন্তর্ভুক্ত করা উচিত। ডাইলিব তৈরির জন্য আমি এখানে টেম্পলেটটির উপরে পরিবর্তনগুলি করেছি।

1. টেক্সট এডিটরটিতে ফাইল প্রজেক্ট.পিবিএক্সপ্রজ (এক্সকোড প্রকল্পের ফাইলের বান্ডেলের ভিতরে পাওয়া যায় ) খুলুন । স্ট্রিং " প্রোডাক্ট টাইপ " অনুসন্ধান করুন , এর মানটি এতে পরিবর্তন করুন com.apple.product-type.library.dynamic;

এখন, এক্সকোড দিয়ে প্রকল্পটি খুলুন, প্রকল্প-> প্রকল্প সেটিংস সম্পাদনা করুন এ যান

২. " ইনস্টলেশন ডিরেক্টরি " সেট করা হয়েছে @executable_path/কারণ আমি অ্যাপ্লিকেশনটির এক্সিকিউটিভের মতো একই ডিরেক্টরিতে ডাইলিব স্থাপন করার পরিকল্পনা করেছি।

3. ডায়ামিক লাইব্রেরিতে " ম্যাচ-ও টাইপ " সেট করুন

৪. " এক্সিকিউটেবল এক্সটেনশন " dylib এ সেট করুন

৫. " এক্সিকিউটেবল উপসর্গ " খালি সেট করুন

6. লাইব্রেরিতে একটি বা দুটি সহজ পদ্ধতি যুক্ত করুন এবং এটি তৈরি করুন।

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


2
এক্সকোড ৪.৫ হিসাবে, এই ফাইলগুলি (উদাহরণস্বরূপ) / অ্যাপ্লিকেশনগুলি
ক্রিস

@ ক্রিসিডেভেরাক্স, ধন্যবাদ! আপ-টু-ডেট পাথগুলির জন্য আপনার মন্তব্যটি পরীক্ষা করার জন্য আমি একটি নোট রেখেছিলাম ... অবশ্যই ভবিষ্যতের সংস্করণে এটি আবার পরিবর্তন হতে পারে :)
নট

3
এই উত্তরটির আরও বেশি অগ্রগতি প্রয়োজন (এবং সত্যই এটি গ্রহণযোগ্য উত্তর হওয়া উচিত, তবে আমি সন্দেহ করি যে ব্যবহারকারী 510951 2 বছরের জন্য এসও থেকে দূরে থাকার পরে ফিরে আসবেন)। খুব সুন্দর উত্তর নেট!
chown

1
এখানে কোনও ধরণের মাস্টার ওভাররাইড হওয়া উচিত যেখানে @ চাউন যদি বলে যে একটি উত্তর সঠিক ... এটি খুব ভাল।
টিম

@ পানাগিওটিস, দয়া করে একটি নতুন প্রশ্ন পোস্ট করুন, যাতে এটি সঠিকভাবে মোকাবেলা করা যায়। আপনি যে কোডটি ব্যবহার করছেন তা এবং সমস্ত ত্রুটি বার্তাগুলি দেখান। আপনি যদি চান, আপনি পারেন এছাড়াও এই প্রশ্নের / উত্তর ফিরে লিঙ্ক। আপনি যদি "আইফোন-প্রাইভেটপি" ট্যাগ যুক্ত করেন, আমি এটি দেখতে পাচ্ছি। আপনার উচিত হবে যে এটি অ্যাপ স্টোরের জন্য নয়, বা লোকেরা প্রশ্নটি বন্ধ করতে ভোট দিতে পারে।
নাট ২

0

এক্সকোড 11.4.1 থেকে শুরু করে ডায়নামিক লাইব্রেরি অনুমোদিত নয় (আপনার প্রকল্পটি সমস্ত গন্তব্যের জন্য সংকলন করবে না)। লাইবস / ফ্রেমওয়ার্কগুলি ব্যবহার করার নতুন উপায় হ'ল এক্সকোডবিল্ড থেকে ক্রিয়েট-এক্সসিফ্রেমওয়ার্ক।

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