বিভিন্ন বিল্ড স্কিমের জন্য বিভিন্ন গুগল সার্ভিস-ইনফো.লিস্ট ব্যবহার করুন


109

আমি প্রোডের জন্য একটি বিল্ড স্কিম ব্যবহার করছি এবং একটি স্টেজিংয়ের জন্য (২ টি পৃথক বান্ডেল শনাক্তকারী সহ) এবং আমি প্রতিটি স্কিমের জন্য একটি পৃথক গুগল সার্ভিস-ইনফো.লিস্ট ব্যবহার করার চেষ্টা করছি। জিসিএম (এবং গুলে লগইন) শুরু করার সময় ম্যানুয়ালি প্লাস্ট ফাইলটি ব্যবহার করার কোনও উপায় আছে কি? অথবা প্লাস্ট ব্যবহার না করা এবং ম্যানুয়ালি সেটআপ করা কি সম্ভব?

ধন্যবাদ!


3
আপনি দুটি ভিন্ন লক্ষ্য ব্যবহার? তারপরে বিভিন্ন অনুলিপি বান্ডিল সংস্থানগুলিতে (একই স্তরের নাম সহ) বিভিন্ন ফাইল থাকতে পারে (যা পর্যায়ক্রমে বিল্ড)।
আলেকজান্ডার জিমিন

6
এই নিবন্ধটি আমার জন্য সহায়ক ছিল মাঝারি / রকেট-ফুয়েল /
ইউজিনি

আমার জন্য নিখুঁতভাবে কাজ করেছেন stackoverflow.com/a/58709334/11537677
নাইট ফাইটার

উত্তর:


142

বিস্তারিত

পরীক্ষিত:

  • এক্সকোড 9.2
  • এক্সকোড 10.2 (10E125)
  • Xcode 11.0 (11A420a)

সমাধান

  1. প্রকল্পে আপনার সমস্ত Google.plist ফাইল (বিভিন্ন নাম সহ) দিয়ে ফোল্ডার তৈরি করুন

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

  1. রান স্ক্রিপ্ট যোগ করুন

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

PATH_TO_GOOGLE_PLISTS মান পরিবর্তন করতে ভুলবেন না

কোড

PATH_TO_GOOGLE_PLISTS="${PROJECT_DIR}/SM2/Application/Firebase"

case "${CONFIGURATION}" in

   "Debug_Staging" | "AdHoc_Staging" )
        cp -r "$PATH_TO_GOOGLE_PLISTS/GoogleService-Info-dev.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist" ;;

   "Debug_Poduction" | "AdHoc_Poduction" | "Distribution" | "Test_Poduction" )
        cp -r "$PATH_TO_GOOGLE_PLISTS/GoogleService-Info-prod.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist" ;;

    *)
        ;;
esac

প্রকল্পের নাম তৈরি করুন

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


2
আমার দিনটি দুর্দান্ত উত্তরটি সংরক্ষণ করুন
সিদ্ধে

1
এটি সঠিক উত্তর। স্পষ্টতই ফায়ারবেস অ্যানালিটিকাদের আপনার অ্যাপ্লিকেশনটির রুট ডিরেক্টরিতে সেই কলটি ফাইলটি প্রয়োজন, আপনি কল করেও configure(options:)github.com/firebase/quickstart-ios/issues/5
রব বাজোরেক

2
এটি খুব সুন্দর সমাধান এবং উত্তর হিসাবে গ্রহণ করা উচিত।
লুক ব্র্যান্ডন ফারেল

1
খুব হালকা ও স্মার্ট, দুর্দান্ত উত্তর। ধন্যবাদ!
গাবুচান

1
@ স্মাইলবট আপনি এড়িয়ে যেতে পারেন -r, আরও তথ্য: লিনাক্স / ইউনিক্সে সিপি কমান্ড
ভ্যাসিলি বোদনারুকুক

73

@ আইনিডোনার উত্তর আমার পক্ষে কাজ করেছে। আমি এটি সুইফটে রূপান্তর করার পরে After

সুইফট ২.৩ এর জন্য:

let filePath = NSBundle.mainBundle().pathForResource("GoogleService-Info", ofType: "plist")
let options = FIROptions(contentsOfFile: filePath)
FIRApp.configureWithOptions(options)

সুইফট ৩.০ এর জন্য:

let filePath = Bundle.main.path(forResource: "GoogleService-Info", ofType: "plist")!
let options = FIROptions(contentsOfFile: filePath)
FIRApp.configure(with: options)

সুইফট ৪.০ এর জন্য:

let filePath = Bundle.main.path(forResource: "GoogleService-Info", ofType: "plist")!
let options = FirebaseOptions(contentsOfFile: filePath)
FirebaseApp.configure(options: options!)

1
উপরের কোডটি দিয়ে আপনার কাছে কি পৃথক GoogleService-Info.plistপৃথক স্থানে দুটি পৃথক ফাইল ফাইল রয়েছে বা দুটি পৃথক নাম সহ দুটি ফাইল থাকতে পারে। প্রকৃত ফাইলের নামগুলি কী এবং সেগুলি কোথায় রাখা হয়েছে দয়া করে আপনি আরও কিছু তথ্য সরবরাহ করতে পারেন?
বরুণ গুপ্ত

1
আমার কাছে গুগল সার্ভিস-ইনফো-ডেভলিপলিট নামের দুটি ফাইল রয়েছে গুগল সার্ভিস-ইনফো-লাইভ.লিস্ট করুন এই কোডটি আপনাকে ইউআর অ্যাপ্লিকেশনকে বলতে চাইলে আপনি ডিফল্ট গুগল সার্ভিস-ইনফো-ডেভলপ্লেস্টের পরিবর্তে শর্তসাপূর্ণ বিবৃতি ব্যবহার বা আপনার সাথে কাজ করতে চান এমন তথ্য ফাইলটি বলতে পারবেন tell আপনার ফাইলগুলির মধ্যে বিকল্পগুলির জন্য পতাকাগুলি লক্ষ্য করুন
Essam Elmasry

হ্যাঁ, অ্যাপডিলেজেটে
Essam Elmasry

1
আমাকে দেয় 'কনফিগারেশন ফাইলটি সনাক্ত করতে পারেনি:' গুগল সার্ভিস-ইনফো.লিস্ট '"
অরিয়াম

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

30

এই নিবন্ধটি দেখুন: https://medium.com/@brunolemos/how-to-setup-a-differences-firebase-project-for-debug-and-re্লে- পরিবেশ 15-15b40512164

এক্সকোডে, আপনার প্রকল্পের ভিতরে দুটি ডিরেক্টরি তৈরি করুন: Debugএবং Release। প্রতিটি রাখুনGoogleService-Info.plist ফাইল সেখানে ।

উপর AppDelegate.mভিতরে didFinishLaunchingWithOptionsপদ্ধতি, কোড করা:

উদ্দেশ্য গ

  NSString *filePath;
#ifdef DEBUG
  NSLog(@"[FIREBASE] Development mode.");
  filePath = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist" inDirectory:@"Debug"];
#else
  NSLog(@"[FIREBASE] Production mode.");
  filePath = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist" inDirectory:@"Release"];
#endif

  FIROptions *options = [[FIROptions alloc] initWithContentsOfFile:filePath];
  [FIRApp configureWithOptions:options];

সুইফট 4

var filePath:String!
#if DEBUG
    print("[FIREBASE] Development mode.")
    filePath = Bundle.main.path(forResource: "GoogleService-Info", ofType: "plist", inDirectory: "Debug")
#else
    print("[FIREBASE] Production mode.")
    filePath = Bundle.main.path(forResource: "GoogleService-Info", ofType: "plist", inDirectory: "Release")
#endif

let options = FirebaseOptions.init(contentsOfFile: filePath)!
FirebaseApp.configure(options: options)

উভয়কে টেনে আনুন এবং ফেলে দিন Debug এবং Releaseফোল্ডারগুলিকেBuild Phases > Copy Bundle Resources :

পর্যায়গুলি তৈরি করুন> বান্ডিল সংস্থান অনুলিপি করুন

এটাই :)


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

এই সমাধানটি Analyticsফ্রেমওয়ার্কের জন্য এখনও সমস্যাটি সমাধান করে না , কোনটি .plistবোঝা হচ্ছে তা আপনি বলতে পারবেন না ।
লাইভলি

ব্রুনো লেমোস, আমি কি একসাথে একটি এক্সকোড প্রকল্প থেকে দুটি ফায়ারবেস প্রকল্প ব্যবহার করতে পারি? হিসাবে Debugএবং না Release? কারণ যখন আমি এটি করার চেষ্টা করি তখন আমি সর্বদা শেষ করে already configured crash.ফায়ারবেস অফিসিয়াল ডকুমেন্টের সর্বশেষ নির্দেশ অনুসরণ করেছি। ধন্যবাদ
Tulon

24

আমি মনে করি আপনি আপনার গুগল সার্ভিস-ইনফো.লিস্টকে গতিশীলরূপে কনফিগার করতে এবং বিভিন্ন বান্ডিল শনাক্তকারীদের জন্য বিভিন্ন নাম ব্যবহার করতে পারেন।

সিওও আন্দ্রেয়াস

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist"];
FIROptions *options = [[FIROptions alloc] initWithContentsOfFile:filePath];
[FIRApp configureWithOptions:options];

5
উপরের কোডটি দিয়ে আপনার কাছে কি পৃথক পৃথক স্থানে দুটি ভিন্ন ফাইল গুগল সার্ভিস-ইনফো.প্লেস্ট ফাইল রয়েছে বা পৃথক নাম সহ দুটি ফাইল থাকতে পারে। প্রকৃত ফাইলের নামগুলি কী এবং সেগুলি কোথায় রাখা হয়েছে দয়া করে আপনি আরও কিছু তথ্য সরবরাহ করতে পারেন?
বরুণ গুপ্ত

4
কনফিগার Could not locate configuration file: 'GoogleService-Info.plist'
উইথপশন

13

আমি লক্ষ্য করেছি যে গুগল ফাইলের নামটি কোডটিতে গুগল সার্ভিসআইএনফো.প্লেস্ট হিসাবে প্রত্যাশা করেছে:

 * The method |configureWithError:| will read from the file GoogleServices-Info.plist bundled with
 * your app target for the keys to configure each individual API. To generate your
 * GoogleServices-Info.plist, please go to https://developers.google.com/mobile/add
 *
 * @see GGLContext (Analytics)
 * @see GGLContext (SignIn)
 */
@interface GGLContext : NSObject

মূল বাক্যাংশ এই এক

আপনার অ্যাপ্লিকেশন টার্গেটের সাথে বান্ডিলযুক্ত GoogleServices-Info.plist ফাইলটি থেকে পড়ুন

সুতরাং আমি কেবল একই ফাইলটি অনুলিপি করে এটিকে বিভিন্ন ডিরেক্টরিতে রেখেছি এবং এটিকে বিভিন্ন লক্ষ্যবস্তুতে আবদ্ধ করেছি:

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


ধন্যবাদ, খুব সহজ এবং আমার পক্ষে খুব ভাল কাজ করে, এক্সকোড 10.1, ফায়ারবেসকোর (5.3.1)
অনন্ততা_কোডিং 7

"মাল্টিপল কমান্ড প্রযোজনা" ত্রুটিটি কীভাবে এড়ানো যায় যা এ্যাপের মধ্যে একাধিক প্লাস্ট বা অন্যান্য ফাইলের কারণে ঘটে
ওয়াহাব খান জাদন

11

এর GoogleService-Info.plistআলাদা নাম থাকলে এটি আপনার বিশ্লেষণ ফলাফলগুলিকে প্রভাবিত করবে। ফায়ারবেস আপনাকে এ সম্পর্কে সতর্ক করবে। https://github.com/firebase/firebase-ios-sdk/issues/230#issuecomment-327138180 । এই কারণে, এই রানটাইম-সমাধানগুলির কোনওটিই সেরা বিশ্লেষণ ফলাফল প্রদান করবে না।

দুটি সমাধান রয়েছে যা বিশ্লেষণে জড়ান না।

  1. প্রতিটি স্কিমের সাথে একটি পৃথক লক্ষ্য ব্যবহার করুন এবং প্রতিটি সংস্করণকে GoogleService-Info.plistতার নিজস্ব টার্গেটের সাথে যুক্ত করুন । দেখুন উদ্দিষ্ট সদস্যপদ মধ্যে ফাইল পরিদর্শক Xcode মধ্যে ডান দিকে। আরও তথ্যের জন্য এই প্রশ্নটি দেখুন

  2. সঠিক সংস্করণ কপি করতে একটি build ফেজ স্ক্রিপ্ট ব্যবহার এর GoogleService-Info.plistবিল্ড ডিরেক্টরির মধ্যে। আমি মঞ্চায়ন এবং উত্পাদনের জন্য একটি পৃথক বান্ডিল আইডি ব্যবহার করি। এটি আমাকে অ্যাপ্লিকেশনটির উভয় সংস্করণকে সমান্তরালে ইনস্টল করতে সক্ষম করে। এর অর্থ নীচের স্ক্রিপ্টের সাহায্যে আমি আমার বিভিন্ন GoogleService-Info.plistফাইলের নাম বান্ডেল আইডি দিয়ে রাখতে পারি। উদাহরণ স্বরূপ:

    • GoogleService-Info-com.example.app.plist
    • GoogleService-Info-com.example.app.staging.plist

বিল্ড ফেজ স্ক্রিপ্ট

PATH_TO_CONFIG=$SRCROOT/Config/GoogleService-Info-$PRODUCT_BUNDLE_IDENTIFIER.plist
FILENAME_IN_BUNDLE=GoogleService-Info.plist
BUILD_APP_DIR=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app
echo cp $PATH_TO_CONFIG "$BUILD_APP_DIR/$FILENAME_IN_BUNDLE"
cp $PATH_TO_CONFIG "$BUILD_APP_DIR/$FILENAME_IN_BUNDLE"

দ্রষ্টব্য: PATH_TO_CONFIGআপনার সেটআপের জন্য আপনাকে পরিবর্তন করতে হবে ।

বিল্ড ফেজ স্ক্রিপ্ট


এটি এখন পর্যন্ত সেরা সমাধান। কারণ ফায়ারবেস ক্র্যাশলিটিক্স কেবলমাত্র 'আপলোড-চিহ্নগুলি' স্ক্রিপ্ট ব্যবহার করে ডিএসওয়াইএম ফাইলগুলি আপলোড করতে গুগল সার্ভিস-ইনফো.প্লেস্ট ফাইলটি ব্যবহার করতে পারে - এই সমাধানটি পুরোপুরি কার্যকর হয়!
আলেক্সি গালিশনিকভ

6

আপনি ফায়ারবেস দিয়ে প্লাস্ট ব্যবহার করতে পারবেন না। আপনার পক্ষে আমি এখন পর্যন্ত যে সর্বোত্তম সমাধান খুঁজে পেয়েছি তা হ'ল উভয় ফাইল যুক্ত করে নামকরণ করা

GoogleService-Info_stage.plist

এবং

GoogleService-Info_prod.plist

তারপরে আপনার কোড থেকে আপনি সঠিক ফাইলটি কল করতে পারেন। আপনার কাছে ফাইল না থাকলে এইভাবে আপনার অ্যাপটিকে ক্রাশ করবে না won't গুগল সার্ভিস-ইনফো_প্রড বা গুগল সার্ভিস-ইনফো_স্টেজের সাথে কেবল ফাইল ফাইলকে প্রতিস্থাপন করুন।

if let configFile = Bundle.main.path(forResource: "FILENAME", ofType: "plist"), 
    let options = FirebaseOptions(contentsOfFile: configFile)   
{
   FirebaseApp.configure(options: options)
}

রানটাইম কনফিগারেশনের যেমন উল্লেখ বিষয়ে প্রতিবেদনের বিশ্লেষণ হতে পারে ডক্স
অ্যালেক্স

6

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

ধাপ 1:
কপি GoogleService-Info.plist আপনার Firebase উন্নয়ন পরিবেশ সংশ্লিষ্ট দেব ডিরেক্টরি। একইভাবে, প্রোড ডিরেক্টরিতে আপনার ফায়ারবেস উত্পাদন পরিবেশের সাথে সম্পর্কিত গুগল সার্ভিস-ইনফো.লিস্টটি অনুলিপি করুন"প্রয়োজনে আইটেমগুলি অনুলিপি করুন" এবং " লক্ষ্যগুলিতে যুক্ত করুন" এর অধীনে সমস্ত লক্ষ্যবস্তুগুলি অনচেক করা নিশ্চিত করুন ।

(পদক্ষেপ 1 চিত্রের লিঙ্ক (কম নামীদারি করার কারণে আমি চিত্র যুক্ত করতে পারছি না))

পদক্ষেপ 2:
এক্সকোড প্রকল্প নেভিগেটরে, অ্যাপের লক্ষ্য নির্বাচন করুন। শীর্ষে বিল্ড পর্যায়গুলি ট্যাবে স্যুইচ করুন, তারপরে একটি নতুন রান স্ক্রিপ্ট ফেজ যুক্ত করুন“সেটআপ ফায়ারবেস এনভায়রনমেন্ট গুগল সার্ভিস-ইনফরমেশন.পুলিস্ট” এর পর্বটির নাম দিন বা তার প্রভাবের কিছু আছে এবং এটি "কপি বান্ডিল রিসোর্স" পদক্ষেপের আগে রাখুন।

পদক্ষেপ 3:
একটি শেল স্ক্রিপ্ট প্রয়োগ করুন যা বিল্ড কনফিগারেশনের উপর ভিত্তি করে উপযুক্ত গুগল সার্ভিস-ইনফো.পিস্টটিকে অ্যাপ বান্ডলে অনুলিপি করবে । আপনার সদ্য নির্মিত রান স্ক্রিপ্ট পর্যায়ে নিম্নলিখিত শেল স্ক্রিপ্টটি অনুলিপি করুন এবং আটকান:

# Name of the resource we're selectively copying
GOOGLESERVICE_INFO_PLIST=GoogleService-Info.plist

# Get references to dev and prod versions of the GoogleService-Info.plist
# NOTE: These should only live on the file system and should NOT be part of the target (since we'll be adding them to the target manually)
GOOGLESERVICE_INFO_DEV=${PROJECT_DIR}/${TARGET_NAME}/Firebase/Dev/${GOOGLESERVICE_INFO_PLIST}
GOOGLESERVICE_INFO_PROD=${PROJECT_DIR}/${TARGET_NAME}/Firebase/Prod/${GOOGLESERVICE_INFO_PLIST}

# Make sure the dev version of GoogleService-Info.plist exists
echo "Looking for ${GOOGLESERVICE_INFO_PLIST} in ${GOOGLESERVICE_INFO_DEV}"
if [ ! -f $GOOGLESERVICE_INFO_DEV ]
then
    echo "No Development GoogleService-Info.plist found. Please ensure it's in the proper directory."
    exit 1
fi

# Make sure the prod version of GoogleService-Info.plist exists
echo "Looking for ${GOOGLESERVICE_INFO_PLIST} in ${GOOGLESERVICE_INFO_PROD}"
if [ ! -f $GOOGLESERVICE_INFO_PROD ]
then
    echo "No Production GoogleService-Info.plist found. Please ensure it's in the proper directory."
    exit 1
fi

# Get a reference to the destination location for the GoogleService-Info.plist
PLIST_DESTINATION=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app
echo "Will copy ${GOOGLESERVICE_INFO_PLIST} to final destination: ${PLIST_DESTINATION}"

# Copy over the prod GoogleService-Info.plist for Release builds
if [ "${CONFIGURATION}" == "Release" ]
then
    echo "Using ${GOOGLESERVICE_INFO_PROD}"
    cp "${GOOGLESERVICE_INFO_PROD}" "${PLIST_DESTINATION}"
else
    echo "Using ${GOOGLESERVICE_INFO_DEV}"
    cp "${GOOGLESERVICE_INFO_DEV}" "${PLIST_DESTINATION}"
fi

3

এই উত্তরটি @ আবদুর দ্বারা অনুপ্রাণিত জবাব তবে কীভাবে এটি করবেন সে সম্পর্কে কিছুটা সুনির্দিষ্ট।

আপনার প্রতিটি টার্গেটের জন্য, যেমন, ডেভ, স্টিগ, প্রোড:

  • GoogleService-Info.plistআপনার লক্ষ্য অনুসারে পৃথক ফোল্ডারের সাথে সম্পর্কিত ডাউনলোড করুন
  • এক্সকোডে, আপনার অ্যাপ্লিকেশন ফোল্ডারে ডান ক্লিক করুন এবং চয়ন করুন Add files to "your app" এখানে চিত্র বর্ণনা লিখুন
  • লক্ষ্যবস্তুযুক্ত ফোল্ডারটি নির্বাচন করুন GoogleService-Info.plist, নিশ্চিত করুন Copy items if neededএবং Create groupsনির্বাচিত হয়েছেন, লক্ষ্যগুলির তালিকায় কেবলমাত্র সংশ্লিষ্ট টার্গেটটি পরীক্ষা করুন এবং টিপুনAdd এখানে চিত্র বর্ণনা লিখুন

এটাই. এখন আপনার এই কাঠামোর অনুরূপ কিছু হওয়া উচিত

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

আপনি যখন একটি লক্ষ্য তৈরি করেন, সঠিক GoogleService-Info.plistব্যবহার করা হবে।


আমার জন্য নিখুঁতভাবে কাজ করেছেন।
akafak Gezer

2

এটি কীভাবে জামারিন সি তে করবেন:

string plistPath = NSBundle.MainBundle.PathForResource ("GoogleService-Info", "plist");
Options options = new Options (plistPath);
App.Configure (options);

ফায়ারবেস নেমস্পেস অন্তর্ভুক্ত মনে রাখবেন:

using Firebase.Analytics;

2

এটাই আমার সমাধান!

NSString *filePath;
if([self isProduction]){
    filePath = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist"];
}else{
    filePath = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info-Sandbox" ofType:@"plist"];
}
FIROptions *options = [[FIROptions alloc] initWithContentsOfFile:filePath];
[FIRApp configureWithOptions:options];

এবং এটাই!


1

আমি মনে করি এটি ব্যবহার করা ছাড়া এটি অর্জন সম্ভব নয় GoogleService-Info.plist.কারণ আপনি নিজের আইওএস অ্যাপ্লিকেশনটিকে গুগল সাইন-ইন উপাদানগুলির সাথে সংহত করতে শুরু করার আগে আপনাকে অবশ্যই নির্ভরতা ডাউনলোড করতে হবে এবং আপনার এক্সকোড প্রকল্পটি কনফিগার করতে হবে। এবং এই প্রক্রিয়াটি দেখায় যে GoogleService-Info.plistএটিতে এটির একটি বড় কারণ রয়েছে।

সুতরাং এই SO প্রশ্নের এখানে সমাধান এবং ধারণা আপনাকে আপনার সমস্যার সাথে সহায়তা করতে পারে। সবেমাত্র মূল কপি সরানোGoogleService-Info plistঅ্যাপ্লিকেশনটির বাইরে 2 টি আলাদা ফোল্ডারে , তারপরে প্রতিটি লক্ষ্যতে বিল্ড পর্যায়গুলি "কপি ফাইলগুলি" ব্যবহার করে টার্গেট নির্দিষ্ট প্লিস্টটি রিসোর্স ফোল্ডারে আমদানি করতে ব্যবহার করুন।

এই এই প্রশ্নটিও পরীক্ষা করে দেখুন , এটি আপনার সমস্যার আরও তথ্য / ধারণা দিতে পারে।


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

1
তবে প্রতিটি স্কিমের জন্য আলাদা কনফিগারেশন সহ যদি আপনার একটি লক্ষ্য থাকে?
এভিয়া

1

এক্সকোড ৯.২ এর সাথে আমার উভয় টার্গেটের জন্য "googleServiceInfo.plist" নামকরণ করা ফাইলগুলির প্রয়োজন আছে তবে "বিল্ড পর্যায়সমূহ", "কপি বান্ডিল রিসোর্সস" -তে উল্লিখিত প্রতিটি টার্গেটের জন্য ডিরেক্টরি / ফাইল সহ বিভিন্ন ডিরেক্টরিতে স্থাপন করা হয়েছে।

উপরেরটি আমার পছন্দসই সমাধান ছিল না, তবে আমি আগে @ ইনিডোনার উত্তরের লাইনে বিভিন্ন ফাইলের নাম ব্যবহার করে সুইফট 4 তে রূপান্তরিত করার চেষ্টা করেছি:

 let filePath = Bundle.main.path(forResource: "googleServiceInfo-Pro", ofType: "plist")!
 let options = FirebaseOptions(contentsOfFile: filePath)
 FirebaseApp.configure(options: options!)

দুর্ভাগ্যক্রমে, এটি ফায়ারবেস ত্রুটি বার্তাগুলি সঠিক করে নি। এই প্রশ্নে: ফায়ারবেস আইওএস এসডিকে - গুগল সার্ভিস-ইনফো.প্লাইস্ট ব্যতীত অন্য কনফিগারেশন ফাইলটি ব্যবহার করা কনসোলকে সতর্ক করে যা মূল পোস্টারটি ফায়ারবেস পড আপডেট করে ঠিক করা হয়েছে বলে মনে হয় তবে আমি এটি নিশ্চিত করে নি।


1

আমি এর দ্বারা এটি সমাধান করেছি:

    #if STAGING
        if let filePath = Bundle.main.path(forResource: "GoogleService-Info-Dev", ofType: "plist"),
            let options = FirebaseOptions(contentsOfFile: filePath) {
                FirebaseApp.configure(options: options)
        } else {
            fatalError("GoogleService-Info-Dev.plist is missing!")
        }
    #else
        if let filePath = Bundle.main.path(forResource: "GoogleService-Info", ofType: "plist"),
            let options = FirebaseOptions(contentsOfFile: filePath) {
                FirebaseApp.configure(options: options)
        } else {
            fatalError("GoogleService-Info.plist is missing!")
        }
    #endif

1

যদি আপনার মধ্যে কিছু ত্রুটি হয়ে পড়ে এবং এক্সকোড অভিযোগ করে

"একাধিক কমান্ড গুগল সার্ভিস-ইনফো.প্লিস্ট তৈরি করে"

@ নাইট ফাইটার প্রতিক্রিয়া প্রয়োগ করার পরে , আপনি এটি করতে পারেন:

  • বিল্ড পর্যায়সমূহ> বান্ডিল সংস্থানগুলি অনুলিপি করুন Check
  • নামের ফাইলগুলির জন্য ফিল্টার GoogleService-Info.plist
  • আপনার যে কোনও রেফারেন্স রয়েছে সেটিকে সরিয়ে দিন, কারণ এটি ইতিমধ্যে স্ক্রিপ্টের মাধ্যমে অনুলিপি করা হয়েছে।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.