অনুঘটকটির সাথে ম্যাক পোর্ট করার সময় শুঁটি বাদ দিন


14

ম্যাক অ্যাপ্লিকেশান পোর্টিং পরিশেষে করা সম্ভব ধন্যবাদ ক্যাটালিস্ট , সমস্যা হচ্ছে, অনেক pods AppKit সমর্থন করি না। সর্বাধিক সাধারণ হ'ল ক্র্যাশলিটিক্স / ফায়ারবেস।

In [...]/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics(CLSInternalReport.o), building for Mac Catalyst, but linking in object file built for iOS Simulator, file '[...]/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics' for architecture x86_64

যেহেতু এটি সাম্প্রতিক বিষয়, আমি ম্যাকোসের জন্য আমার বিল্ড থেকে কোনও পড কীভাবে সরিয়ে ফেলতে হবে তবে এটি আইওএস এবং আইপ্যাডএস এস-এর জন্য কীভাবে দস্তাবেজ খুঁজে পেলাম না

কোড ব্যবহার করা সম্ভব:

#if !targetEnvironment(macCatalyst) 
// Code to exclude for your macOS app
#endif

তবে সমস্যাটির একটি অংশ, অন্য অংশটি কেবল আইওএসের জন্য পোডকে সংযুক্ত করা ...

লাইব্রেরিটি ম্যাকওএসের পক্ষে অত্যাবশ্যক না থাকলেও আইওএসে চেয়েছিল, তখন কর্মের সবচেয়ে সহজ / সর্বোত্তম কোর্সটি কী হতে পারে?

উত্তর:


12

@ এগ্রগ্রিক উত্তর অনুসরণ করে, আমি একটি স্নিগ্ধ সমাধান করতে সক্ষম হয়েছি:

আপনার পডফাইলে অ্যাড করুন

post_install do |installer|
    installer.pods_project.targets.each do |target|
        if target.name == "Pods-[Name of Project]"
            puts "Updating #{target.name} OTHER_LDFLAGS to OTHER_LDFLAGS[sdk=iphone*]"
            target.build_configurations.each do |config|
                xcconfig_path = config.base_configuration_reference.real_path
                xcconfig = File.read(xcconfig_path)
                new_xcconfig = xcconfig.sub('OTHER_LDFLAGS =', 'OTHER_LDFLAGS[sdk=iphone*] =')
                File.open(xcconfig_path, "w") { |file| file << new_xcconfig }
            end
        end
    end
end

কোকোপডস যেহেতু 1.8.4

post_install do |installer|
  installer.pods_project.targets.each do |target|
    if target.name == "Pods-[Name of Project]"
      puts "Updating #{target.name} to exclude Crashlytics/Fabric"
      target.build_configurations.each do |config|
        xcconfig_path = config.base_configuration_reference.real_path
        xcconfig = File.read(xcconfig_path)
        xcconfig.sub!('-framework "Crashlytics"', '')
        xcconfig.sub!('-framework "Fabric"', '')
        new_xcconfig = xcconfig + 'OTHER_LDFLAGS[sdk=iphone*] = -framework "Crashlytics" -framework "Fabric"'
        File.open(xcconfig_path, "w") { |file| file << new_xcconfig }
      end
    end
  end
end

এবং তারপরে রেকর্ড স্ক্রিপ্ট বিল্ড পর্বে:

if [[$ARCHS != "x86_64"]]; then
  "${PODS_ROOT}/Fabric/run" [your usual key]
fi

3
এটি সমস্ত কোকোপডকে ম্যাকগালিস্টে লিঙ্ক করা থেকে অক্ষম করতে ভাল কাজ করে। if target.name.start_with?("Pods")সমস্ত পড লক্ষ্যগুলি ধরতে তৃতীয় লাইনটি পরিবর্তন করুন ।
উইলিয়াম ডেনিস

এটি কোকোপডগুলি 1.8.4
টিএমএম 1

1
আমি উভয় উপায়ে চেষ্টা করেছি "যদি টার্গেট.নেম.স্টার্ট_ও?? ইন / ইউজার / আইওএস / ডিজেকটপ / এক্সএক্সএক্সএক্সএক্সএক্স / পডস / ফায়ারবেস অ্যানালিটিক্স / ফ্রেমওয়ার্কস / এফআইআরএলেটিক্সকনেক্টর xxx_64_ আর্কিটেকচারের জন্য / এক্সএক্সএক্সএক্সএক্সএক্সএক্স / পডস / ফায়ারবেস অ্যানালিটিক্স / ফ্রেমওয়ার্কস / ফিআরএ্যানালিটিকস কনটেক্টর.ফ্রেমে ওয়ার্ক / এফআইআরএ্যানালিটিক্স সংযোগকারী
অঙ্কুর প্যাটেল

1
রান স্ক্রিপ্টের জন্য, আপনি এটি ব্যবহার করতে পারেন:if [[ ${IS_MACCATALYST} != "YES" ]]; then "${PODS_ROOT}/Fabric/run" fi
হংকহাও জাং

কোকো ফডগুলিতে কোনও সমস্যার লিঙ্ক অন্তর্ভুক্ত করার জন্য আপনি কী একটি উত্তর আপডেট করতে পারেন যাতে কোনও উত্তর পড়ার লোকেরা এটিকে উত্সাহ দিতে পারে? এটি আমার মতে বাক্সের বাইরে সমর্থন করা উচিত। github.com/CocoaPods/ কোকোপডস
বিবিধ /

8

আপনার প্রকল্পের পড ডিরেক্টরিতে আপনার পডস $ প্রকল্পের নাম.রেলেজ.এক্সকনফিগ ফাইলটি খুলুন এবং OTHER_LDFLAGS লাইনটি সন্ধান করুন। যোগ [sdk=iphone*]পরিবর্তনশীল নামের পরে অবিলম্বে (একটি উদাহরণ হিসাবে আমার এখন এই মত দেখায়):

OTHER_LDFLAGS[sdk=iphone*] = $(inherited) -ObjC -l"MailCore-ios" -l"c++" -l"iconv" -l"resolv" -l"xml2" -l"z"

শর্তসাপেক্ষে কেবল আইফোন ভেরিয়েন্টগুলি তৈরি করার সময় লিঙ্ক বিকল্পগুলি সেট করে, পোডকে ওএসএক্সের সাথে সংযুক্ত হতে বাধা দেয়। অবশ্যই আপনি উল্লেখ হিসাবে, এটি পডকে কল করার কোডটির সাথে #if !targetEnvironment(macCatalyst)এবং তার #endifচারপাশে একত্রিত হওয়া দরকার বা আপনি লিঙ্কারের ত্রুটি পাবেন।

এটি আমাকে একই সমস্যাটি পেরিয়ে যাওয়ার অনুমতি দেয়। (এবং আপনি যদি ভাবছেন যে শর্তসাপেক্ষ ভেরিয়েবলগুলি ছাড়াও কী কী শীতল জিনিস আপনি আপনার .xcconfig ফাইলগুলিতে যুক্ত করতে পারেন তবে এখানে একটি রেফারেন্স পেয়েছি: https://pewpewthespells.com/blog/xcconfig_guide.html )


1
আমি আপনাকে অনুগ্রহ দিয়েছি, কিন্তু বাক্সের বাইরে একটি সমাধান দিলে আমার নিজের উত্তরটি গ্রহণ করেছি যা মানুষের জীবনকে সহজ করে দেবে, আপনাকে অনেক ধন্যবাদ!
আনকাইনু

দুঃখিত, তবে একটি পডস- $ প্রকল্পের নাম rerelease.xcconfig ফাইল। আমি এটি সন্ধান করতে সক্ষম নই।
অঙ্কুর প্যাটেল

আমার কনফিগারেশনে এটি <প্রকল্প ডিরেক্টরি> / পডস / টার্গেট সমর্থন ফাইল / পডগুলিতে রয়েছে - <প্রকল্পের নাম>
আজগ্রিক

xcconfig সর্বদা প্রত্যেকের মধ্যে নিজেকে তৈরি করায় এই সমাধানটি প্রস্তাবিত নয় pod install। আমি সেরা বিকল্পটির জন্য এই ফার্নান্দো মোয়া ডি রিভাসের উত্তরটি পড়ার সুপারিশ করব
ওজে শাবাত

6

কোকোপডস ১.৮.৪ এর সাথে, আমাকে @ আনকাএনুর চমৎকার উত্তরটি নিম্নরূপে মানিয়ে নিতে হয়েছিল:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    if target.name == "Pods-[Name of Project]"
      puts "Updating #{target.name} to exclude Crashlytics/Fabric"
      target.build_configurations.each do |config|
        xcconfig_path = config.base_configuration_reference.real_path
        xcconfig = File.read(xcconfig_path)
        xcconfig.sub!('-framework "Crashlytics"', '')
        xcconfig.sub!('-framework "Fabric"', '')
        new_xcconfig = xcconfig + 'OTHER_LDFLAGS[sdk=iphone*] = -framework "Crashlytics" -framework "Fabric"'
        File.open(xcconfig_path, "w") { |file| file << new_xcconfig }
      end
    end
  end
end

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

প্রকল্পের অংশের উপরে, প্রকল্পের নাম লিখতে হবে? যদি টার্গেট.নাম == "পডস- [মাইপ্রজেক্টজেক্সামাল]"। এরকম কিছু নাকি উত্তর পেস্ট করবেন? কারণ এটি আমার পক্ষে কাজ করে
বার্টু আকমান

হ্যাঁ আপনাকে আপনার প্রকল্পের নাম দিয়ে প্রতিস্থাপন করতে হবে।
tmm1

আমি সবকিছু ঠিকঠাক করেছি। যদি লক্ষ্য.নাম == "পডস- [ভিপিএনড]" আমার প্রকল্পটি আবার পরিষ্কার করুন এবং তৈরি করুন। তবে তবু ত্রুটি অভিযোগ করছে। তোমার কি ধারণা আছে?
বার্টু আকমান

1
সরান[]
tmm1

3

আমার কাছে একটি আপডেট সমাধান রয়েছে যা নিম্নলিখিত Google পোডগুলির সাথে আমার জন্য কাজ করে:

  pod 'FirebaseUI/Auth'
  pod 'FirebaseUI/Phone'
  pod 'FirebaseUI/Email'
  pod 'Firebase/Auth'
  pod 'Firebase/Analytics'
  pod 'Fabric', '~> 1.10.2'
  pod 'Firebase/Crashlytics'
  pod 'Firebase/AdMob'
post_install do |installer|
  installer.pods_project.targets.each do |target|
    if target.name.start_with?("Pods")
        puts "Updating #{target.name} to exclude Crashlytics/Fabric"
      target.build_configurations.each do |config|
        xcconfig_path = config.base_configuration_reference.real_path
        xcconfig = File.read(xcconfig_path)
        xcconfig.sub!('-framework "FirebaseAnalytics"', '')
        xcconfig.sub!('-framework "FIRAnalyticsConnector"', '')
        xcconfig.sub!('-framework "GoogleMobileAds"', '')
        xcconfig.sub!('-framework "Google-Mobile-Ads-SDK"', '')
        xcconfig.sub!('-framework "GoogleAppMeasurement"', '')
        xcconfig.sub!('-framework "Fabric"', '')
        new_xcconfig = xcconfig + 'OTHER_LDFLAGS[sdk=iphone*] = $(inherited) -framework "FirebaseAnalytics"  -framework "FIRAnalyticsConnector"  -framework "GoogleMobileAds" -framework "GoogleAppMeasurement" -framework "GoogleUtilities" "-AppMeasurement" -framework "Fabric"'
        File.open(xcconfig_path, "w") { |file| file << new_xcconfig }
      end
    end
  end
end

আমি এই সমাধান ব্যবহার করতে যেমন সবচেয়ে পরিচ্ছন্ন দেখায় চেষ্টা করছি, কিন্তু আমি এই ত্রুটি পাবেন: ld: in /Users/<name>/source/<app>/Pods/Fabric/iOS/Fabric.framework/Fabric(Fabric.o), building for Mac Catalyst, but linking in object file built for iOS Simulator, for architecture x86_64আমি ব্যবহার আপনি ঠিক কি আছে উপরে বিয়োগ GoogleMobileAdsএবং Google-Mobile-Ads-SDK। আমি এটা কেন পাচ্ছি?
fphelp

আমি নিশ্চিত নই. এই মুহুর্তে ফ্যাব্রিক অপসারণের সময় তাই না? আমি সম্মত নই যে এগুলি কেনার গুগলের অধিকার ছিল, তবে তারা তা করেছে এবং এটি বন্ধ করে দিচ্ছে ...
অ্যান্ডি

দুঃখের সাথে 'পড ক্র্যাশলিটিক্স' ব্যবহার করে স্বয়ংক্রিয়ভাবে ফ্যাব্রিক ইনস্টল হয় (1.10.2)। কেন এটি ঘটে এবং 'ফায়ারবেস / ক্র্যাশলিটিক্স' শুঁটি ব্যবহার সম্পর্কে সতর্ক তা নিশ্চিত নয় কারণ গুগল বলেছে যে এটি এখনও বিটা পর্যায়ে রয়েছে :(
fphelp

3

অনুঘটকযুক্ত ফ্রেমওয়ার্কসকে ক্যাটালিস্ট পরিচালনার সর্বোত্তম পদ্ধতির জন্য, আপনারা ছেলেরা ফার্নান্দো মোয়া ডি রি এর সমাধানটি পড়তে পারেন ।

তিনি মূলত বললো, তুমি মাত্র লিব আপনি ভালো Mac OSX উপর ইনস্টল করার চাই না সমস্ত একটি অ্যারের সংজ্ঞায়িত করা প্রয়োজন: ['Fabric', 'Crashlytics', 'Firebase/Core', ...]

তারপরে, আপনার পড ফাইলটি এটিকে সহজ দেখাচ্ছে:

# Podfile
load 'remove_unsupported_libraries.rb'
target 'My target' do
   use_frameworks!
   # Install your pods
   pod ...
end

# define unsupported pods
def unsupported_pods
   ['Fabric', 'Crashlytics', 'Firebase/Core', ...]
end

# install all pods except unsupported ones
post_install do |installer|
   configure_support_catalyst installer, unsupported_pods
end

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