platform :ios, '10.0' use_frameworks! pod 'SwiftGen' pod 'SwiftLint' pod 'LicensePlist' target 'XXXApp' do pod 'Shimmer', inhibit_warnings: true target 'XXXAppTests' do inherit! :search_paths pod 'Mockingjay', inhibit_warnings: true pod 'iOSSnapshotTestCase', inhibit_warnings: true end target 'XXXAppUITests' do inherit! :search_paths end end target 'Foo' do pod 'GoogleTagManager', inhibit_warnings: true target 'FooTests' do inherit! :search_paths pod 'Mockingjay', inhibit_warnings: true end end post_install do |installer| installer.aggregate_targets.each do |aggregate_target| puts aggregate_target.name if aggregate_target.name == 'Pods-XXXApp' aggregate_target.xcconfigs.each do |config_name, config_file| config_file.libraries.delete('GoogleAnalytics') config_file.frameworks.delete('FirebaseAnalytics') config_file.frameworks.delete('FirebaseCore') config_file.frameworks.delete('FirebaseCoreDiagnostics') config_file.frameworks.delete('FirebaseInstanceID') config_file.frameworks.delete('FirebaseNanoPB') config_file.frameworks.delete('GoogleSymbolUtilities') config_file.frameworks.delete('GoogleTagManager') config_file.frameworks.delete('GoogleToolboxForMac') config_file.frameworks.delete('GoogleUtilities') config_file.frameworks.delete('nanopb') xcconfig_path = aggregate_target.xcconfig_path(config_name) config_file.save_as(xcconfig_path) end end end end
^ 上記のように、リンクしないターゲットからはFirebaseに関連するライブラリのリンカフラグを取り除く、というのが最も分かりやすい解決法だと思います。 (edited)XXXApp
とFoo
というターゲットがあって、Foo
はEmbeddedFrameworkです。FirebaseはFooにのみリンクしています。do { try sfDocument = transaction.getDocument(sfReference) } catch let fetchError as NSError { errorPointer?.pointee = fetchError return nil }
で取得しようとすると,nilErrorが戻ってきてしまい,通信の失敗との区別がつきません. documentSnapshot.existsで確認したかったのですが,何か他に良い方法ありますか? https://firebase.google.com/docs/firestore/manage-data/transactions?hl=ja (edited)binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseCrashBinary.json" == 5.0.1 binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseDatabaseBinary.json" == 5.0.1 ...
って、全部固定のを列挙すればいいんじゃないか。[omochi@omochi-iMacPro fb]$ ls -1 FirebaseABTestingBinary.json FirebaseAdMobBinary.json FirebaseAnalyticsBinary.json FirebaseAuthBinary.json FirebaseCrashBinary.json FirebaseDatabaseBinary.json FirebaseDynamicLinksBinary.json FirebaseFirestoreBinary.json FirebaseFunctionsBinary.json FirebaseInvitesBinary.json FirebaseMLModelInterpreterBinary.json FirebaseMLVisionBarcodeModelBinary.json FirebaseMLVisionBinary.json FirebaseMLVisionFaceModelBinary.json FirebaseMLVisionLabelModelBinary.json FirebaseMLVisionTextModelBinary.json FirebaseMessagingBinary.json FirebasePerformanceBinary.json FirebaseRemoteConfigBinary.json FirebaseStorageBinary.json
[omochi@omochi-iMacPro fb]$ grep "5.0.1" * FirebaseABTestingBinary.json: "5.0.1":"https://dl.google.com/dl/firebase/ios/carthage/5.0.1/ABTesting-59270a37743dcac7.zip", FirebaseAdMobBinary.json: "5.0.1":"https://dl.google.com/dl/firebase/ios/carthage/5.0.1/AdMob-63dab3b525b94cd9.zip", FirebaseAnalyticsBinary.json: "5.0.1":"https://dl.google.com/dl/firebase/ios/carthage/5.0.1/Analytics-6f41f8b6a4a602b9.zip", FirebaseAuthBinary.json: "5.0.1":"https://dl.google.com/dl/firebase/ios/carthage/5.0.1/Auth-e8ead646b1d1c8d0.zip", FirebaseCrashBinary.json: "5.0.1":"https://dl.google.com/dl/firebase/ios/carthage/5.0.1/Crash-79388beffcc2fd73.zip", FirebaseDatabaseBinary.json: "5.0.1":"https://dl.google.com/dl/firebase/ios/carthage/5.0.1/Database-e328fb93bfbbb32b.zip", FirebaseDynamicLinksBinary.json: "5.0.1":"https://dl.google.com/dl/firebase/ios/carthage/5.0.1/DynamicLinks-e9c4a1d3494bc9c3.zip", FirebaseFirestoreBinary.json: "5.0.1":"https://dl.google.com/dl/firebase/ios/carthage/5.0.1/Firestore-86214885359efb7f.zip", FirebaseFunctionsBinary.json: "5.0.1":"https://dl.google.com/dl/firebase/ios/carthage/5.0.1/Functions-1d7b9c5debd27b70.zip", FirebaseInvitesBinary.json: "5.0.1":"https://dl.google.com/dl/firebase/ios/carthage/5.0.1/Invites-c9c8d6b53c39d63c.zip", FirebaseMLModelInterpreterBinary.json: "5.0.1":"https://dl.google.com/dl/firebase/ios/carthage/5.0.1/MLModelInterpreter-8a92d847874454f7.zip", ... [omochi@omochi-iMacPro fb]$ grep "5.0.1" * | wc 20 40 2588
{ "5.0.0":"https://dl.google.com/dl/firebase/ios/carthage/5.0.0/RemoteConfig-017b470ac90fc11c.zip", "5.0.1":"https://dl.google.com/dl/firebase/ios/carthage/5.0.1/RemoteConfig-987c2549a9bba95c.zip", "5.4.0":"https://dl.google.com/dl/firebase/ios/carthage/5.4.0/RemoteConfig-7de634cd694b8e37.zip", "4.12.0":"https://dl.google.com/dl/firebase/ios/carthage/4.12.0/RemoteConfig-e7928fcb6311c439.zip", "5.1.0":"https://dl.google.com/dl/firebase/ios/carthage/5.1.0/RemoteConfig-9f1ffb83a992b57e.zip", "4.11.0":"https://dl.google.com/dl/firebase/ios/carthage/4.11.0/RemoteConfig-7e9635365ccd4a17.zip", "5.2.0":"https://dl.google.com/dl/firebase/ios/carthage/5.2.0/RemoteConfig-987c2549a9bba95c.zip", "4.9.0":"https://dl.google.com/dl/firebase/ios/carthage/4.9.0/RemoteConfig-9ab1ca5f360a1780.zip", "5.3.0":"https://dl.google.com/dl/firebase/ios/carthage/5.3.0/RemoteConfig-2dbe327ca651eb9e.zip" }
Embeded Framework
でFirebase分割するときの問題は解決されるんだろか。解決されるなら寄せていきたい。-ObjC
だけで良かったです。 あとはFramework Search Pathsの設定が必要でした。 ライブラリについてはマウスで全部選択してXcodeに突っ込んだら、まとめてリンク設定ができて、個別指定は不要でした。Firebase.framework FirebaseAnalytics.framework FirebaseCore.framework FirebaseCoreDiagnostics.framework FirebaseInstanceID.framework FirebaseNanoPB.framework GoogleToolboxForMac.framework nanopb.framework
BoringSSL.framework FirebaseFirestore.framework Protobuf.framework gRPC-Core.framework gRPC-ProtoRPC.framework gRPC-RxLibrary.framework gRPC.framework leveldb-library.framework
$ xcrun lipo -thin arm64 nanopb.framework/nanopb -output nanopb_arm64.a $ otool -l nanopb_arm64.a | grep LLVM
^ のようにして調べました。[omochi@omochi-iMacPro FirebaseFirestore.framework]$ pwd /Users/omochi/Library/Developer/Xcode/DerivedData/FirestoreExample-cmhhteuhybqvgqdlydndtculrncl/Build/Products/Debug-iphoneos/FirebaseFirestore/FirebaseFirestore.framework [omochi@omochi-iMacPro FirebaseFirestore.framework]$ otool -l FirebaseFirestore | grep bitcode | wc 352 704 7392
https://dl.google.com/dl/firebase/ios/carthage/5.4.0/Firestore-d7a38cc78422ca26.zip
^ をダウンロードしてやってみます。$ xcrun lipo -thin arm64 FirebaseFirestore.framework/FirebaseFirestore -output FirebaseFirestore_arm64.a $ otool -l FirebaseFirestore_arm64.a | grep LLVM
^ のようにarm64もしくはarmv7のスライスに対してotoolを実行するとビットコード入ってるように見えるんですよね。MessagesDataSource
の currentSender()
で判断するようですが、そのメソッドは正しく実装されていますか?func isFromCurrentSender(message: MessageType) -> Bool
を実装して常に true
を返すようにしたらどうなりますか?今度は逆に全部自分のメッセージとして扱われて右側に表示されると思います。 @koki@incradle そうだとすると、 currentSender()
の戻り値とデータが正しくマッチングしていないということになります。MessagesDataSource
のメソッドなので、 currentSender()
を実装しているクラスですね。とりあえず currentSender()
の下とかにメソッドを定義したらいいです。 isFr
くらいまで書いたらXcodeが補完してくれます。isFromCurrentSender
が判定できていないということになります。isFromCurrentSender(message: MessageType) -> Bool
はデフォルト実装では、return message.sender == currentSender()
となっていて、sender
の同値性は id
の比較なので、Firebaseから受信したデータのid
(=uid
) がどうなっているかを見てみるとよさそうです。MessageType
のインスタンスですよ。currentSender()
と一致するものは右側にそうでないものは左側に表示される仕組みです。isFromCurrentSender()
を自分で実装して、ただし下記のようにデフォルト実装と同じにして、 func isFromCurrentSender(message: MessageType) -> Bool { return message.sender == currentSender() }
message.sender == currentSender()
がtrueを返すものがあるかどうかデバッグしてみたらいいです。snapShot
ののなかにsenderに関するデータは保存されてないのですか?それを設定すべきに見えますが。combine-master
というブランチなので開発中)ですが、 Future
じゃなくて AnyPublisher
返すようになってるの微妙じゃないですか? public func getDocuments() -> AnyPublisher<QuerySnapshot, Error> { Future<QuerySnapshot, Error> { [weak self] promise in self?.getDocuments { querySnapshot, error in if let error = error { promise(.failure(error)) } else if let querySnapshot = querySnapshot { promise(.success(querySnapshot)) } else { promise(.failure(NSError(domain: "FirebaseFirestoreSwift", code: -1, userInfo: [NSLocalizedDescriptionKey: "InternalError - Return type and Error code both nil in " + "getDocuments publisher"]))) } } } .eraseToAnyPublisher() }
https://github.com/firebase/firebase-ios-sdk/blob/combine-master/Firestore/Swift/Source/Combine/Query+Combine.swift#L45-L62Future
、 addSnapshotListener
とかは AnyPublisher
と分けてほしい気が。Future
に func get() async throws -> Output
が生えるだろうし。 (edited)AnyPublisher
にそろえたいのかもしれませんが、これは将来的に使い勝手に多大な影響を与えそうなのでコメントしたいんですが、検索してもどの issue / PR にコメントすればよいのやら・・・。combine-master
から master
(またはその他のブランチ)への PR がないんですよね。 (edited)combine-master
への PR はマージされて lock されちゃってて・・・。 (edited)Future
返すように改変した PR 作って、そこで議論するという手もありますね。enum
になってるとかはあるとうれしいかも。Future
にするのかとか難しいですね・・・。async/await
を見込むなら前者にしておいた方がマイグレーションツールの対象になりやすそうな。(Value?, Error?)
を渡すのか Result<Value, Error>
を渡すのかも悩ましい?後者でもマイグレーションしてくれると信じたいですが。#if canImport(Combine)
で本体に入れちゃうという手もありますね。 < 使う側でCombineバインディングライブラリをインポートする、みたいな作り