এক্সকোড মাইপ্রজেক্টনাম-ব্রিজিং-শিরোলেখের অস্তিত্ব নেই


118

আমি আমার উদ্দেশ্য-সি প্রকল্পে সুইফট ব্যবহার শুরু করতে চাই। সুতরাং আমি একটি দ্রুত শ্রেণি যুক্ত করেছি:

import Foundation
@objc class System : NSObject {
    @objc func printSome() {
        println("Print line System");
    }
}

এবং এটি একটি .m ফাইলে আমদানি করে:

#import "MyProjectName-Swift.h"

আমার প্রকল্পটি তৈরি করার সময় আমি নিম্নলিখিত ত্রুটিটি পাই:

Bridging header 'PathToMyProject/MyProjectName-Bridging-Header.h' does not exist

দ্রষ্টব্য: "বিল্ড সেটিংস-> সুইফ্ট সংকলক - কোড জেনারেশন-> উদ্দেশ্য-সি ব্রাইডিং শিরোলেখ" এর অধীনে মাইপ্রজেক্টনাম-ব্রিজিং-শিরোলেখ সেট করা হয়েছে .h

এই সমস্যাটি সমাধান করার জন্য আমার কী করা উচিত?

কোন সাহায্যের অনেক প্রশংসা করা হয়।

সম্পাদনা: ব্রিজিং-শিরোনাম ফাইল: # যদি সংজ্ঞায়িত হয় (__ has_ ​​অন্তর্ভুক্ত) &&___ অন্তর্ভুক্ত () # # অন্তর্ভুক্ত

#include <objc/NSObject.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>

#if defined(__has_include) && __has_include(<uchar.h>)
# include <uchar.h>
#elif __cplusplus < 201103L
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
#endif
#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif

#if defined(__has_attribute) && __has_attribute(objc_runtime_name)
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
#else
# define SWIFT_RUNTIME_NAME(X)
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_CLASS)
# if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted) 
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
# else
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif

#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif

#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif

#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if defined(__has_attribute) && __has_attribute(objc_designated_initializer)
#  define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
#  define OBJC_DESIGNATED_INITIALIZER
# endif
#endif
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"

#if defined(__has_feature) && __has_feature(modules)
#endif

#pragma clang diagnostic pop

2
MyProjectName-Swift.hএবং MyProjectName-Bridging-Header.hবিপরীত দিকে কাজ। MyProjectName-Swift.hস্বয়ংক্রিয়ভাবে সরবরাহ করা হয়। MyProjectName-Bridging-Header.hযাইহোক, আধা-স্বয়ংক্রিয়ভাবে সরবরাহ করা হয়, অর্থাৎ আপনাকে অবশ্যই এটি সেখানে আছে তা নিশ্চিত করতে হবে। সুতরাং, আপনি কি নিশ্চিত যে আপনি MyProjectName-Bridging-Header.hআপনার প্রকল্প ন্যাভিগেটরে দেখতে পাচ্ছেন ? যদি তা না হয় তবে আপনার প্রকল্পে সেই নামের সাথে একটি ফাইল তৈরি করুন এবং যুক্ত করুন। তারপর আবার চেক করুন যে সেটিং Build এ এটা পাথ সঠিক (এটা আপনার প্রকল্পের তালিকা অন্তর্ভুক্ত করা উচিত MyProjectName/MyProjectName-Bridging-Header.h
Milos

আপনি কি চেক করেছেন আপনার পণ্যের মডিউলটির নাম খালি নেই? (সেটিংস তৈরি করুন -> প্যাকেজিং -> পণ্যের মডিউল নাম)
নিনা

নিনা, হ্যাঁ আমার মডিউলটির নাম "মাইপ্রজেক্টনেম" এবং কিছু কিছু নয়
ব্যবহারকারী 2408952

কিন্তু, আমি ভেবেছিলাম এক্সকোডের এই ব্রাইডিং ফাইলটি স্বয়ংক্রিয়ভাবে উত্পন্ন করার কথা ছিল। সুতরাং না আমার কাছে এই প্রকল্পটি নেই project
ব্যবহারকারী2408952

1
আপনি নিজে ব্রিজিং-শিরোনাম h নির্দিষ্ট করেছেন? আমি দেখছি, 'ব্রাইডিং' এর একটি বানান ভুল রয়েছে
নিনা

উত্তর:


191

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

বিল্ড সেটিংসে আমি নামটি সঠিকভাবে প্রবেশ করিয়েছি, এখানে চিত্র বর্ণনা লিখুন

কিন্তু সংকলকটি ফাইলটি খুঁজে পায় না। এখানে চিত্র বর্ণনা লিখুন

অতএব, যদি আমি প্রকল্পের মূল থেকে আপেক্ষিক পথটি যুক্ত করি (যা আমি যুক্ত করি ./ProjectName/BridgerFileName.h), এখানে চিত্র বর্ণনা লিখুন

এখন এটি সংকলন করে আমি আমার উদ্দেশ্য সি শ্রেণিতে একটি পদ্ধতি কল করতে পারি: এখানে চিত্র বর্ণনা লিখুন


4
আমার জন্য এটি মোটেও ঠিক করে না। দেখে মনে হচ্ছে এক্সকোড আপডেট হওয়া উদ্দেশ্য-সি ব্রিজিং শিরোলেখের ক্ষেত্রে প্রতিক্রিয়া জানায় না।
দারিয়াস মিলিয়াসকাস

আমার সন্ধান করার জন্য অনেক চেষ্টা করেছিল, কিন্তু শেষ পর্যন্ত। ধন্যবাদ, ত্রুটিটি ঠিক করেছেন :)
অ্যান্ডার্স সেরেনসেন

ঠিক আছে! এবং হ্যাঁ আপনার প্রকল্প বিল্ড সেটিংস এবং পাশাপাশি টার্গেট বিল্ড সেটিংস উভয় ক্ষেত্রে এটি করতে ভুলবেন না।
আকাশ ভরদ্বাজ

72

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

এটির জন্য নিম্নলিখিত মানটির প্রয়োজন: লক্ষ্য> [আপনার অ্যাপের লক্ষ্য]> সেটিংস> সুইফ্ট সংকলক - কোড উত্পন্নকরণ> উদ্দেশ্য-সি ব্রিজিং শিরোনাম :

$(SRCROOT)/$(PROJECT_NAME)/$(PROJECT_NAME)-Bridging-Header.h 

নোট করুন যে যদি আপনার প্রকল্পটি যদি একটি সুইফ্ট মডিউল (ফ্রেমওয়ার্ক) হয় তবে মন্তব্যগুলিতে উল্লেখ করা হয়েছে, আপনি পছন্দ করতে পারেন:

$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h

2
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.hআরও সাধারণ হবে :)
গাউসব্লুরিনিক

1
এই একমাত্র উত্তর হওয়া উচিত!
লুকা দাভানজো

$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.hআমার প্রকল্পের ফোল্ডার পর্যন্ত আমি সঠিক পথ পাচ্ছি কিন্তু /$(PROJECT_NAME)আমাকে পছন্দসই পথে না নিয়ে যাচ্ছি ।
iPeter

একই সমস্যা থাকতে পারে এমন অন্যদের জন্য দ্রষ্টব্য - আমি যখন @gaugblurinc মন্তব্যটি অনুলিপি / পেস্ট করেছি তখন স্ট্রিংয়ের 'শিরোনাম' অংশে কিছু অদ্ভুত চরিত্র অনুলিপি করা হয়েছিল। উত্তর থেকে একই স্ট্রিংটি অনুলিপি / পেস্ট করার পরে, এটি দুর্দান্ত কাজ করেছে।
অ্যাডাম জনস

46

যারা ব্রিজিং শিরোলেখ অপসারণ করছেন For

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

  1. যান লক্ষ্যগুলি> [আপনার অ্যাপ TARGET]> সেটিংস বিল্ড> সুইফট কম্পাইলার - সাধারণ> উদ্দেশ্য সি গণনার জমকালো অনুষ্ঠান শিরোলেখ এবং পাথ মুছে দিন। ( এই ধারণার জন্য @ ডোমামাইটকে ধন্যবাদ ।) (এটি সন্ধানের জন্য আপনি কেবল অনুসন্ধান ব্রিজের মধ্যে "ব্রিজিং" টাইপ করতে শুরু করতে পারেন))
  2. প্রাপ্ত তারিখটি মুছুন। এক্সকোড> পছন্দসমূহ> অবস্থানগুলিতে যান এবং উত্পন্ন ডেটা ফোল্ডারের মাধ্যমে ধূসর তীরটি ক্লিক করুন। তারপরে আপনার প্রোজেক্ট ফোল্ডারটি মুছুন।

এখানে চিত্র বর্ণনা লিখুন


22

ইন সুইফট 4.1

আপনার প্রকল্পের আপনার কাছে bridging-Header.hফাইল নেই তবে আপনার প্রকল্পের সেই পথ রয়েছে। এর জন্য আপনাকে সেই পথটি মুছতে হবে ...

targetsফাইল যান এবং নির্বাচন করুন Build Settings, ----> Swift Compiler - General, এবং মুছে দিন bridging-Header.h। স্ক্রিন শট নীচে অনুসরণ করুন ....এখানে চিত্র বর্ণনা লিখুন

মুছুন bridging-Header.hসুইফট কম্পাইলার ফাইল - সাধারণ

এখানে চিত্র বর্ণনা লিখুন

এখন আপনি এই মত পেয়েছেন ...

এখানে চিত্র বর্ণনা লিখুন


14

সুইফট প্রকল্পে ব্রিজ ফাইল যুক্ত করতে।

পদক্ষেপ 1. ফাইলটিতে যান> উদ্দেশ্য-সি ফাইলের সাথে কোকো যুক্ত করুন (অস্থায়ী উদ্দেশ্যে)

এখানে চিত্র বর্ণনা লিখুন

পদক্ষেপ 2. তারপরে নীচের পপ আপ উপস্থিত হবেএখানে চিত্র বর্ণনা লিখুন

এখন ব্রিজিং হেডার বোতামটি তৈরি করুন টিপুন

DONE
আপনি পাবেন BRIGDE ফাইলে বান্ডিল
ধন্যবাদ


13

এগুলি ব্রিজিং শিরোলেখ তৈরির পদক্ষেপ।

  1. ফাইল-> নতুন-> আইওএস-> শিরোনাম ফাইল , ব্রিজিং ফাইলের নামটি "আপনার প্রজেক্টনাম-ব্রিজিং-শিরোলেখ।" এর মতো দিন

  2. বিল্ড- সেটিংস- > উদ্দেশ্য-সি ব্রিজিং শিরোলেখ , কেবল ব্রিজিং শিরোনামের ফাইলের নামটি "প্রকল্পের নাম-ব্রিজিং-শিরোলেখ।" এর মতো করুন give

    দ্রষ্টব্য: ব্রিজিং হেডার ফাইলটি প্রকল্পের মূল মূল ফোল্ডারে থাকা উচিত যেখানে ".xcodeproj" ফাইলটি অবস্থিত। ব্রিজিং হেডার ফাইলটি যদি প্রকল্পের মূল ফোল্ডারে সরানো না হয়। এই ভাবে এক্সকোড ব্রিজ ফাইল অ্যাক্সেস করতে সক্ষম।

  3. প্রকল্পটি তৈরি করুন এবং ব্রিজিং শিরোনামে প্রয়োজনীয় ফাইলগুলি আমদানি করুন।


12

আমার জন্য এটি আমার ব্রিজিং শিরোনাম ফাইলের পথের সামনে $ (SRCROOT) / $ (PROJECT_NAME) / ব্যবহার করতে সহায়তা করেছে


1
এটি একটি বৈধ উত্তর। এটি চিহ্নিত করা উচিত ছিল না। সঠিক উত্তরে পৌঁছানোর জন্য আপনি গাইড হিসাবে $ (SRCROOT) এবং $ (PROJECT_NAME) ব্যবহার করতে পারেন তবে আপনি সম্ভবত প্রতিটি সমাধান অনুলিপি করে আটকে দিতে পারবেন না।
হবিস দ্য টাইগ

এই উত্তরে উপস্থাপিত সমাধানটি আসলে আমার সমস্যাটিকে স্থির করেছে, ধন্যবাদ শ্রীনিবাস পদিদালা
উইলসন

এটির জন্য যান $ ..... আপনার প্রকল্পের নামটি
T_NAME

6

আমার জন্য এটি $(SRCROOT)আমার উদ্দেশ্য-সি ব্রিজিং শিরোনাম পাথের সামনে ব্যবহার করতে সহায়তা করেছিল ।

$(SRCROOT)/swiftLibraries/swiftLibraries-Bridging-Header.h

5

নীচের পদক্ষেপগুলি অনুসরণ করুন:

  1. ব্রিজিং হেডার ফাইল মুছুন। । । (সম্ভবত আপনি ম্যানুয়ালি তৈরি করেছেন) এবং;
  2. উদ্দেশ্য-সি প্রকল্পে নতুন সুইফ্ট ফাইল তৈরি করুন। । । (আমদানি নয়, প্রথমে এটি তৈরি করুন)

হয়তো এই দুটি জিনিস আপনার সমস্যা সমাধানে সহায়তা করবে।


5

নিম্নলিখিত আমার জন্য কাজ করেছে:

  1. ব্রিজিং শিরোলেখ ফাইলটি ".xcodeproj" ফাইলটি যে প্রকল্পের অবস্থিত সেখানে প্রকল্পের মূল মূল ফোল্ডারে থাকা উচিত। প্রকল্প ডিরেক্টরিতে সরান এবং ব্রিজিং শিরোনামটি অন্য কোনও ফোল্ডারের মধ্যে থাকলে সেটিকে রুটে টেনে আনুন এবং ড্রপ করুন।
  2. শিরোনামের নাম বানান ভুল বানান।
  3. উত্পন্ন ডেটা সাফ করুন
  4. লক্ষ্য -> বিল্ড সেটিংস -> সুইফ্ট সংকলক: সাধারণ -> ওজে সি সি শিরোনামের নাম যুক্ত করুন।
  5. আবার পরিষ্কার করে চালান।

2

ব্রিজিং শিরোলেখ ফাইলটি ম্যানুয়ালি তৈরি করা হচ্ছে

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

এখন নেভিগেশন বারে আপনার প্রকল্প> উইন্ডোটি নির্বাচন করুন। প্রকল্পগুলি নির্বাচন করুন এবং সেখান থেকে আপনার উত্পন্ন ডেটা মুছুন।

এখন একটি নতুন ফাইল তৈরি করুন, উত্সটি নির্বাচন করুন এবং তারপরে শিরোনাম ফাইলটি নির্বাচন করুন এবং আপনার ব্রিজিং হেডার ফাইলটি তৈরি করুন। ফাইলের নামটি অবশ্যই আপনার প্রকল্পের নাম -ব্রিজিং-শিরোনাম। হ'ল অবশ্যই এটি তৈরি করতে হবে

আপনার প্রকল্পটি যান> সেটিংস তৈরি করুন> কীওয়ার্ডটি অনুসন্ধান করুন। সুইফ্ট সংকলক - কোড জেনারেশন। অবজেক্টিভ-সি ব্রিজিং শিরোনামে ক্লিক করুন এবং এখন প্রকল্পের নাম -ব্রিজিং-শিরোনামের মতো এই উদ্দেশ্য-সি ব্রিজিং শিরোনামে পথ জুড়ুন .h

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

আপনি যখন নিজের ফাইলটি ম্যানুয়ালি তৈরি করছেন তখন আপনার ব্রিজিং শিরোনাম ফাইলটি দেখতে এমন দেখাচ্ছে।


0

আমাকে যা সহায়তা করেছিল তা হ'ল ফাইলটি একটি ত্রুটি বার্তায় উল্লিখিত পথে ম্যানুয়ালি সরানো। তাই:

  1. আমি ফাইলটি মুছে ফেলেছি (ট্র্যাসে সরানো হয়েছে)
  2. একটি ত্রুটি বার্তায় এটিকে ট্র্যাশ থেকে পথে সরানো হয়েছে
  3. পরে আমাকেও প্রকল্পটি পরিষ্কার করতে হয়েছিল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.