Swift PackageManagerでiOS用のGoogleサインインを使用する

Dec 28 2020

MacをサポートするGoogleSignを備えたBuildiOS Appのように、iOSフレームワーク用のGoogle Sign inを埋め込み、Xcodeプロジェクトにバンドルしましたが、対象としているのはiOSのみです。これでの私の必要性は、iOS用のGoogleサインインでSwiftパッケージマネージャーを使用することです。

私はこの質問を作成して、現在の解決策をこれに追加し、他の人が解決策を持っているかどうかを確認しています。そして、GoogleがiOS用のGoogleサインインでSwiftパッケージマネージャーをサポートすることを奨励しようとしています:)。

回答

1 ChrisPrince Dec 28 2020 at 02:34

この目的のために、私はGoogleSignのXCFrameworkバージョンを作成しました。見るhttps://github.com/SyncServerII/GSignIn.git。これまでのところ、これにより、Xcode iOSSimulatorおよび実際のiOSデバイスでのテストと開発が可能になります。

ビルドされると、これは次のようなPackage.swiftマニフェストで使用されます。

        .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-aybzuiaoyytaypbvqtqeummvcssh/Build/Products/Debug-iphoneos/GSignIn.framework/GSignIn

共有拡張機能を持つターゲットアプリでこのフレームワークを使用してビルドする場合。このアプリをまだAppStoreにアップロードしようとはしていないので、どうなるかわかりません。

12/29/20(解決済み-下記の1/1/21アップデートを参照):以前は、ローカルディレクトリからアプリにドラッグしたGoogleサインインパッケージを使用してビルドしていました。ドラッグインされていない状態から、Githubリポジトリを使用して参照される、アプリ内の迅速なパッケージとして信頼するように移行しようとしました。そして、それは次のようなさまざまなあいまいなリンカーエラーでビルドを壊します:

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:上記の両方のリンカーの問題が解決されました。1つ目は、変更する必要のあるスイッチだけでした。https://github.com/SyncServerII/GSignIn.gitXcodeプロジェクト(アプリケーション拡張での使用が安全ではないdylibにリンクする警告メッセージを参照)。2つ目は、フレームワーク参照(私の場合はiOSGoogleの場合)を共有拡張機能に追加していなかったことです。たとえば、を参照してください。https://stackoverflow.com/a/61848359/1675875

2/3/21:アプリをiTunes Connectにアップロードしたときに、共有拡張機能でXCFrameworksを使用すると、他の問題が発生しました。

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

  2. App Store Connect操作エラーエラーITMS-90680:「無効なディレクトリ。バンドルPayload / Neebla.app / PlugIns /GSignIn.frameworkが正しい名前のディレクトリに含まれていません。「Frameworks」の下にある必要があります。」見るhttps://forums.swift.org/t/swift-package-binary-framework-issue/41922/2 そして https://bugs.swift.org/browse/SR-13840