আমি কীভাবে বিটকোড সক্ষম করে একটি স্ট্যাটিক লাইব্রেরি xcode বিল্ড করব?


89

এক্সকোড 7 বিটকোডটি উপস্থাপন করেছে যা কিছুটা এলএলভিএম ইন্টারমিডিয়েট বাইনারি যার অর্থ অ্যাপল এর সার্ভারগুলি আমার জড়িততা ছাড়াই বিভিন্ন আর্কিটেকচারের জন্য আমার অ্যাপ পুনরায় সংকলন করতে পারে।

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

  • ld: 'Lookback(Lookback.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. (যদি লিবটি এক্সকোড 6 দিয়ে নির্মিত হয়)
  • ld: warning: full bitcode bundle could not be generated because 'Lookback(Lookback.o)' was built only with bitcode marker. The library must be generated from Xcode archive build with bitcode enabled (Xcode setting ENABLE_BITCODE) (যদি লিবটি এক্সকোড 7 দিয়ে একটি সাধারণ এক্সকোডবিল্ড সহ নির্মিত হয়)

আমার কাছে একটি বিল্ড স্ক্রিপ্ট রয়েছে যা একটি ডিভাইস + সিমুলেটর সর্বজনীন বাইনারি তৈরি করে, তাই আমি বিল্ড এবং সংরক্ষণাগারটি ব্যবহার করতে পারি না, বরং আমি xcodebuildআমার স্ক্রিপ্ট থেকে কমান্ডলাইন থেকে চালিত করি। আমি কীভাবে xcodebuildএকটি যথাযথ বিটকোড-সক্ষম গ্রন্থাগার তৈরি করতে পারি ?


এইচআই @ নেভিন আইএম বিটকোড ব্যবহার করে এমন একটি অ্যাপে আপনার এসডিকে সংকলন করার চেষ্টা করছে। কোন উপায় আছে?
স্টফ 8১

@ Stoff81 দুঃখিত, আমি এটিতে কাজ করছি। আমার প্রথমে আমার সমস্ত নির্ভরতা বিটকোডের সাথে কাজ করা দরকার এবং এটি বেশ কিছুটা কাজ।
nevyn

উত্তর:


137

বিটকোড একটি সংকলন-সময় বৈশিষ্ট্য (কোনও লিঙ্ক-টাইম বৈশিষ্ট্য নয়) যার অর্থ হ'ল বিটকোড দিয়ে নির্মিত হলে প্রতিটি .o ফাইলটিতে __bitcode নামে একটি অতিরিক্ত বিভাগ থাকা উচিত। আপনার বাইনারি চালিয়ে বিটকোড-সামঞ্জস্যপূর্ণ কিনা তা আপনি নিশ্চিত করতে পারেন otool -l (my .o or .a file) | grep __LLVM

আপনি যখন সাধারণভাবে নির্মাণ করেন, এক্সকোড কোনও ঝাঁকুনির অনুরোধে বিল্ড ফ্ল্যাগ যুক্ত করে -fembed-bitcode-marker। এটি এমন এক ধরণের বলে মনে হচ্ছে 'বিটকোডটি যদি সক্ষম করা হত তবে এটি সেখানে চলে যাবে', এবং বাস্তবে বিটকোড সক্ষম করে না।

আপনি যখন "বিল্ড অ্যান্ড আর্কাইভ" করবেন তখন এই পতাকাটি প্রতিস্থাপন করা হয় -fembed-bitcode, যা সত্যিকার অর্থে একটি বিটকোড-সক্ষম বাইনারি তৈরি করে।

xcodebuildব্যবহারের দুটি উপায় রয়েছে বলে মনে হচ্ছে -fembed-bitcode:

  • এর xcodebuild -target LookbackSDK archiveপরিবর্তে 'সংরক্ষণাগার' ক্রিয়াটি ব্যবহার করুন xcodebuild -target LookbackSDK buildbuild/ফোল্ডারের পরিবর্তে আপনার এক্সকোড অর্গানাইজারে বাইনারিগুলি রাখার পার্শ্ব-প্রতিক্রিয়া রয়েছে , যদিও আপনি এটি ব্যবহার করে এটি ব্যবহার করতে পারেন -exportArchive -archivePath ./build(ধন্যবাদ @ জেনস এ্যাটন )
  • এর সাথে অন্যান্য সি পতাকা যুক্ত করে পতাকাটির জোর করে ব্যবহার করুন OTHER_CFLAGS="-fembed-bitcode"। আপনার xcodebuildঅনুরোধটি দেখতে এমন কিছু দেখাচ্ছে xcodebuild OTHER_CFLAGS="-fembed-bitcode" -target LookbackSDK build

পরেরটির কি আমি তাই বেছে নেওয়া হয়েছে আমি আমার build সিস্টেম পরিবর্তন করতে হবে না যে, কিন্তু এটা যে ফাইলের জন্য সতর্কবার্তা, এখন উভয় যেহেতু উৎপন্ন হবে -fembed-bitcode-markerএবং -fembed-bitcodeঝনঝন পাঠানো হয়। লাকিলি পরেরটি জয় করে, একটি বিটকোড-সক্ষম গ্রন্থাগার তৈরি করে!

রিসোর্স


9
এফডাব্লুআইডাব্লু, আপনি -fembed-bitcode-markerযুক্ত -Qunused-argumentsকরেও উপেক্ষা করার বিষয়ে সতর্কতা থেকে মুক্তি পেতে পারেন ।
mstorsjo

কোন ফ্রেমওয়ার্কের এক্সকোডবিল্ডের জন্য কোন এক্সপোর্টফর্ম্যাট ব্যবহার করে? কেবলমাত্র "আইপা", "পিকেজি" এবং "অ্যাপ" সংজ্ঞায়িত বলে মনে হচ্ছে ( বিকাশকারী.অ্যাপল . com/ লিবারি / ম্যাক / ডকুমেন্টেশন / ডারউইন / রেফারেন্স / ))।
ফ্যাবিয়ান কাবেল

@ নিউভিন এখনও আমার মূল অ্যাপটি তৈরি করতে পারেনি যার কাস্টম ফ্রেমওয়ার্ক ফাইল রয়েছে যার মধ্যে উল্লিখিত পতাকাযুক্ত একটি বিল্ড স্ক্রিপ্ট রয়েছে।
রাভোরিনন্দন

otool -l (আমার .o বা .a ফাইল)। আপনার অর্থ কী অটুল-এল (আমার .o বা .a ফাইল) | গ্রেপ __ বিটকোড?
মাইক এম

4
@ মাইকম আসলেই নেই otool -l myfile.o | grep __LLVM, কারণ সেখানে সত্যিকারের বিটকোডের পরিবর্তে কেবলমাত্র বিটকোড চিহ্নিতকারী থাকা সত্ত্বেও একটি __bitcode বিভাগ থাকবে।
nevyn

41

এক্সকোড 8 দিয়ে আমি কাজ করতে পারিনি OTHER_CFLAGS="-fembed-bitcode"। আমি was built without full bitcode. All frameworks and dylibs for bitcode must be generated from Xcode Archive or Install buildযখন আমার স্থিতিশীল কাঠামো সম্বলিত একটি অ্যাপের সংরক্ষণাগার বিল্ড তৈরি করার চেষ্টা করেছি তখন আমি সেই লাইনের সাথে কিছুটা চালিয়ে যেতে থাকি।

আমি যা খুঁজছিলাম তা হ'ল:

BITCODE_GENERATION_MODE=bitcode

আমি আসলে একটি মোট টার্গেটের ভিতরে একটি রান স্ক্রিপ্ট ব্যবহার করছি, সম্পূর্ণ এক্সকোডবিল্ড লাইনটি দেখতে (ঠিক রেফারেন্সের জন্য):

xcodebuild BITCODE_GENERATION_MODE=bitcode OTHER_CFLAGS="-fembed-bitcode" -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build


4
+1, BITCODE_GENERATION_MODE=bitcodeপদ্ধতিটি পছন্দসই বলে মনে হচ্ছে, যেমন এই উত্তরেও প্রস্তাবিত ।
উইলিয়াম ডেনিস

এটি আমার সমস্যাটিও স্থির করে যেখানে ডিফল্ট উত্তর আর দেয় না।
কামচাতকা

জীবন রক্ষাকারী! ধন্যবাদ!
vidalbenjoe

17

একবার আপনি স্ট্যাটিক লিবের জন্য বিটকোড সমর্থন যুক্ত করলে এটি এক্সকোড with এর সাথে সামঞ্জস্যপূর্ণ হবে না won't অ্যাপটি সংরক্ষণাগারভুক্ত হবে না।

@ নেভিনের উত্তর আমাকে কিছুটা বিভ্রান্ত করায় আমি বিটকোডের সেটিংটি স্পষ্টভাবে উল্লেখ করতে চাই।

বিল্ড সেটিংসে যান, "কাস্টম সংকলক পতাকা" অনুসন্ধান করুন। অ্যাড -fembed-bitcode। এটি বিটকোড দিয়ে আপনার lib তৈরি করবে।


6

বিল্ড সেটিংসে প্রকল্পটি নির্বাচন করুন -> অন্যান্য সি পতাকা, ডিবেগকে -ফ্যাম্বড-বিটকোড-মার্কার সেট করুন এবং -ফ্যাম্বিড-বিটকোডে ছেড়ে দিন

বিল্ড সেটিংসে, BITCODE_GENERATION_MODE নামের সাথে একটি ব্যবহারকারী-সংজ্ঞায়িত বিল্ড সেটিং যুক্ত করতে উপরের সাইন + এ ক্লিক করুন এবং ডিবাগকে চিহ্নিতকারী হিসাবে সেট করুন, বিটকোডে ছেড়ে দিন

রিলিজ হিসাবে স্কিমা সম্পাদনা করুন তারপরে পছন্দসই গ্রন্থাগারটি ক্লিক করুন। একটি ফাইল এবং বিল্ড পাথ পান। লাইব্রেরি ফর্ম রিলিজ ফোল্ডার পান।

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