এটি একটি প্রত্যাশিত সংকলক আচরণ এবং খুব ভাল কারণে।
আমি মনে করি যে বেশিরভাগ লোকেরা এই ইস্যুগুলিতে দৌড়াদৌড়ি Application Target
করছেন Framework Target
এবং তারা সি এবং অবজেক্টিভ সি হেডারগুলিকে কাঠামোর ছাতার শিরোনামে যুক্ত করা শুরু করার পরে এপ্লিকেশনের ব্রিজিং শিরোনামের মতো আচরণ করবে বলে প্রত্যাশা করে যা ভিন্ন আচরণ করে। ছাতা শিরোনামটি আসলে মিশ্র সুইফ্ট, আইজেক্ট-সি ফ্রেমওয়ার্কের জন্য মনোনীত করা হয়েছে এবং এর উদ্দেশ্যটি আপনার কাঠামোর উদ্দেশ্য-সি বা সি-র মধ্যে যে বহিরাগত বিশ্বের এপিআইগুলিকে প্রকাশ করছে। এর অর্থ আমরা সেখানে যে শিরোনাম রেখেছি তা জনসাধারণের সুযোগের মধ্যে থাকা উচিত।
এটি এমন কোনও স্থান হিসাবে ব্যবহার করা উচিত নয় যা উদ্দেশ্যমূলক-সি / সি শিরোনামগুলি প্রকাশ করে যা আপনার কাঠামোর সুইফ্ট কোডটিতে আপনার কাঠামোর অংশ নয়। কারণ সেক্ষেত্রে এই শিরোনামগুলি আমাদের ফ্রেমওয়ার্ক মডিউলটির অংশ হিসাবে বহিরাগতের কাছেও প্রকাশিত হবে, যা প্রায়শই আমরা যা করতে চাই না কেননা এটি পরিমিতি ভঙ্গ করে। (এবং ঠিক এই কারণেই ফ্রেমওয়ার্ক মডিউলগুলিতে নন-মডিউলার কোনও ডিফল্ট অন্তর্ভুক্ত করার অনুমতি দেয় )
আপনার ফ্রেমওয়ার্কের সুইফ্ট কোডটিতে অবজেক্টিভ সি / সি লাইব্রেরিটি প্রকাশ করার জন্য, আমাদের যেমন লাইব্রেরির জন্য একটি পৃথক সুইফ্ট মডিউলটি সংজ্ঞায়িত করা উচিত। তারপরে একটি স্ট্যান্ডার্ড সুইফ্ট import YourLegacyLibrary
ব্যবহার করা যেতে পারে।
আমি এটি কিছু সাধারণ দৃশ্যে প্রদর্শন libxml2
করতে পারি: আমাদের কাঠামোটিতে এম্বেড করা।
1. আপনার প্রথমে একটি module.modulemap
ফাইল তৈরি করা দরকার যা এইভাবে দেখাবে:
ওএসএক্স কাঠামোর জন্য:
module SwiftLibXML2 [system] {
header "/usr/include/libxml2/libxml/xpath.h"
export *
}
আইওএস কাঠামোর জন্য:
module SwiftLibXML2 [system] {
header "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/libxml2/libxml/xpath.h"
export *
}
কেবল এটিই হ'ল এটি হেডার এবং অন্য কোনও শিরোনামগুলিকে আপ করে যা এটি সুইফ্ট মডিউলের অভ্যন্তরে উল্লেখ করে, যাতে সুইফ্টটি তখন এই সি ইন্টারফেসগুলির জন্য সুইফ্ট বাইন্ডিংগুলি তৈরি করতে সক্ষম হবে।
২. তারপরে আপনার এক্সকোড প্রকল্প ডিরেক্টরিতে একটি ফোল্ডার তৈরি করুন SwiftLibXML2
এবং এই মডিউলটিকে সেখানে রাখুন mod
3. ইন সেটিংস বিল্ড , অ্যাড $(SDKROOT)/usr/include/libxml2
করতে শিরোলেখ অনুসন্ধান পথ
4. ইন সেটিংস বিল্ড , অ্যাড $(SRCROOT)/SwiftLibXML2
করার আমদানি পথ
5. অধীনে প্রকল্পের সাধারণ ট্যাব, যোগ libxml2.tbd
করার লিঙ্কড অবকাঠামো ও লাইব্রেরি ।
এখন আপনি এই মডিউলটি যেখানে প্রয়োজন তা আমদানি করুন:
import SwiftLibXML2
(আপনি যদি আরও সম্পূর্ণ মডিউলটি দেখতে চান তবে ম্যাপের উদাহরণ হিসাবে, আমি ডারউইনের মডিউলটি উল্লেখ করতে পরামর্শ দেব mod আধুনিক ম্যাপে /usr/include/module.modulemap
, আপনাকে সেখানে যাওয়ার জন্য এক্সকোড কমান্ড-লাইন সরঞ্জাম ইনস্টল করতে হবে, রেফারেন্স মিস / ইউএস / ওএস এক্স এল ক্যাপিটনে অন্তর্ভুক্ত থাকতে হবে )