এক্সকোড 4 স্ট্যাটিক লাইব্রেরি নির্ভরতা থেকে পাবলিক হেডার ফাইলগুলি সনাক্ত করতে পারে না


91

সহায়তা অনুসন্ধানে বিকল্প শিরোনাম

  • এক্সকোড শিরোলেখ খুঁজে পাচ্ছে না
  • এক্সকোডে .চা
  • Xcode .h ফাইল পাওয়া যায় নি
  • লেক্সিকাল বা প্রিপ্রসেসর ইস্যু ফাইলটি পাওয়া যায় নি

আমি একটি আইওএস অ্যাপ্লিকেশন প্রকল্পে কাজ করছি যা এক্সকোড ৩ থেকে এসেছিল I আমি এখন এক্সকোড ৪ এ চলে এসেছি আমার প্রকল্পটি বেশ কয়েকটি স্থির লাইব্রেরি তৈরি করে।

এই স্ট্যাটিক লাইব্রেরিগুলি সর্বজনীন শিরোনাম ঘোষণা করে এবং সেই শিরোনামগুলি অ্যাপ্লিকেশন কোড দ্বারা ব্যবহৃত হয়। এক্সকোড ৩.x এ শিরোনামগুলি অনুলিপি করা হয়েছিল (বিল্ড ফেজ হিসাবে) public headers directory, তারপরে অ্যাপ্লিকেশন প্রকল্পে প্রকল্পটি public headers directoryযুক্ত করা হয়েছিল headers search list

এক্সকোড 4 এর অধীনে বিল্ড ডিরেক্টরিটি সরানো হয়েছে ~/Library/Developer/Xcode/DerivedData/my-project

সমস্যাটি হ'ল আমি কীভাবে শিরোনাম অনুসন্ধান সেটিংসে এই নতুন অবস্থানটি উল্লেখ করব? এটা মনে হচ্ছে যে:

  • public headers directoryআপেক্ষিক DerivedData, ডিরেক্টরি কিন্তু
  • headers search ডিরেক্টরিটি অন্য কোনও কিছুর সাথে সম্পর্কিত (সম্ভবত প্রকল্পের অবস্থান)

এক্সকোড 4 এ আইওএস বিকাশের জন্য আমি কীভাবে একটি স্থির লাইব্রেরি লক্ষ্য সেট আপ করব যা নির্ভর করবে হিসাবে নির্ভরতা হিসাবে সংকলনের চেষ্টা করার সময় স্থির লাইব্রেরি ব্যবহার করে এমন ক্লায়েন্টদের জন্য শিরোনাম ফাইলগুলি উপলব্ধ করা হবে?


পথের নামের সাথে সম্পর্কিত হতে পারে। এই পোস্টটি দেখুন। [Xcode 4 স্ট্যাটিক লাইব্রেরি] [1] [1]: stackoverflow.com/questions/6074576/static-libraries-in-xcode-4/...
দিয়েগো Marafetti

উত্তর:


124

এই সমস্যার জন্য আমি যে সমাধানগুলি দেখেছি তার প্রতিটিই হয় অদৃশ্য বলে মনে হয়েছে (অ্যাপ্লিকেশনটির প্রকল্পের শিরোনাম অনুলিপি করা) বা অতিরিক্ত মাত্রায় সরল করা হয়েছে যে তারা কেবলমাত্র তুচ্ছ পরিস্থিতিতে কাজ করে।

সংক্ষিপ্ত উত্তর

আপনার ব্যবহারকারীর শিরোনাম অনুসন্ধানের পথে নিম্নলিখিত পাথটি যুক্ত করুন

"$ (বিল্ড_রোট) /../ ইন্টারমিডিয়েটবিল্ডফিলসপথ / আনইনস্টলড প্রোডাক্ট"

কেন এই কাজ করে?

প্রথমত, আমাদের সমস্যাটি বুঝতে হবে। সাধারণ পরিস্থিতিতে, যখন আপনি চালনা, পরীক্ষা, প্রোফাইল বা বিশ্লেষণ করেন তখন বলতে হয়, এক্সকোড আপনার প্রকল্প তৈরি করে এবং বিল্ড / পণ্য / কনফিগারেশন / পণ্য ডিরেক্টরিতে আউটপুট রাখে , যা U BUILT_PRODUCTS_DIR ম্যাক্রোর মাধ্যমে উপলব্ধ ।

সর্বাধিক স্ট্যাটিক লাইব্রেরি সংক্রান্ত নির্দেশিকা সেটিং সুপারিশ জন শিরোলেখ ফোল্ডার পাথ থেকে $ TARGET_NAME এর , যার মানে আপনার liberal এর সংক্ষিপ্ত রূপ ফাইল হয়ে $ BUILT_PRODUCTS_DIR /libTargetName.a এবং আপনার হেডার পুরা হয় $ BUILT_PRODUCTS_DIR / TargetName। যতক্ষণ না আপনার অ্যাপ্লিকেশনটিতে তার অনুসন্ধানের পথে $ BUILT_PRODUCTS_DIR অন্তর্ভুক্ত থাকবে, ততক্ষণ আমদানি উপরের 4 টি পরিস্থিতিতে কাজ করবে। যাইহোক, আপনি সংরক্ষণাগার দেওয়ার চেষ্টা করার পরে এটি কাজ করবে না।

সংরক্ষণাগারটি কিছুটা ভিন্নভাবে কাজ করে

আপনি যখন কোনও প্রকল্প সংরক্ষণাগারভুক্ত করেন, এক্সকোড আর্কাইভইন্টারমিডিয়েটস নামে একটি আলাদা ফোল্ডার ব্যবহার করে। সেই ফোল্ডারের মধ্যে আপনি / আপনার অ্যাপনাম / বিল্ডপ্রডাক্টসপথ / রিলিজ-আইফোনস / পাবেন। এই ফোল্ডারটিই যখন আপনি কোনও সংরক্ষণাগারটি করেন $ BUILT_PRODUCTS_DIR নির্দেশ করে। আপনি যদি সেখানে সন্ধান করেন তবে দেখতে পাবেন যে আপনার নির্মিত স্ট্যাটিক লাইব্রেরি ফাইলে একটি সিমিলিংক রয়েছে তবে শিরোনাম সহ ফোল্ডারটি অনুপস্থিত।

শিরোনামগুলি (এবং lib ফাইল) সন্ধানের জন্য আপনাকে ইন্টারমিডিয়েটবিল্ডফাইসপ্যাথ / আনইনস্টলড প্রোডাক্টস / এ যেতে হবে। স্থির লাইব্রেরির জন্য যখন আপনাকে YES এ ইনস্টল করুন সেট করতে বলা হয়েছিল তখন মনে রাখবেন ? ঠিক আছে যখন আপনি একটি সংরক্ষণাগার তৈরি করবেন তখন সেটিংসের সেই প্রভাবটি রয়েছে।

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

অনেক খোঁজাখুঁজির পরেও আমি আনইনস্টলড প্রোডাক্টস ফোল্ডারের সাথে যথাযথ অনুরূপ কোনও ম্যাক্রো পাইনি, সুতরাং "B (বিল্ড_রোট) /../ দিয়ে ইন্টারমিডিয়েটবিল্ডফিলসপথ / আনইনস্টলড প্রোডাক্ট"

সারসংক্ষেপ

আপনার স্ট্যাটিক লাইব্রেরির জন্য, নিশ্চিত হয়ে নিন যে আপনি ইনস্টল করা এড়িয়ে গেছেন এবং আপনার সর্বজনীন শিরোনামগুলি $ TARGET_NAME এ স্থাপন করা হয়েছে।

আপনার অ্যাপ্লিকেশানের জন্য, আপনার ব্যবহারকারী শিরোনাম অনুসন্ধানের পথগুলিকে "$ (BUILT_PRODUCTS_DIR)" এ সেট করুন, যা নিয়মিত বিল্ডগুলির জন্য সূক্ষ্ম কাজ করে এবং "$ (BUILD_ROOT) /../ ইন্টারমিডিয়েটবাইল্ডফাইলসপথ / আনইনস্টলড প্রোডাক্টস", যা সংরক্ষণাগার বিল্ডগুলির জন্য কাজ করে।


এটি ডেরিভডডাটা ফোল্ডারের সাথে কীভাবে সম্পর্কিত?
রিচার্ড স্টিলিং

নিয়মিত বিল্ডগুলিতে যান: ডেরিভডডাটা / ওয়ার্কস্পেসনেম-হ্যাশ / বিল্ড / পণ্য / ডিবাগ-আইফোনেস / টার্গেটনেম.এপ --- সংরক্ষণাগার বিল্ডগুলি এতে যান: ডেরিভডডাটা / ওয়ার্কস্পেসনেম-হ্যাশ / বিল্ড / ইন্টারমিডিয়েটস / আর্কাইভআইন্টারমেডিয়েটস / টার্গেটনাম / বিল্ডপ্রডাক্টস / রিলিজ-আইফোন TargetName.app
কলিন

4
আমার জন্য, পুনরাবৃত্ত চেকবক্সের সাথে "$ (বিল্ড_রোট) /../ ইন্টারমিডিয়েটবিল্ডফিলসপথ / আনইনস্টলড প্রোডাক্টস" ব্যবহার করা কার্যকর হয়নি। যত তাড়াতাড়ি আমি পুনরাবৃত্ত পতাকা ছাড়া "$ (বিল্ড_রোট) /../ ইন্টারমিডিয়েটবিল্ডফিলসপথ / আনইনস্টলড প্রোডাক্টস / <নামঅফস্ট্যাটিক লাইব্রেরি" ব্যবহার করেছি, এটি আমার পক্ষে কাজ করেছে।
টিপোশেল

7
মনে রাখবেন যে আপনার B (BUILD_ROOT) /../ ইন্টারমিডিয়েটবিল্ডফিলসপথ / আনইনস্টলডপ্রডাক্টস আসলে $(TARGET_BUILD_DIR)। সংরক্ষণাগার করার সময়ও। ;)
পাস্কাল

4
এক্সকোড 5 এ আমার জন্য: $ (বিল্ড_রোট) /../ ইন্টারমিডিয়েটবিল্ডফিলসপথ / আনইনস্টলড প্রোডাক্টস / অন্তর্ভুক্ত / লাইব্রেরির নাম আমি হ্যাঁ সেট করি নি: সর্বদা ব্যবহারকারীর পথ অনুসন্ধান করুন।
xarly

85

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

আমার পদ্ধতিটি সম্পর্কে আলাদা কী আপনি আপনার সমস্ত বিল্ড কনফিগারেশনের জন্য একক ব্যবহারকারীর শিরোনাম পাথ ব্যবহার করতে পারেন।

আমার পদ্ধতিটি নিম্নরূপ:

একটি ওয়ার্কস্পেস তৈরি করুন

  1. এক্সকোড 4 এর অধীনে ফাইল, নতুন, ওয়ার্কস্পেসে যান।
  2. ফাইন্ডার থেকে আপনি তারপর ব্যবহার করতে চান এমন স্ট্যাটিক লাইব্রেরি এবং আপনি যে নতুন অ্যাপ্লিকেশনটি তৈরি করছেন যা গ্রন্থাগারটি ব্যবহার করে সেগুলির জন্য .xcodeproj প্রকল্পগুলিতে টানতে পারেন। ওয়ার্কস্পেস স্থাপনের জন্য আরও তথ্যের জন্য অ্যাপল ডক্স দেখুন: https://developer.apple.com/library/content/featuredarticles/XcodeConcepts/Concep-Workspace.html

স্ট্যাটিক লাইব্রেরি প্রকল্পের সেটিংস

  1. স্থির গ্রন্থাগারের সমস্ত শিরোনাম "পাবলিক" এ অনুলিপি করা আছে তা নিশ্চিত করুন। এটি স্থির লাইব্রেরি লক্ষ্য> বিল্ড পর্যায়সমূহের সেটিংসের অধীনে করা হয়। "কপির শিরোনাম" পর্যায়ে নিশ্চিত করুন যে আপনার সমস্ত শিরোনাম "পাবলিক" বিভাগের মধ্যে রয়েছে।
  2. এরপরে বিল্ডিং সেটিংসে যান, "পাবলিক শিরোনাম ফোল্ডার পাথ" সন্ধান করুন এবং আপনার লাইব্রেরির জন্য কোনও পথ টাইপ করুন। আমি এটি ব্যবহার করতে পছন্দ করি:

অন্তর্ভুক্ত / গ্রন্থাগার নাম

আমি এটি রেস্টকিটের ব্যবহার থেকে গ্রহণ করেছি এবং এটি আমার সমস্ত স্থির লাইব্রেরির সাথে সর্বাধিক কাজ করে দেখেছি। এটি যা করে তা হ'ল এক্সকোডকে সমস্ত পদক্ষেপগুলি "পাবলিক" শিরোনাম বিভাগে স্থানান্তরিত করার জন্য ধাপ 1-এ আমরা এখানে নির্দিষ্ট করা ফোল্ডারে কপি করতে বলি যা বিল্ডিংয়ের সময় ডেরিভড ডেটা ফোল্ডারের মধ্যে থাকে। রেস্টকিটের মতো আমিও কোনও প্রকল্পে ব্যবহার করছি এমন প্রতিটি স্ট্যাটিক লাইব্রেরি রাখতে একটি "অন্তর্ভুক্ত" ফোল্ডারটি ব্যবহার করতে পছন্দ করি।

আমি এখানে ম্যাক্রোগুলি ব্যবহারও পছন্দ করি না কারণ এটি স্ট্যাটিক লাইব্রেরি ব্যবহার করে প্রকল্পটি কনফিগার করার পরে পরে আমাদের একক ব্যবহারকারী শিরোনাম অনুসন্ধানের পথটি ব্যবহার করতে দেয় allow

  1. "স্কিপ ইনস্টল করুন" সন্ধান করুন এবং নিশ্চিত করুন যে এটি হ্যাঁ সেট করা আছে।

স্ট্যাটিক লাইব্রেরি ব্যবহার করে প্রকল্পের জন্য সেটিংস

  1. স্থির গ্রন্থাগারটি কাঠামোর সাথে বিল্ড পর্যায়সমূহ> লিঙ্ক বাইনারি লাইব্রেরির অধীনে একটি কাঠামো হিসাবে যুক্ত করুন এবং আপনি যে স্ট্যাটিক লাইব্রেরি ব্যবহার করতে চান তার জন্য libLibraryName.a ফাইল যুক্ত করুন।
  2. পরবর্তীটি নিশ্চিত করুন যে প্রকল্পটি ব্যবহারকারী অনুসন্ধানের পথে অনুসন্ধানের জন্য সেট করা আছে। এটি বিল্ড সেটিংস> সর্বদা ব্যবহারকারীর পাথ অনুসন্ধান করুন এর অধীনে করা হয়েছে এবং এটি YES এ সেট করা আছে তা নিশ্চিত করুন।
  3. একই অঞ্চলে ব্যবহারকারী শিরোনাম অনুসন্ধানের পাথগুলি সন্ধান করুন এবং যুক্ত করুন:

    "$ (PROJECT_TEMP_DIR) /../ আনইনস্টল করা পণ্য / অন্তর্ভুক্ত"

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

কর্মক্ষেত্রটি কনফিগার করুন

এখানে আমরা ওয়ার্কস্পেসটি কনফিগার করতে চাই যাতে এটি আমাদের অ্যাপ্লিকেশনটি তৈরি করার সময় স্থির লাইব্রেরি তৈরি করে। এটি আমাদের অ্যাপ্লিকেশানের জন্য ব্যবহৃত স্কিমটি সম্পাদনা করেই করা হয়।

  1. আপনার অ্যাপ্লিকেশনটি তৈরি করে এমন স্কিমটি আপনার নির্বাচিত হয়েছে তা নিশ্চিত করুন।
  2. স্কিমের ড্রপ-ডাউন থেকে, সম্পাদনা প্রকল্পটি চয়ন করুন।
  3. বামদিকে তালিকার শীর্ষে বিল্ড নির্বাচন করুন। মাঝের ফলকে + টিপে একটি নতুন লক্ষ্য যুক্ত করুন।
  4. আপনি যে লাইব্রেরিটি লিঙ্ক করার চেষ্টা করছেন তার স্থির লাইব্রেরিটি দেখতে পাওয়া উচিত। আইওএস স্ট্যাটিক লাইব্রেরি চয়ন করুন।
  5. রান এবং সংরক্ষণাগার উভয় ক্লিক করুন। এটি যখনই আপনি আপনার অ্যাপ্লিকেশনটি তৈরি করেন তখন স্থির লাইব্রেরির জন্য লাইব্রেরিগুলি সংকলন করতে এই স্কিমটিকে বলে।
  6. আপনার অ্যাপ্লিকেশন টার্গেটের উপরে স্থির লাইব্রেরি টানুন। এটি আপনার অ্যাপ্লিকেশন টার্গেটের আগে স্থির লাইব্রেরিগুলি সংকলন করে।

লাইব্রেরি ব্যবহার শুরু করুন

এখন, আপনি ব্যবহার করে আপনার স্থির লাইব্রেরি আমদানি করতে সক্ষম হওয়া উচিত

import <LibraryName/LibraryName.h>

এই পদ্ধতিটি বিভিন্ন কনফিগারেশনের জন্য পৃথকভাবে ব্যবহারকারী শিরোনাম পাথের ঝামেলা ঘিরে ফেলেছে, সুতরাং আপনার সংরক্ষণাগারগুলির জন্য সংকলন করার কোনও সমস্যা নেই।

কেন এই কাজ করে?

এটি সমস্তই এই পথে নির্ভর করে:

"$(PROJECT_TEMP_DIR)/../UninstalledProducts/include"

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


4
আপনি দুর্দান্ত, মানুষ! এটি সত্যই সহায়ক এবং আপনি বর্ণিত হিসাবে এটি কাজ করে।
neevek

4
অসাধারণ. আমি কোথায় ফুল প্রেরণ করব :)
রমেশ

4
এটি সেট আপ করার পরে, আপনারা কেউ কেউ " ...] অচেনা নির্বাচককে ক্লাস 0x ... " পাঠিয়েছেন " আপনি যদি এটি করেন তবে এটি আপনার প্রকল্পের লক্ষ্যগুলি-> প্রকল্প-> বিল্ড সেটিংস-> লিঙ্কিং-> অন্যান্য লিঙ্কার পতাকাগুলিতে যোগ করার চেষ্টা করুন : -ল_লোড
এমকেভাল

নিশ্চিত হয়ে নিন যে ব্যবহারকারীর শিরোনাম অনুসন্ধানের পথগুলি শূন্যস্থান থাকলে উদ্ধৃতিতে রয়েছে।
শ্রদ্ধাবাদ কোড

এক্সকোড ৪.6.২ আমার জন্য "J (PROJECT_TEMP_DIR) /../ আনইনস্টলড প্রোডাক্ট / অন্তর্ভুক্ত" তে কিছুই লিখছে না। আমি কি অনুপস্থিত কোন ধারণা? নাকি এক্সকোডের আচরণ আবার বদলেছে?
সি রোলে

16

এক্সকোড 4 প্রকল্প একটি স্ট্যাটিক লাইব্রেরি সংকলন করতে ব্যর্থ

সম্পর্কিত প্রশ্ন: এক্সকোড 4 এ "লেক্সিকাল বা প্রিপ্রসেসর ইস্যু ফাইলটি পাওয়া যায় নি"

ত্রুটিগুলি অন্তর্ভুক্ত থাকতে পারে; অনুপস্থিত শিরোনাম ফাইল, "লেক্সিকাল বা প্রাক প্রসেসর ইস্যু"

সমাধান:

  1. "ব্যবহারকারী শিরোনাম পাথ" সঠিক কিনা তা পরীক্ষা করুন Check
  2. হ্যাঁ "সর্বদা অনুসন্ধানকারীর পাথ অনুসন্ধান করুন" সেট করুন
  3. আপনার প্রকল্পে একটি গ্রুপ কল "ইনডেক্সিং শিরোলেখ" তৈরি করুন এবং শিরোনামগুলি এই গোষ্ঠীতে টেনে আনুন, অনুরোধ জানালে কোনও লক্ষ্যবস্তুতে যুক্ত করবেন না

11
আরেকটি সহজেই উপেক্ষিত কিন্তু অত্যন্ত গুরুত্বপূর্ণ পদক্ষেপ: আপনার সন্ধানের পথগুলি কোনও স্থান থেকে বাঁচতে ডাবল কোটে আবৃত রয়েছে তা নিশ্চিত করুন। আমি সবসময় এটি করতে ভুলে যাই
ব্র্যাড

ধন্যবাদ ব্র্যাড, এটি অবশ্যই একটি খুব গুরুত্বপূর্ণ এবং সহায়ক মন্তব্য is
জুলিয়ান ডি

15

এটি একটি খুব সহায়ক থ্রেড ছিল। নিজের অবস্থার জন্য গবেষণায়, আমি দেখতে পেলাম যে অ্যাপলের কাছে "আইওএসে স্ট্যাটিক লাইব্রেরি ব্যবহার করা" শীর্ষক সেপ্টেম্বর ২০১২ তারিখে একটি 12-পৃষ্ঠার ডকুমেন্ট রয়েছে। এখানে পিডিএফ লিঙ্কটি রয়েছে: http://developer.apple.com/library/ios/technotes/iOSStaticLibraries/iOSStaticLibraries.pdf

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

আপনার লাইব্রেরির টার্গেটে যদি "কপির শিরোনাম" বিল্ড ফেজ থাকে তবে আপনার এটি মুছে ফেলা উচিত; এক্সকোডে "সংরক্ষণাগার" ক্রিয়া সম্পাদন করার সময় অনুলিপি শিরোনামগুলি পর্যায়ক্রমিক স্থির লাইব্রেরি লক্ষ্যগুলির সাথে সঠিকভাবে কাজ করে না।

এক্সকোড ৪.৪ বা তারপরে নির্মিত নতুন স্ট্যাটিক লাইব্রেরি লক্ষ্যগুলি শিরোনামগুলির জন্য উপযুক্তভাবে কনফিগার করা কপি ফাইলগুলির ফেজ নিয়ে আসবে, সুতরাং এটি তৈরি করার আগে আপনার ইতিমধ্যে একটি আছে কিনা তা পরীক্ষা করে দেখতে হবে। আপনি যদি তা না করেন তবে লক্ষ্য সম্পাদকের নীচে "অ্যাড বিল্ড ফেজ" টিপুন এবং "অনুলিপি ফাইল যুক্ত করুন" নির্বাচন করুন। নতুন কপি ফাইল বিল্ড ফেজটি প্রকাশ করুন এবং "পণ্য ডিরেক্টরি" তে গন্তব্য সেট করুন। / $ {PRODUCT_NAME} অন্তর্ভুক্ত করতে সাবপাথ সেট করুন} এটি ফাইলগুলি আপনার লাইব্রেরির নাম অনুসারে একটি ফোল্ডারে কপি করবে (PRODUCT_NAME বিল্ড সেটিংস থেকে নেওয়া), অন্তর্ভুক্ত নামের একটি ফোল্ডারের ভিতরে আপনার বিল্ট পণ্য ডিরেক্টরিতে inside বিল্ড পণ্য ডিরেক্টরিতে অন্তর্ভুক্ত ফোল্ডারটি অ্যাপ্লিকেশনগুলির জন্য ডিফল্ট শিরোনাম অনুসন্ধানের পথে থাকে, সুতরাং এটি হেডার ফাইলগুলি রাখার উপযুক্ত স্থান।

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


উপরের লিঙ্কটি অনুসরণকারীদের জন্য .. সাবধান! আপনি যে লাইব্রেরি প্রকল্পটি তৈরি করার সময় ডামি টেম্পলেট ফাইলগুলি মুছে ফেলতে বলছেন এমন পদক্ষেপ .. * .pch ফাইলটি মুছে ফেলবেন না .. এটি আপনাকে শেষ পর্যন্ত হতাশ করবে + উপরেরটি + পরামর্শ বিভাগগুলির সাথে কাজ করে না .. এটির জন্য ঠিক আছে যদিও (এটি কোথাও দেখেছি)
অ্যাবড

স্ট্যাটিক লাইব্রেরি তৈরির জন্য অফিসিয়াল অ্যাপল পদ্ধতির একটি লিঙ্ক সরবরাহ করার জন্য ধন্যবাদ। আমি এই পদ্ধতির ব্যবহার করে আমার স্ট্যাটিক লাইব্রেরিটি তৈরি করে শুরু করেছি , তবে সংরক্ষণাগারটিতে অক্ষম হয়েছি । @ আব্বুড - উত্পন্ন পিএইচচি ফাইলটি মুছে ফেলতে সমস্যা কী?
অগাস্টো ক্যালিজেস

যদি আপনি .pch ফাইলটি মুছুন .. প্রকল্পটি কেবল সংকলন করবে না .. (সংরক্ষণাগার বা অন্যথায় উদ্দেশ্যে) ..
অ্যাবড

এটি আমার পক্ষে কাজ করে না W যখন আমি "" দিয়ে এটি বিবরণ আমদানির চেষ্টা করি তখন এটি আমার প্রয়োজন না <> এটি সংরক্ষণাগার করার সময় শিরোনাম সন্ধান করতে সক্ষম হয় না ny কোন ধারণা?
ব্যবহারকারী 1010819

4

http://developer.apple.com/library/ios/#technotes/iOSStaticLibraries/Articles/creating.html

প্রতি অ্যাপল ডকুমেন্টেশন:

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


3

অন্তর্দৃষ্টির জন্য জোনা ওলিয়ামের সমাধান (মাঝ পথে) এবং গিটহাব মডেলটি (মন্তব্যগুলিতে) একবার দেখুন। http://blog.carbonfive.com/2011/04/04/ using-open-source-static-libraries-in-xcode-4/


4
যদিও এটি প্রযুক্তিগতভাবে প্রশ্নের উত্তর দিতে পারে , আপনার পক্ষে উত্তরের সাথে লিঙ্কিত নিবন্ধটির প্রয়োজনীয় অংশগুলি অন্তর্ভুক্ত করা এবং রেফারেন্সের জন্য লিঙ্কটি সরবরাহ করা ভাল rable এটি করতে ব্যর্থ হওয়ায় উত্তরটি লিঙ্ক পচা থেকে ঝুঁকিতে পড়ে।
jscs

2

যোগ $ (OBJROOT) / UninstalledProducts / exactPathToHeaders করার শিরোলেখ অনুসন্ধান পথ।

কোনও কারণে পুনরাবৃত্তিযোগ্য চেকবক্সটি আমার পক্ষে কার্যকর হয়নি এবং আমাকে শিরোনামটি যেখানে রয়েছে সেখানে বাকী পথটি যুক্ত করতে হয়েছিল।

এক্সকোডে লগ নেভিগেটরের অধীনে (ব্রেক পয়েন্ট নেভিগেটরের ডানদিকে ট্যাব) আপনি বিল্ড হিস্টোরি দেখতে পারেন। আপনি যদি প্রকৃত বিল্ড ব্যর্থতা নির্বাচন করেন তবে এর বিশদটি দেখতে এটি প্রসারিত করতে পারেন সেটেনভ PATH এবং আপনার শিরোনাম ফাইলগুলির পথ সেখানে রয়েছে তা নিশ্চিত করে পরীক্ষা করতে পারেন।


পুনরাবৃত্ত চেকবক্সে ভাল নোট, একই ইস্যু এখানে।
কোডজি

হ্যাঁ, আমাকে একটি নির্দিষ্ট সাব-ফোল্ডারও নির্দিষ্ট করতে হয়েছিল, পুনরাবৃত্তির পরীক্ষা করা কার্যকর হয়নি।
অলিভার পারমাইন 16

আমি তবে এই পথটি ব্যবহার করে শেষ করেছি (কেবল তার সংক্ষিপ্ত কারণ) "$ (PROJECT_TEMP_DIR) /../ আনইনস্টলড প্রোডাক্টস / সাবপ্রজেক্টহাইডারস"
অলিভার পারমাইন

2

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

"$(BUILT_PRODUCTS_DIR)/usr/local/include"

usr/local/includeস্থির লাইব্রেরির 'সর্বজনীন শিরোলেখ ফোল্ডার পাথ' সেটিং-এ যা আছে তার অনুসারে আপেক্ষিক URL অংশটি পরিবর্তন করুন


2

আমার ক্ষেত্রে আমার কর্মক্ষেত্রে বেশ কয়েকটি স্থির গ্রন্থাগার প্রকল্প ছিল এবং তাদের একটির সাথে অন্যের সাথে শিরোনাম ফাইলগুলি সহ নির্ভরতা রয়েছে। বিষয়টি ছিল বিল্ডিংয়ের আদেশ নিয়ে। বিল্ড বিভাগের অধীনে প্রকল্পের সম্পাদনা পৃষ্ঠায়, আমি সমান্তরাল বিকল্পটি অপসারণ করেছি এবং নির্ভরতা অনুসারে লক্ষ্যগুলির ক্রমটি সাজিয়েছি এবং এটি সমস্যার সমাধান করেছে


1

আপনার ব্যবহারকারীর শিরোনাম অনুসন্ধানের পথে নিম্নলিখিত পাথ যুক্ত করুন :

$(BUILD_ROOT)/../IntermediateBuildFilesPath/UninstalledProducts

এটি যাচাই!


1

আমি কী নির্বোধ তা দেখানোর ঝুঁকিতে ... আমি সারা বিকেলে আমার .h ফাইলগুলি সন্ধান করতে অস্বীকার করে XCode এ ভুগছি।

তখন বুঝলাম।

যেহেতু আমি "এক্সকোড 4" ব্যবহার করছিলাম, তাই আমি "বুদ্ধিদীপ্তভাবে" আমার সমস্ত প্রকল্পগুলি " এক্সকোড 4 প্রকল্প " নামে একটি ফোল্ডারের সাবফোল্ডারে রাখার সিদ্ধান্ত নিয়েছিলাম " ।

ফোল্ডারের নামের সেই জায়গাগুলি এক্সকোড বিগ-টাইমে গণ্ডগোল করেছে!

এই ফোল্ডারটির নাম " এক্সকোড_4_প্রজেক্টে " রেখে দেওয়া হচ্ছে " এ আমার জীবনে ফিরে এসেছে আনন্দ (এবং কম শপথ গ্রহণ) back

আমাকে আবার মনে করিয়ে দাও, কি বছর?

সম্ভবত কেউ অ্যাপল বিকাশকারীদের বলতে পারে ...


1

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

"$(BUILD_ROOT)/../IntermediateBuildFilesPath/UninstalledProducts/include/"

অন্যান্য উত্তরের তুলনায় "/ অন্তর্ভুক্ত /" উপ-ডিরেক্টরি অন্তর্ভুক্ত নোট করুন। অন্যান্য ব্যবহারকারীরা যেমন উল্লেখ করেছেন, "রিকার্সিভ" বিকল্পটি কিছু করছে বলে মনে হচ্ছে না, তাই আপনি এটিকে এড়িয়ে যেতে পারেন।

আমার প্রকল্পটি এখন নিম্নলিখিত ফর্মটিতে স্থির লাইব্রেরির শিরোনাম ফাইলগুলি আমদানি করার সময় সফলভাবে সংরক্ষণাগারভুক্ত করতে সক্ষম হয়েছিল:

#import "LibraryName/HeaderFile.h"

আপনি যদি আপনার স্ট্যাটিক লাইব্রেরির শিরোনামগুলিকে কোণ বন্ধনী ( ) সহ অন্তর্ভুক্ত না করেন তবে আপনাকে সর্বদা অনুসন্ধান ব্যবহারকারী পাথ সেটিং সক্ষম করার প্রয়োজন হবে না , তবে এটি যদি কোনও সিস্টেম / ফ্রেমওয়ার্ক শিরোনাম না হয় তবে আপনার সত্যিই সেভাবে করা উচিত নয়।#import <LibraryName/HeaderFile.h>


0

এটি একটি সম্পর্কিত সমস্যা যা আমাকে এই প্রশ্নের দিকে নিয়ে গিয়েছিল তাই ডকুমেন্টেশনের জন্য আমি আমার সমাধানটি কঠোরভাবে যুক্ত করছি / এটি ঘেমে যাওয়ার আরও একটি আত্মার ঘন্টা বাঁচাতে পারে

ড্রপবক্সএসডি কে। ফাইল পাওয়া যায় নি

আইওএসের জন্য সংকলন করার জন্য ভেস পাওয়ার চেষ্টা করার অনেক দিন পরে অবশেষে আমি এই সমস্যাটিতে চলে এসেছি। DropboxSDK.hনাগালের স্পষ্টভাবে ছিল search headersআমি এমনকি এটি যোগ framework headersঅনুসন্ধান পাথ, include.hসরাসরি এবং মহান লেন্থ সমস্ত প্রকারের গিয়েছিলাম চেষ্টা এবং পেতে DropboxSDK.hপাওয়া যায় নি।

সমাধান

এক্সপোডিসিটিDropboxSDK.framework ফাইলটিকে Xcode এর মধ্যে টেনে আনুন Project Navigationএবং নিশ্চিত হয়ে নিন যে Copy Files if neededএটি পরীক্ষা করা হয়েছে। আপনার লক্ষ্যটি প্রয়োজনীয় হিসাবে পরীক্ষা করা হয়েছে তা নিশ্চিত করুন।

সতর্কতা

সুস্পষ্ট কাঠামোর অবস্থান সেট করা build phasesআমার পক্ষে কার্যকর হয়নি। আমাকে । ফ্রেমওয়ার্কটি এক্সকোডে টেনে আনতে হয়েছিল এবং ফাইলগুলি আমার প্রকল্পে অনুলিপি করা হয়েছে তা নিশ্চিত করতে হয়েছিল।

# এমবিপি2015 # এক্সকোড 7 # আইওএস 9


0

এটি করার বিভিন্ন জটিল উপায় রয়েছে এবং এই থ্রেডে কিছু খুব স্মার্ট সমাধান প্রস্তাবিত।

এই সমস্ত সমাধানের প্রধান সমস্যাটি হ'ল এটি আপনার গ্রন্থাগারের বহনযোগ্যতা মারাত্মকভাবে হ্রাস করে।

  • প্রতিবার আপনার লাইব্রেরিটি ব্যবহার করে কোনও নতুন প্রকল্প শুরু করা এবং এটি আইটিউনসের জন্য সংরক্ষণাগার স্থাপন করা দরকার, এটি একটি কনফিগারেশন নরক।
  • প্রতিবার যখন আপনার প্রকল্পটি আপনার দল বা গ্রাহকদের সাথে ভাগ করে নেওয়ার দরকার হয়, এটি কোনও কারণে ভেঙে যেতে পারে (প্রসঙ্গ, এক্সকোড সংস্করণ, যাই হোক না কেন, ..)

আমার পছন্দটি অবশেষে কেবল ফ্রেমওয়ার্কগুলি ব্যবহার করা হয়েছে - সর্বদা - অ্যাপলের প্রস্তাবিত (ডাব্লুডাব্লুডিসি ভিডিও) হিসাবে।

এটি এত সহজ এবং শেষে একই কাজ করে!

আর একটি বেশ মার্জিত সমাধান যা কাজ করে বলে মনে হচ্ছে তা হল প্রাইভেট কোকোপড ব্যবহার করা। কোকোপডস সমস্ত কনফিগারেশন কাজ করে, শিরোনাম অনুলিপি এবং তাই।

ফ্রেমওয়ার্ক শিলা!


4
আপনি কোথায় সেট করেন? simply use frameworks - always -
নীল ফলকনার

এটি কোথাও সেট করা হয়নি। এটি কেবল একটি স্থাপত্য পছন্দ ural ফ্রেমওয়ার্কগুলি হ'ল 'আধুনিক গ্রন্থাগারগুলি' যা লিঙ্ক করা ও পরিচালনা করা অনেক সহজ। এই বার্তার সময়, দ্রুত এখনও বাইনারি লাইব্রেরি তৈরি করতে দেয় না।
মোস

0

এখানে আমার জন্য একই সমস্যাটি সমাধান করা হয়েছে।

আমার কাছে একটি অ্যাপ টার্গেট এবং একটি iMessage এক্সটেনশন লক্ষ্য রয়েছে। তারপরে আমার কাছে দুটি এসডিকে (আমার নিজস্ব) ছিল, যা অ্যাপ টার্গেটের সাথে লিঙ্ক করে।

সমস্যাটি ছিল: আমার আইমেজেজ লক্ষ্যটি আমার 2 টি এসডিকে (পৃথক প্রকল্প )ও ব্যবহার করছে, তবে এটি বিল্ড পর্বে -> লাইব্রেরির সাথে লিঙ্ক বাইনারি তাদের সাথে সংযুক্ত ছিল না। আমার অ্যাপ্লিকেশন টার্গেটটির সাথে মেলে আমি সেখানে আইএমেসেজ লক্ষ্যমাত্রায় আমার 2 এসডিকে যুক্ত করতে হয়েছিল এবং এখন এটি সংরক্ষণাগারভুক্ত।

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


0

আপডেট: এক্সকোড 9

উপরের উত্তরগুলি এক্সকোড 9 ব্যবহার করে আমার পক্ষে কাজ করে নি, তবে এই উত্তরটি আমার পক্ষে পুরোপুরি কার্যকর হয়েছিল worked আমি $(OBJROOT)/UninstalledProducts/$(PLATFORM_NAME)/includeআমার "শিরোনাম অনুসন্ধানের পথগুলিতে" যুক্ত করেছি এবং এক্সকোড কোনও সমস্যা ছাড়াই আমার স্থির লাইব্রেরির শিরোনামটিকে লিঙ্ক করেছে।


-18

নিজেকে ঝামেলা বাঁচান এবং এটি করুন = আপনার ম্যাকটিতে নতুন ব্যবহারকারী অ্যাকাউন্ট তৈরি করুন - নতুন ব্যবহারকারী অ্যাকাউন্টের অধীনে প্রকল্পটি খুলুন - সমস্ত সমস্যা অদৃশ্য হয়ে যায়। আপনার সময় বাঁচান এবং আপনার বিচক্ষণতা রাখা। এইসব অদ্ভুত প্রত্যুত্তর সমস্ত সাহায্য করে না !!

শুভকামনা

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