स्विफ्ट पैकेज मैनेजर के साथ iOS के लिए Google साइन इन का उपयोग करना

Dec 28 2020

मैक के समर्थन के साथ Google साइन वाले बिल्ड आईओएस ऐप की तरह , मैंने आईओएस फ्रेमवर्क के लिए Google साइन इन किया है और एक्सकोड प्रोजेक्ट में बंडल किया है, लेकिन मैं केवल आईओएस को लक्षित कर रहा हूं। इसमें मेरी जरूरत आईओएस के लिए Google साइन इन के साथ स्विफ्ट पैकेज मैनेजर का उपयोग करना है।

मैं इस प्रश्न को अपने वर्तमान समाधान को जोड़ने के लिए बना रहा हूं और यह देखने के लिए कि क्या अन्य समाधान है। और Google को IOS के लिए Google साइन इन के साथ स्विफ्ट पैकेज मैनेजर का समर्थन करने के लिए प्रोत्साहित करने का प्रयास करने के लिए :)।

जवाब

1 ChrisPrince Dec 28 2020 at 02:34

इसके लिए, मैंने Google साइन का XCFramework संस्करण बनाया है। ले देखhttps://github.com/SyncServerII/GSignIn.git। अब तक, यह Xcode iOS सिम्युलेटर और वास्तविक iOS उपकरणों के साथ परीक्षण और विकास को सक्षम कर रहा है।

एक बार बन जाने के बाद, यह एक पैकेज में प्रयोग किया जाता है।

        .binaryTarget(
            // This was generated using https://github.com/SyncServerII/GSignIn.git
            name: "GSignIn",
            path: "Frameworks/GSignIn.xcframework"
        ),

(यह सभी देखें https://github.com/SyncServerII/iOSGoogle/blob/main/Package.swift एक पूर्ण उदाहरण के लिए)।

अब तक के मुद्दे:

  1. मैं स्पष्ट रूप से बंडल संपत्ति तक पहुंचने में असमर्थ हूं। मुझे एक नया Google साइन इन बटन बनाना है। कोई बड़ी बात नहीं है, लेकिन पूर्णता के लिए मैं Google बटन तक पहुँच प्राप्त करना चाहूँगा जो Google साइन इन फ्रेमवर्क प्रदान करता है।

  2. यह पैकेज Google साइन इन के एक विशिष्ट संस्करण पर निर्भर करता है। इसे अपडेट करने की आवश्यकता होगीhttps://github.com/SyncServerII/GSignIn.git और Google के साइन इन फ्रेमवर्क में अपडेट के आधार पर इसे मैन्युअल रूप से अपडेट करना।

मुझे इस पैकेज का उपयोग करके ऐप स्टोर में अभी तक तैनात करना है ताकि इस बिंदु पर कोई अज्ञात हो।

- अपडेट -

12/28/20 (हल किया गया - नीचे 1/1/21 अपडेट देखें): मुझे यह भी ध्यान देना चाहिए कि मुझे अपने साझाकरण विस्तार में इस लाइब्रेरी के लिए चेतावनी मिल रही है:

ld: चेतावनी: एक dylib के खिलाफ लिंक करना जो एप्लिकेशन एक्सटेंशन में उपयोग के लिए सुरक्षित नहीं है: /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaitytaypbqqqmummshsh/Build/Products/Debug, .phone

जब मैं अपने लक्ष्य ऐप में इस ढांचे के साथ निर्माण करता हूं, जिसमें एक साझाकरण विस्तार होता है। मैंने इस ऐप को अभी तक ऐप स्टोर पर अपलोड करने की कोशिश नहीं की है, इसलिए मुझे नहीं पता कि तब क्या होगा।

12/29/20 (हल किया गया - नीचे 1/1/21 अपडेट देखें): मैं पहले अपने Google साइन इन पैकेज के साथ एक स्थानीय निर्देशिका से मेरे ऐप में खींचा गया था। मैंने सिर्फ अंदर नहीं घसीटने की कोशिश की है, लेकिन अपने ऐप में एक स्विफ्ट पैकेज के रूप में भरोसा करने के लिए, इसके गीथूब रेपो का उपयोग करते हुए संदर्भित किया। और जो निम्न की तरह विभिन्न अस्पष्ट लिंकर त्रुटियों के साथ बिल्ड को तोड़ता है:

Showing All Messages
Ld /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Products/Debug-iphoneos/Share\ Extension.appex/Share\ Extension normal (in target 'Share Extension' from project 'Neebla')
    cd /Users/chris/Developer/Neebla
    /Applications/Xcode-12.3.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -target arm64-apple-ios14.0 -isysroot /Applications/Xcode-12.3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.3.sdk -L/Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Products/Debug-iphoneos -F/Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Products/Debug-iphoneos -filelist /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Intermediates.noindex/Neebla.build/Debug-iphoneos/Share\ Extension.build/Objects-normal/arm64/Share\ Extension.LinkFileList -Xlinker -rpath -Xlinker @executable_path/Frameworks -Xlinker -rpath -Xlinker @executable_path/../../Frameworks -dead_strip -Xlinker -object_path_lto -Xlinker /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Intermediates.noindex/Neebla.build/Debug-iphoneos/Share\ Extension.build/Objects-normal/arm64/Share\ Extension_lto.o -Xlinker -export_dynamic -Xlinker -no_deduplicate -fembed-bitcode-marker -fapplication-extension -fobjc-link-runtime -L/Applications/Xcode-12.3.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos -L/usr/lib/swift -Xlinker -add_ast_path -Xlinker /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Intermediates.noindex/Neebla.build/Debug-iphoneos/Share\ Extension.build/Objects-normal/arm64/Share_Extension.swiftmodule -lc++ -framework Accelerate -e _NSExtensionMain -Xlinker -no_adhoc_codesign -Xlinker -dependency_info -Xlinker /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Intermediates.noindex/Neebla.build/Debug-iphoneos/Share\ Extension.build/Objects-normal/arm64/Share\ Extension_dependency_info.dat -o /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Products/Debug-iphoneos/Share\ Extension.appex/Share\ Extension -Xlinker -add_ast_path -Xlinker /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Intermediates.noindex/iOSFacebook.build/Debug-iphoneos/iOSFacebook.build/Objects-normal/arm64/iOSFacebook.swiftmodule -Xlinker -add_ast_path -Xlinker /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Intermediates.noindex/iOSSignIn.build/Debug-iphoneos/iOSSignIn.build/Objects-normal/arm64/iOSSignIn.swiftmodule -Xlinker -add_ast_path -Xlinker /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Intermediates.noindex/ServerShared.build/Debug-iphoneos/ServerShared.build/Objects-normal/arm64/ServerShared.swiftmodule -Xlinker -add_ast_path -Xlinker /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Intermediates.noindex/PersistentValue.build/Debug-iphoneos/PersistentValue.build/Objects-normal/arm64/PersistentValue.swiftmodule -Xlinker -add_ast_path -Xlinker /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Intermediates.noindex/SwiftyUserDefaults.build/Debug-iphoneos/SwiftyUserDefaults.build/Objects-normal/arm64/SwiftyUserDefaults.swiftmodule -Xlinker -add_ast_path -Xlinker /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Intermediates.noindex/KeychainAccess.build/Debug-iphoneos/KeychainAccess.build/Objects-normal/arm64/KeychainAccess.swiftmodule -Xlinker -add_ast_path -Xlinker /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Intermediates.noindex/iOSShared.build/Debug-iphoneos/iOSShared.build/Objects-normal/arm64/iOSShared.swiftmodule -Xlinker -add_ast_path -Xlinker /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Intermediates.noindex/swift-log.build/Debug-iphoneos/Logging.build/Objects-normal/arm64/Logging.swiftmodule -Xlinker -add_ast_path -Xlinker /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Intermediates.noindex/SQLite.swift.build/Debug-iphoneos/SQLite.build/Objects-normal/arm64/SQLite.swiftmodule -Xlinker -add_ast_path -Xlinker /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Intermediates.noindex/Facebook.build/Debug-iphoneos/FacebookLogin.build/Objects-normal/arm64/FacebookLogin.swiftmodule -Xlinker -add_ast_path -Xlinker /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Intermediates.noindex/Facebook.build/Debug-iphoneos/FacebookCore.build/Objects-normal/arm64/FacebookCore.swiftmodule -Xlinker -add_ast_path -Xlinker /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Intermediates.noindex/Facebook.build/Debug-iphoneos/FacebookShare.build/Objects-normal/arm64/FacebookShare.swiftmodule -Xlinker -add_ast_path -Xlinker /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Intermediates.noindex/iOSDropbox.build/Debug-iphoneos/iOSDropbox.build/Objects-normal/arm64/iOSDropbox.swiftmodule -Xlinker -add_ast_path -Xlinker /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Intermediates.noindex/SwiftyDropbox.build/Debug-iphoneos/SwiftyDropbox.build/Objects-normal/arm64/SwiftyDropbox.swiftmodule -Xlinker -add_ast_path -Xlinker /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Intermediates.noindex/Alamofire.build/Debug-iphoneos/Alamofire.build/Objects-normal/arm64/Alamofire.swiftmodule -Xlinker -add_ast_path -Xlinker /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Intermediates.noindex/ImageIOSwift.build/Debug-iphoneos/ImageIOUIKit.build/Objects-normal/arm64/ImageIOUIKit.swiftmodule -Xlinker -add_ast_path -Xlinker /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Intermediates.noindex/ImageIOSwift.build/Debug-iphoneos/ImageIOSwift.build/Objects-normal/arm64/ImageIOSwift.swiftmodule -Xlinker -add_ast_path -Xlinker /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Intermediates.noindex/SMLinkPreview.build/Debug-iphoneos/SMLinkPreview.build/Objects-normal/arm64/SMLinkPreview.swiftmodule -Xlinker -add_ast_path -Xlinker /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Intermediates.noindex/swift-log-file.build/Debug-iphoneos/FileLogging.build/Objects-normal/arm64/FileLogging.swiftmodule -Xlinker -add_ast_path -Xlinker /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Intermediates.noindex/iOSBasics.build/Debug-iphoneos/iOSBasics.build/Objects-normal/arm64/iOSBasics.swiftmodule -Xlinker -add_ast_path -Xlinker /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Intermediates.noindex/Version.build/Debug-iphoneos/Version.build/Objects-normal/arm64/Version.swiftmodule -Xlinker -add_ast_path -Xlinker /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Intermediates.noindex/ChangeResolvers.build/Debug-iphoneos/ChangeResolvers.build/Objects-normal/arm64/ChangeResolvers.swiftmodule -Xlinker -add_ast_path -Xlinker /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Intermediates.noindex/ServerAccount.build/Debug-iphoneos/ServerAccount.build/Objects-normal/arm64/ServerAccount.swiftmodule

ld: warning: linking against a dylib which is not safe for use in application extensions: /Users/chris/Library/Developer/Xcode/DerivedData/Neebla-aybzuiaoyytaypbvqtqeummvcssh/Build/Products/Debug-iphoneos/GSignIn.framework/GSignIn
Undefined symbols for architecture arm64:
  "iOSGoogle.GoogleHashing.init() -> iOSGoogle.GoogleHashing", referenced from:
      Share_Extension.ServerInterface.addHashingForCloudStorageSignIns(hashingManager: iOSShared.HashingManager) throws -> () in ServerInterface+CloudHashing.o
  "type metadata for iOSGoogle.GoogleHashing", referenced from:
      Share_Extension.ServerInterface.addHashingForCloudStorageSignIns(hashingManager: iOSShared.HashingManager) throws -> () in ServerInterface+CloudHashing.o
  "protocol witness table for iOSGoogle.GoogleHashing : iOSShared.CloudStorageHashing in iOSGoogle", referenced from:
      Share_Extension.ServerInterface.addHashingForCloudStorageSignIns(hashingManager: iOSShared.HashingManager) throws -> () in ServerInterface+CloudHashing.o
  "type metadata accessor for iOSGoogle.GoogleSyncServerSignIn", referenced from:
      Share_Extension.Services.getSignIns(configPlist: Share_Extension.ConfigPlist) -> [(iOSSignIn.GenericSignIn, iOSSignIn.SignInDescription)] in Services+SignIns.o
  "iOSGoogle.GoogleSyncServerSignIn.__allocating_init(serverClientId: Swift.String, appClientId: Swift.String, signInDelegate: iOSGoogle.GoogleSignInDelegate) -> iOSGoogle.GoogleSyncServerSignIn", referenced from:
      Share_Extension.Services.getSignIns(configPlist: Share_Extension.ConfigPlist) -> [(iOSSignIn.GenericSignIn, iOSSignIn.SignInDescription)] in Services+SignIns.o
  "direct field offset for iOSGoogle.GoogleSyncServerSignIn.userType : ServerShared.UserType", referenced from:
      Share_Extension.Services.getSignIns(configPlist: Share_Extension.ConfigPlist) -> [(iOSSignIn.GenericSignIn, iOSSignIn.SignInDescription)] in Services+SignIns.o
  "protocol witness table for iOSGoogle.GoogleSyncServerSignIn : iOSSignIn.GenericSignIn in iOSGoogle", referenced from:
      Share_Extension.Services.getSignIns(configPlist: Share_Extension.ConfigPlist) -> [(iOSSignIn.GenericSignIn, iOSSignIn.SignInDescription)] in Services+SignIns.o
  "type metadata accessor for iOSApple.AppleSignIn", referenced from:
      Share_Extension.Services.getSignIns(configPlist: Share_Extension.ConfigPlist) -> [(iOSSignIn.GenericSignIn, iOSSignIn.SignInDescription)] in Services+SignIns.o
  "iOSApple.AppleSignIn.__allocating_init() -> iOSApple.AppleSignIn", referenced from:
      Share_Extension.Services.getSignIns(configPlist: Share_Extension.ConfigPlist) -> [(iOSSignIn.GenericSignIn, iOSSignIn.SignInDescription)] in Services+SignIns.o
  "protocol descriptor for iOSGoogle.GoogleSignInDelegate", referenced from:
      l_got.$s9iOSGoogle20GoogleSignInDelegateMp in Services+SignIns.o
  "protocol witness table for iOSApple.AppleSignIn : iOSSignIn.GenericSignIn in iOSApple", referenced from:
      Share_Extension.Services.getSignIns(configPlist: Share_Extension.ConfigPlist) -> [(iOSSignIn.GenericSignIn, iOSSignIn.SignInDescription)] in Services+SignIns.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

ध्यान दें कि यह वास्तविक डिवाइस (उदाहरण के लिए arm64) के निर्माण के लिए विशिष्ट नहीं है । यदि मैं सिम्युलेटर के लिए निर्माण करता हूं, तो मुझे उसी तरह के संदेश मिलते हैं, लेकिन शीर्षक है Undefined symbols for architecture x86_64:

जब मैं अपना Google साइन इन पैकेज बनाता हूं और तब भी शामिल होता हूं (मेरे मुख्य ऐप में संदर्भ के साथ), लेकिन मेरे साझाकरण एक्सटेंशन में इस पैकेज का कोई संदर्भ नहीं है, तो यह साफ-सुथरा बनाता है। मैं इसे और अधिक सबूत के रूप में ले रहा हूं कि इस पैकेज का उपयोग साझाकरण एक्सटेंशन में नहीं किया जा सकता है।

1/1/21: अब मेरे पास लिंकर के उपरोक्त दोनों मुद्दे हैं। पहला सिर्फ एक स्विच था जिसे मुझे अपने में बदलने की आवश्यकता थीhttps://github.com/SyncServerII/GSignIn.gitXcode प्रोजेक्ट ( एक डायलिस के खिलाफ चेतावनी संदेश देखें जो एप्लिकेशन एक्सटेंशन में उपयोग के लिए सुरक्षित नहीं है )। दूसरा यह था कि मैंने अपने शेयरिंग एक्सटेंशन में अपना फ्रेमवर्क संदर्भ (iOSGoogle के लिए मेरे मामले में) नहीं जोड़ा था। उदाहरण के लिए देखें,https://stackoverflow.com/a/61848359/1675875

2/3/21: जब मैंने आईट्यून्स कनेक्ट से अपना ऐप अपलोड किया, तो मैं एक साझा एक्सटेंशन में XCFrameworks का उपयोग करने के साथ कुछ अन्य मुद्दों में भाग गया:

  1. https://developer.apple.com/forums/thread/662247

  2. ऐप स्टोर कनेक्ट ऑपरेशन त्रुटि ERROR ITMS-90680: "अमान्य निर्देशिका। बंडल पेलोड / Neebla.app / PlugIns / GSignIn.framework एक सही ढंग से नामित निर्देशिका में निहित नहीं है। इसे" फ्रेमवर्क "के तहत होना चाहिए।" ले देखhttps://forums.swift.org/t/swift-package-binary-framework-issue/41922/2 तथा https://bugs.swift.org/browse/SR-13840