Guild icon
swift-developers-japan
開発環境, ライブラリ / firebase
Avatar
引っかかり中 Errors like: Class TWTRScribeService is implemented in both ... · Issue #18 · twitter/twitter-kit-ios https://github.com/twitter/twitter-kit-ios/issues/18
Bug Report I'm getting lots of this on app startup. objc[2541]: Class TWTRScribeService is implemented in both /private/var/containers/Bundle/Application/B90F531E-C7AD-43E6-9EF8-584D399A11E0/my...
4:38 AM
(Firebase Auth関連でTwitter-kit-iosを導入)
4:40 AM
スレチな可能性
🙄 1
Avatar
Kishikawa Katsumi 4/2/2018 4:44 AM
直接の原因としては同じDynamic Frameworkが2つ含まれちゃってるんですね。
😮 2
Avatar
Embedded Frameworkで複数ターゲットに分割して開発しているのですが、CocoaPodsでFirebaseを複数ターゲットにインストールすると起動後にクラッシュしてしまう問題に悩んでいます。 どなたか解決方法をご存知ではないでしょうか? https://ja.stackoverflow.com/questions/45111/cocoapods%E3%81%A7firebase%E3%82%92%E8%A4%87%E6%95%B0%E3%82%BF%E3%83%BC%E3%82%B2%E3%83%83%E3%83%88%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E3%81%A8%E3%82%AF%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E3%81%99%E3%82%8B
現在、Embedded Framework で複数ターゲットに分割して開発しているのですが、 CocoaPodsでFirebaseを複数ターゲットにインストールすると起動後にクラッシュしてしまいます。 objc[97307]: Class FIRMessagingLog is implemente...
Avatar
Kishikawa Katsumi 6/28/2018 8:02 AM
FirebaseはFrameworkの体裁を取っていますが、実際はStatic Libraryです。複数のフレームワークにリンクすると、複数のシンボルがリンクされてしまいます。 また、CocoaPodsの現在の使用により、1つのターゲットにリンクしたとしても、すべてのターゲットにリンカフラグが設定されるので、結局は同じ問題が起こります。
8:03 AM
解決方法はいろいろありますが、基本的には1つのターゲットにリンクするようにして、他のターゲットからはそのフレームワークをImportする形で使用することです。
8:05 AM
で、具体的にCocoaPodsでどうしたらいいかというと、 どれか1つのターゲットだけにリンクするようにPodfileを構成し、その上でさらに、 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)
8:08 AM
この例だと、XXXAppFooというターゲットがあって、FooはEmbeddedFrameworkです。FirebaseはFooにのみリンクしています。
8:08 AM
(GoogleTagManagerがFirebaseAnalyticsに依存しています。)
8:09 AM
しかし、CocoaPodsがXXXAppにもリンカフラグを設定してしまうので、XXXAppからFirebase関連のライブラリのリンカフラグを取り除いています。
8:09 AM
ターゲットが増えても理屈は同じです。
😊 3
Avatar
ありがとうございます!
12:02 PM
お陰様で解決しました!
Avatar
だいぶ亀ですが、これとは違うやりかたで、ライブラリ依存の向きを変えてあげるだけでも解決します。こちらも読んでみてください。 https://qiita.com/takasek/items/39c28042c4ecef4685ee
Avatar
Kishikawa Katsumi 7/4/2018 3:20 AM
いつか調べようとは思ってるんだけど、^ のStackOverflowの質問にあるPodfileのような複数のターゲットが並列である構成の場合は難しいんじゃないかな。 それで結局リンカフラグで調整するというのが最も汎用的なんじゃないかと思ってるんですよね。
Avatar
なるほど。あんまりこのpost_installのスクリプトを手で書きたくないので、何かあるといいんですけどね😅
Avatar
Kishikawa Katsumi 7/4/2018 3:25 AM
同意です。FirebaseがStatic Frameworkじゃなくなるか、CocoaPodsが問題を修正するか、のどっちかですかねえ。
Avatar
omochimetaru 7/4/2018 3:26 AM
Firebase使ったことないので間違うかもしれないですが、 配布されてるStatic libraryをラップして普通のDynamic LibraryなFrameworkにするだけのプロジェクトを手元で1段作るのはどうですか。
Avatar
Kishikawa Katsumi 7/4/2018 3:28 AM
それはたぶんアリだと思いますが、Firebaseのフレームワークの構成によりますね。
3:30 AM
推測ですけど「普通のDynamic LibraryなFramework」の方で結構Firebaseのメソッド等をラップする必要があるんじゃないかな。利用の仕方によってはけっこうすぐに割りに合わなくなる気もします。
Avatar
omochimetaru 7/4/2018 3:34 AM
あ、ヘッダーはそのまま再利用して全部のシンボルをそのままエクスポート、そういうグルーコードは書かない想定でした。
3:36 AM
CocoaPodsとの絡みで起きてる問題がよくわかってないのでずれてるかも・・・
Avatar
Kishikawa Katsumi 7/4/2018 3:36 AM
そうすると、たぶんスタティックリンクを求められると思います。逆にシンボルをすべて隠蔽するようなDynamic Frameworkが必要になるんじゃないかな。
Avatar
omochimetaru 7/4/2018 3:37 AM
ふむ
3:41 AM
podsを使わない場合、の方でSDKをダウンロードしてみました。
3:42 AM
なるほど、機能群ごとに分かれている上に、それぞれがProtobufやらBoringSSLやら別のライブラリに依存していたりもするんですね・・・
Avatar
そうそう、依存がめんどくさい。
Avatar
Kishikawa Katsumi 7/4/2018 3:46 AM
本質的にはどれか1つのターゲットにStatic Linkする、で終了なんですけど、CocoaPodsはそれをやってくれない。
3:46 AM
^ 問題はそれだけ。
Avatar
Firestoreにて,トランザクションを用いてデータの更新を行う部分で困ってます. 同時タイミングでの書き込みを想定し,validationの処理をトランザクション内で行いたいです. 1. すでに存在する{名前 = documentid}かどうかを確認 2. 被ってない場合ドキュメントを作成 しかし,存在しないドキュメントを 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)
Avatar
通信の失敗と呼んでいるのは、具体的に何を想定してますか?
Avatar
クライアント側の通信状況悪化などです 機内モードでも同様のエラーが返ってきます (edited)
Avatar
まず前提として、ドキュメントに記載されているように、トランザクションはオフラインの場合は失敗します。
クライアントがオフラインの場合、トランザクションは失敗します。
(edited)
5:33 AM
なので、Reachablityで判断できる範囲で事前に判断し、エラーを分けるのがベターです。 (edited)
Avatar
omochimetaru 8/7/2018 5:36 AM
通信途中に回線喪失した場合と
5:37 AM
エンティティが無かった場合を
5:37 AM
区別できる方法が必要そう
Avatar
その機構はFirestoreにはないはずなので、本当に分ける必要があるかから検討したほうがいいはず
5:38 AM
NSErrorが持ってくれてるのかなぁ?
Avatar
omochimetaru 8/7/2018 5:38 AM
ふむふむ
Avatar
Kishikawa Katsumi 8/7/2018 5:41 AM
たぶん原因はいろいろ考えられるけど、とにかく目的のデータは得られなかった、という結果に対して対応するという風に作った方がいいってことじゃないかな。
5:42 AM
区別できるのかもしれないけど、できないのであればできないものとして。
Avatar
パスがないので恒久的にデータが得られないことと、一時的にデータが得られないからリトライしたいみたいなところの区別をしたい感じかなぁ
Avatar
Kishikawa Katsumi 8/7/2018 5:43 AM
まあそうか。リトライしたら取れるかもしれない、というのはあるか。
Avatar
そもそもErrorがnilなのか
Avatar
Kishikawa Katsumi 8/7/2018 5:44 AM
まあでも何回かリトライしてダメな場合、それは回線の問題か、そもそもデータがないのかは同一視しても良い、というのはあるかも。
Avatar
Realtime Databaseだと、パスが見つからなかった場合はNSNullで判断していた箇所があるんですけど、Firestoreどうなってるんだろう
Avatar
>パスがないので恒久的にデータが得られないことと、一時的にデータが得られないからリトライしたいみたいなところの区別をしたい感じかなぁ まさにです
Avatar
存在しないドキュメントを取得した場合もcatchされます?
Avatar
catchされます. Foundation._GenericObjCError.NilErrorですね.通信障害時も同様です
Avatar
おそらくここで返してるnilのerrorがそのまま伝播しているので、判断つかないですね。 https://github.com/firebase/firebase-ios-sdk/blob/master/Firestore/Source/Remote/FSTDatastore.mm#L129 具体的に呼んでいるのはこの部分ですが、これ以上は追えないです。 https://github.com/firebase/firebase-ios-sdk/blob/master/Firestore/Source/Remote/FSTDatastore.mm#L271 根本対応としては、feature requestを出す感じですかね…
firebase-ios-sdk - Firebase iOS SDK
firebase-ios-sdk - Firebase iOS SDK
Avatar
>パスがないので恒久的にデータが得られないことと、一時的にデータが得られないからリトライしたいみたいなところの区別をしたい感じかなぁ 他にも存在しないことを区別できなかったら、更新処理で、データが得られなかったときは新規データを生成して書き込みとかしようとすると、ネットワークエラー等が原因でデータを上書きしてしまいそうですね。
Avatar
それはFirestoreのセキュリティルールで防いでいくことになりそうですね。特定の条件での上書きを禁止するとか。
6:06 AM
で、まさに今回みたいな話をtry!Swift のFirestoreのワークショップで話していたと思うんですけど、通訳に必死で内容を覚えていない😪 @nade Firebase CommunityのSlackのFirestoreチャンネルで聞いてみてもらえますか?Firebaseの中の人のアサインなど、フォローはします。
Avatar
なるほど、そういうことができるんですね。 < セキュリティルールで防いでいく
😄 1
Avatar
@d_date さん 調査ありがとうございます.現状セキュリティルールで工夫するしかなさそうですね. Firebase Community聞いてみようと思います.フォローお願いします.
👌 1
✅ 1
Avatar
そろそろ向こうは日付まわるぐらいなので、気長に待っていてください
👌 1
Avatar
@d_date ありがとうございます!
Avatar
omochimetaru 8/14/2018 6:31 AM
@d_date
Unlike the CocoaPods distribution, the Carthage distribution is like the Firebase zip release in that all the Firebase components share the same version.
と書いてあるから、
6:32 AM
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 ... って、全部固定のを列挙すればいいんじゃないか。
6:32 AM
Avatar
たぶんそのバージョンが全部揃ってないので、めんどくさくなると思う。
6:37 AM
できるかできないかで言われたら、多分できそうなのはわかった。
Avatar
omochimetaru 8/14/2018 6:38 AM
全部揃ってないというのは?例えば5.0.1 が取得できないパッケージがあるかもってこと?
6:39 AM
[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
Avatar
まずバージョンが違うので、ABTestingが2.y.zでDatabaseが5.y.zという進みになっていることがありうる → 全部チェックして指定する必要がある
Avatar
omochimetaru 8/14/2018 6:40 AM
[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
6:40 AM
全部に5.0.1はあるみたいだよ
Avatar
あれ、全部揃ってる。変わったのか
Avatar
omochimetaru 8/14/2018 6:40 AM
さっきの文言から考えると
6:40 AM
そういう場合にはABTestingは2.y.zであっても
6:41 AM
5.0.1としてリバージョンされてるんじゃない?
6:41 AM
like the Firebase zip release in that all the Firebase components share the same version.
Avatar
なるほど。他と同じバージョン使っていれば、Dependencyの問題もないってか。
Avatar
omochimetaru 8/14/2018 6:44 AM
{ "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" }
6:44 AM
やっぱりそうだ。5.0.1と5.2.0が同じ。
6:44 AM
なんか微妙な感じだけど、Firebaseファミリーとして一括で全部のコンポーネントに同じバージョンを発行して揃えてるみたいね。 (edited)
Avatar
5.0.1 , 5.1.0, 5.2.0が揃ってないのはなんでじゃろ
Avatar
omochimetaru 8/14/2018 6:47 AM
ビルドするときに使ったXcodeのバージョンが変わっててバイナリでは差が出ちゃったとか? (edited)
Avatar
なるほどね。これで当初の Embeded Framework でFirebase分割するときの問題は解決されるんだろか。解決されるなら寄せていきたい。
6:49 AM
あとで検証してみよう。
Avatar
omochimetaru 8/14/2018 6:53 AM
よく問題になってるのって、 アプリパッケージAと、ライブラリパッケージBがあって、 AでもBでもFirebaseのAPIを使ってる場合、だよね
Avatar
そう。
👀 1
Avatar
Kishikawa Katsumi 8/14/2018 7:10 AM
で、FirebaseのFrameworkはStatic Linkされるので、AかBのどちらか一方にしかリンクしてはいけないのだけど、既存のパッケージマネージャのワークフローではそれをデフォルトでうまくやってくれるものがない、ですね。 (edited)
7:12 AM
Carthageでバイナリをバージョン管理しつつ、自分でLinker Flagを設定するというのはうまくいくような気がするけど、Firebaseの場合は多すぎであまりやりたくない。(個人的な感想として) (edited)
Avatar
雑な疑問なんですが、なんで Static Link なんでしょうね。Dynamic でいい気もするのですが。
Avatar
omochimetaru 8/14/2018 7:13 AM
なるほど。今手が開いてるのでちょっとやってみます
Avatar
Kishikawa Katsumi 8/14/2018 7:15 AM
Swiftで書かれてなくて、Static Libに依存してるものが結構あるんじゃないかな。推測ですけど。可能ならDynamicにしてほしいですね。
Avatar
なるほどー
Avatar
omochimetaru 8/14/2018 8:39 AM
ProtocolBuffers、MRCだ
Avatar
omochimetaru 8/14/2018 2:25 PM
@d_date CarthageでのFirebaseできました! https://github.com/omochi/Firebase-Carthage-fbapp
Contribute to Firebase-Carthage-fbapp development by creating an account on Github.
😆 1
2:26 PM
@Kishikawa Katsumi Firebase系のライブラリは、Linker Flagの設定は -ObjC だけで良かったです。 あとはFramework Search Pathsの設定が必要でした。 ライブラリについてはマウスで全部選択してXcodeに突っ込んだら、まとめてリンク設定ができて、個別指定は不要でした。
2:29 PM
Cocoapodsで構築されてるビルドをみたら、依存先は全部Dynamicで、Firebase系だけ全部Staticでした、謎。 Carthage向けのバイナリ配布は、依存先も何もかもStaticで、しかもBitcode無しでした、謎。
Avatar
Carthageがbitcode無しなのはこのIssueなんだけど、よくわからんかった https://github.com/firebase/firebase-ios-sdk/issues/911
When installed through Carthage, Firebase.framework/Firebase' does not contain bitcode. My Environment Xcode version: 9.2 Firebase SDK version: 4.9.0 (Carthage) Firebase Component: Core, Analyt...
Avatar
Kishikawa Katsumi 8/14/2018 2:33 PM
確かにこれはとても良さそう。 fbappcore.frameworkのレイヤーで一旦Firebase関連を全部吸収しちゃうわけですね。
Avatar
omochimetaru 8/14/2018 2:33 PM
です。なんかうまくいきました。
Avatar
Kishikawa Katsumi 8/14/2018 2:33 PM
で、それを使うターゲットはAppでもFrameworkでもLibでもfbappcore.frameworkに依存すれば良いと。
Avatar
omochimetaru 8/14/2018 2:34 PM
はい。
Avatar
Kishikawa Katsumi 8/14/2018 2:35 PM
エッジケースはあると思うけどかなり良さそうに見えます。 もうちょっとそれっぽい名前を付けて、Carthageインストールできるようにすると、人気が出るんじゃないかな。 そしたらUpstreamに提案しても良さそう。
2:35 PM
Distributionの方法として。
Avatar
omochimetaru 8/14/2018 2:35 PM
fbappcoreにモデルを定義して、Firestore.Queryを返していて、 fbapplibにはViewControllerがあって、 fbappはAppDelegateで↑のVCを開いてる、 という構成です
2:36 PM
あ〜、 Firebase系だけ固めたものをライブラリとして、ってことですね。
Avatar
Kishikawa Katsumi 8/14/2018 2:36 PM
そうです。
Avatar
omochimetaru 8/14/2018 2:36 PM
その場合難しいのは、Firebaseの中のどのライブラリを含めるか、ということがコントロールできない点があります。
2:37 PM
スーパー全部入りならいけますけど。
Avatar
Kishikawa Katsumi 8/14/2018 2:37 PM
なるほど。確かに。
Avatar
omochimetaru 8/14/2018 2:37 PM
この例だと、FirebaseAnalyticsとFirebaseFirestoreの2つしか入れていません。
2:38 PM
@d_date このスレよくわからないね、bitcodeの話誰もしてない。 >>1 ではエラーメッセージが出てたけど、みなさん別のエラーでコケて、それを直して解決してしまったようだ。 (edited)
Avatar
Kishikawa Katsumi 8/14/2018 2:39 PM
FirebaseのBitcodeはよくわからない。我々も気になってるけど優先度あまり高くできなくて全然調べてないです。
2:40 PM
2:41 PM
^ この辺りは選択の余地がないやつですよね?
2:42 PM
そうすると、、、と思ったけど、まあこの手順があればいいのかなあ?
Avatar
omochimetaru 8/14/2018 2:42 PM
そうですね、必須パッケージの FirebaseAnalyticsをダウンロードすると、zipの中に↓が入ってきます Firebase.framework FirebaseAnalytics.framework FirebaseCore.framework FirebaseCoreDiagnostics.framework FirebaseInstanceID.framework FirebaseNanoPB.framework GoogleToolboxForMac.framework nanopb.framework
2:42 PM
carthageがzipは展開してくれるので、D&Dで全部突っ込む。
Avatar
とりあえずおもちのやつをFirebase Communityに投げて反応を見てみるかな。あそこは中の人もいるので (edited)
Avatar
omochimetaru 8/14/2018 2:43 PM
gRPC系はFirestoreのzipで、 BoringSSL.framework FirebaseFirestore.framework Protobuf.framework gRPC-Core.framework gRPC-ProtoRPC.framework gRPC-RxLibrary.framework gRPC.framework leveldb-library.framework
2:43 PM
がはいってた。
2:43 PM
とりあえずBitcodeつけたの配ってくれ〜ってissue立てていいかな
Avatar
いいと思う
Avatar
Kishikawa Katsumi 8/14/2018 2:45 PM
そういえば上のIssueも前に見たの思い出してきたけど、
2:46 PM
いや、おもちさんの書いてるのを読む限り解決しなさそうだな。
Avatar
Kishikawa Katsumi 8/14/2018 2:56 PM
いや、
2:57 PM
@omochimetaru Carthage用のバイナリがBitcodeないって、どうやって調べました? さっきのIssueで言ってることはFirebase.framework以外はBitcode入ってるからFirebase.frameworkをリンクしなければ良い、そしてFirebase.frameworkは実はリンクする必要はないからそれを外せばいい、ということのはずで、
2:58 PM
そう仮定して今いくつか調べてみると確かにFirebase.frameworkにはないけど、それ以外のものはnanopb、GoogleToolBoxについて調べましたけどBitcode入ってそうなんですよね。
3:00 PM
$ xcrun lipo -thin arm64 nanopb.framework/nanopb -output nanopb_arm64.a $ otool -l nanopb_arm64.a | grep LLVM ^ のようにして調べました。
Avatar
omochimetaru 8/14/2018 3:02 PM
一つは、fbappcoreをビルドするときに Enable Bitcode = YES にしていると、ビルドエラーで、 依存先のものにBitcodeが無い、というメッセージが出ることと 二つ目は、下記を参考にバイナリを調べてみると、 https://stackoverflow.com/questions/32755775/how-to-check-a-static-library-is-built-contain-bitcode carthage向けの定義ファイルからダウンロードできるSDKをしらべると (https://dl.google.com/dl/firebase/ios/carthage/FirebaseFirestoreBinary.json の中にかいてあるURLからDL ) [omochi@omochi-iMacPro Firestore-d7a38cc78422ca26]$ otool -l FirebaseFirestore.framework/FirebaseFirestore | grep bitcode [omochi@omochi-iMacPro Firestore-d7a38cc78422ca26]$ otool -l BoringSSL.framework/BoringSSL | grep bitcode
I have a static library that is built by other company. I want to know if it's a static library containing bitcode, which command can detect it in terminal?
3:02 PM
上記コマンドでヒットしないのにたいして、
3:03 PM
Cocoapodsを使用したプロジェクトで、ビルド成果物の中にある方の同じファイルについてしらべると ヒットする [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
3:03 PM
ということからです。
3:03 PM
Cocoapodsを使用しているプロジェクトのほうだと、Build Settingsをみても Enable Bitcode = YES になっています。
Avatar
Kishikawa Katsumi 8/14/2018 3:05 PM
https://dl.google.com/dl/firebase/ios/carthage/5.4.0/Firestore-d7a38cc78422ca26.zip ^ をダウンロードしてやってみます。
3:09 PM
$ xcrun lipo -thin arm64 FirebaseFirestore.framework/FirebaseFirestore -output FirebaseFirestore_arm64.a $ otool -l FirebaseFirestore_arm64.a | grep LLVM ^ のようにarm64もしくはarmv7のスライスに対してotoolを実行するとビットコード入ってるように見えるんですよね。
Avatar
omochimetaru 8/14/2018 3:09 PM
むむ、lipoでバラすと出てきますね
Avatar
Kishikawa Katsumi 8/14/2018 3:09 PM
ちょっとこれについてはよく知らないんですけど。
3:10 PM
otoolとBitcode
3:10 PM
ただ、Firebase.frameworkはそのようにしても見つからないんで、さっきのIssueに書いてあることとは符合する気がします。
Avatar
omochimetaru 8/14/2018 3:11 PM
Firebase.frameworkはそもそも空っぽで変なんですよね
3:11 PM
あ〜
Avatar
Kishikawa Katsumi 8/14/2018 3:11 PM
Firebase.frameworkはたぶんヘッダだけ必要なんだと思うんですけど。
Avatar
omochimetaru 8/14/2018 3:14 PM
そうか、勘違いしてました
3:15 PM
エラーが出たのはFirebase.framework固有のエラーを踏んでいて
3:15 PM
otoolでの検査はfatバイナリに対してだと無いように見えちゃうだけでlipoでバラすと見えるんですね
3:16 PM
かつ、cocoapodsの方で同じ検査がうまくいくのは実機ビルドでx64単体だからthinだからだ。
3:16 PM
ありがとうございます、issue閉じてきます
Avatar
Kishikawa Katsumi 8/14/2018 3:18 PM
👍
3:19 PM
なんとなく会社のプロジェクトの課題も整理されてきた。
3:21 PM
そのプロジェクトではFirebaseAnalyticsに依存しているGoogleTagManagerを使っていて、GoogleTagManagerはCocoaPodsインストール以外に組み込む方法が提供されていない。
Avatar
omochimetaru 8/14/2018 3:21 PM
Firebaseに依存する更に外側のライブラリですか・・・
Avatar
Kishikawa Katsumi 8/14/2018 3:22 PM
そうなんですよねえ。
3:23 PM
BitcodeはONのはずだけどどうも有効になってないような挙動をする(これは今のところこうとしか表現できない、とても不思議な現象)、のもやっぱりそこじゃないだろうか。
3:25 PM
まあそれは置いといて、とりあえずこのIssue https://github.com/firebase/firebase-ios-sdk/issues/911 を読んで、 それだけで^ のように理解できることはまずないと思うので、
When installed through Carthage, Firebase.framework/Firebase' does not contain bitcode. My Environment Xcode version: 9.2 Firebase SDK version: 4.9.0 (Carthage) Firebase Component: Core, Analyt...
Avatar
omochimetaru 8/14/2018 3:25 PM
なるほど、 GooleTagManagerは FirebaseAnalyticsとGoogleAnalyticsとGoogleUtilitiesLegacyに依存している https://github.com/CocoaPods/Specs/blob/master/Specs/9/5/6/GoogleTagManager/7.1.1/GoogleTagManager.podspec.json
Specs - The CocoaPods Master Repo
Avatar
Kishikawa Katsumi 8/14/2018 3:25 PM
DocumentにPRするといいのかなあ。
Avatar
Carthageでの正しいインストール方法が公式にまとまっていると助かる
Avatar
Kishikawa Katsumi 8/14/2018 3:27 PM
https://github.com/firebase/firebase-ios-sdk/blob/7dc50504568b6d89c37e4e45b2c4663078992ad2/Carthage.md ^ に書いてあることは最もベーシックな利用法においては正しいんですよね。
firebase-ios-sdk - Firebase iOS SDK
Avatar
omochimetaru 8/14/2018 3:27 PM
そうですね、1パッケージ完結ならこれで。
Avatar
Kishikawa Katsumi 8/14/2018 3:27 PM
たぶんそれから外れるケース、を補足するようなPRを送ると良さそう。 (edited)
3:28 PM
^ けっこうよくある。
3:32 PM
たぶんGoogleTagManagerの話も、GoogleTagManagerにリンクするだけのFrameworkのプロジェクト(これはCocoaPodsで構成される)をアプリとEmbedded.frameworkからそれぞれ利用したらいいような気がするけど、それはよほどCocoaPods無くしたいというのでなければOverKillかな。。。
Avatar
omochimetaru 8/14/2018 3:36 PM
GooleTagManagerだけ指定したPodfileでプロジェクトを作ってみたけど、bitcode = YES でいけました。
3:37 PM
GooleUtilitiesLegacyとGoogleAnalyticsがバイナリを配布してたので怪しいと思ったけど、otoolでの検査でもbitcodeは入ってました。
Avatar
Kishikawa Katsumi 8/14/2018 3:38 PM
会社のプロジェクトでよくわからないのはBitcode=YESでビルドできるので有効のはずなんですけど、最終的に申請の段階でどうもBitcodeが無いような挙動になるんですよね。
Avatar
omochimetaru 8/14/2018 3:38 PM
あ〜なるほど。
Avatar
Kishikawa Katsumi 8/14/2018 3:38 PM
^ ちょっとよくわかってない。
3:39 PM
Xcodeから申請しようとすると、申請のウィザードでBitcode関連のチェックボックスが選べないとか、
3:40 PM
Fastlane等でXcode以外から申請してもiTunes ConnectでBitcode関連のものが見えないとか。
Avatar
omochimetaru 8/14/2018 3:40 PM
Submit向けのArchiveビルドと開発時のReleaseビルドで何かが異なっていそうですね
3:41 PM
申請用の場合は全部のアーキテクチャを固めたfatバイナリを作るけど
3:41 PM
実機テストしているときは実機がarm64ならそれしか作られないから
3:42 PM
何かのライブラリがあるアーキテクチャについてはbitcodeを同梱できていないとか・・・?
Avatar
Kishikawa Katsumi 8/14/2018 3:45 PM
そんな感じだと思います。ただ、とっかかりとしてアーカイブしたライブラリごとにBitcodeを調べていくのはちょっとしんどいのでいったん放置しています。。。
Avatar
omochimetaru 8/14/2018 3:58 PM
https://github.com/omochi/Firebase-Carthage-fbapp とりあえずbitcode周りの修正をしました↑
Contribute to Firebase-Carthage-fbapp development by creating an account on Github.
Avatar
omochimetaru 8/14/2018 4:03 PM
どうもです。
4:03 PM
GoogleTagManagerみたいなケースは悩ましいですね・・・
4:04 PM
それこそそういうbitcode周りの問題とかがデバッグしづらいのが、僕がCocoapodsを避けてる大きな理由です 申請のときだけ、とか本当に厄介だ。
Avatar
Kishikawa Katsumi 8/14/2018 4:23 PM
まあ今のところCocoaPodsが原因かどうかも実は不明なんですけどね。
4:25 PM
まあPros/Consはあって、Carthageはソースコードだけで構成されていてXcodeですんなりビルドできるものはいいけど、なんらかのバイナリに依存してるとかだとそれはそれで大変だと思う。
4:26 PM
あとリンクは基本的にユーザーがやることになるのも厳しいといえば厳しい。
4:27 PM
^ まあリンク周りに関してはは似たようなものか。どっちもうまくいってる間は簡単だけど、何か起こったらけっこう大変。
🦀 1
😦 1
Avatar
koki@incradle 9/6/2018 5:21 AM
初めまして。チャットライブラリであるMessageKit を使われてたことのある方いらっしゃいますか、、? firebaseとの連携におけるデータの表示方法が分からなくて。。
Avatar
Kishikawa Katsumi 9/6/2018 5:29 AM
MessageKitは使ったことはないですけど、使い方はわかります。 まず問題の切り分けとしてMessageKitの使い方がわからないか、Firebaseからデータの取得方法がわからないのどちらかだと思いますが、現時点までに試したコードとかありますか?
Avatar
koki@incradle 9/6/2018 6:20 AM
@Kishikawa Katsumi ありがとうございます。 firebaseのデータ取得は問題ないのですが、 自分が送ったメッセージと相手が送ったメッセージをどのように区別して表示させているのかが分からないです。。 1.センドボタンでメッセージ送信 とfirebase上に保存 →問題なし 2.firebaseを読み込んでメッセージ表示 →全てのメッセージが相手方の表示となってしまう このような状態です。
Avatar
Kishikawa Katsumi 9/6/2018 6:27 AM
MessageKitを見ると、自分かどうかの区別は MessagesDataSourcecurrentSender() で判断するようですが、そのメソッドは正しく実装されていますか?
Avatar
koki@incradle 9/6/2018 6:40 AM
@Kishikawa Katsumi 現状は以下のように記述しています。 let uid = (Auth.auth().currentUser?.uid)! func currentSender() -> Sender { return Sender(id: self.uid, displayName: "テストさん") } (edited)
Avatar
Kishikawa Katsumi 9/6/2018 6:50 AM
じゃあ試しに func isFromCurrentSender(message: MessageType) -> Bool を実装して常に true を返すようにしたらどうなりますか?今度は逆に全部自分のメッセージとして扱われて右側に表示されると思います。 @koki@incradle そうだとすると、 currentSender() の戻り値とデータが正しくマッチングしていないということになります。
Avatar
koki@incradle 9/6/2018 7:02 AM
@Kishikawa Katsumi ありがとうございます! isFromCurrentSenderはどこに実装するのでしょうか? currentSender内でしょうか。
Avatar
Kishikawa Katsumi 9/6/2018 7:04 AM
MessagesDataSource のメソッドなので、 currentSender() を実装しているクラスですね。とりあえず currentSender() の下とかにメソッドを定義したらいいです。 isFr くらいまで書いたらXcodeが補完してくれます。
7:05 AM
もし、プロジェクトが共有できるなら見せてもらった方が早い気がしますね。
Avatar
koki@incradle 9/6/2018 7:26 AM
@Kishikawa Katsumi ありがとうございます。 1時間後くらいに触れるので早速やってみようと思います。 共有はもちろん可能ですm( )m
Avatar
koki@incradle 9/6/2018 8:52 AM
@Kishikawa Katsumi おっしゃるとおり、func isFromCurrentSender(message: MessageType) -> Bool を実装すると、全て自分のメッセージとして扱われました。
Avatar
Kishikawa Katsumi 9/6/2018 8:53 AM
ならFirebaseから受信したデータでは正しく isFromCurrentSender が判定できていないということになります。
8:56 AM
isFromCurrentSender(message: MessageType) -> Bool はデフォルト実装では、return message.sender == currentSender() となっていて、sender の同値性は id の比較なので、Firebaseから受信したデータのid (=uid) がどうなっているかを見てみるとよさそうです。
Avatar
koki@incradle 9/6/2018 9:05 AM
@Kishikawa Katsumi ログ出力をしたのですが、以下の通りでした。 MessagesDataSource内でSenderをPrint → Sender(id: "VFv5i4DqcoYKg5cvuBEfJhzTJUS2", displayName: "テストさん") ViewDidLoad内でself.uidの定数をPrint → VFv5i4DqcoYKg5cvuBEfJhzTJUS2
9:05 AM
IDは同じでした。。
Avatar
Kishikawa Katsumi 9/6/2018 9:08 AM
確認するところが間違ってると思いますね。問題なのはDataSourceで返しているMessageの1つ1つのMessageType のインスタンスですよ。
9:09 AM
その中にsenderがcurrentSender()と一致するものは右側にそうでないものは左側に表示される仕組みです。
9:11 AM
先ほどのようにisFromCurrentSender()を自分で実装して、ただし下記のようにデフォルト実装と同じにして、 func isFromCurrentSender(message: MessageType) -> Bool { return message.sender == currentSender() } message.sender == currentSender() がtrueを返すものがあるかどうかデバッグしてみたらいいです。
Avatar
koki@incradle 9/6/2018 9:20 AM
ありがとうございます。結果全てFalseになっておりました。ここが間違っているのですね。
9:24 AM
var messageList: [MockMessages] = [] というArrayにメッセージを格納しているのですが、Printすると 全てVFv5i4DqcoYKg5cvuBEfJhzTJUS2というIDから送信しているのに 異なるSenderが格納されていました。 sender: MessageKit.Sender(id: "DcZuBymd8lcEjYDCwZ6vhb6ysRG3", displayName: "xxxさん")
9:28 AM
以下のReadするための関数内で、 let message2 のSenderをcurrentSenderにすると全て自分のIDとなり、OtherSenderにすると全て別のユーザーになります;; func setupFirebase() { ref.child("Chats").child(getRoomID()).queryLimited(toLast: 20).observe(.childAdded) { (snapShot) in self.testArray.removeAll() let mid = snapShot.key let dict = snapShot.value as! Dictionary <String, AnyObject> let text = String(describing: dict["Text"]!) let attributedText = NSAttributedString(string: text, attributes: [.font: UIFont.systemFont(ofSize: 15), .foregroundColor: UIColor.black]) let message2 = MockMessages(attributedText: attributedText, sender: self.currentSender(), messageId: mid, date: Date()) //self.messageList.append(message) self.messageList.append(message2) print("messageListの中身", self.messageList) self.messagesCollectionView.reloadData() } }
Avatar
Kishikawa Katsumi 9/6/2018 9:31 AM
それは自分でそうしているので当然だと思いますね。 snapShotののなかにsenderに関するデータは保存されてないのですか?それを設定すべきに見えますが。
Avatar
koki@incradle 9/6/2018 9:55 AM
@Kishikawa Katsumi ありがとうございます!!! senderに関するデータを設定し漏れていました。 無事送受信確認できました。 どうしても作成したいアプリがあり、独学でアプリ開発を始めて半年ですが、このように教えて頂いたことが初めてで本当に感謝しております。 ありがとうございます。精進します。 (edited)
Avatar
koki@incradle 9/29/2018 12:26 PM
firebaseって値の部分一致できるんですかね?
Avatar
🍤ACエビフライ🔌 10/19/2018 10:09 AM
Fabric 時代にCrashlytics beta distribution(Testflightみたいなの)あったとおもうんですけど、あれに対応するものっていまのFirebase にありますか?
Avatar
Kishikawa Katsumi 10/19/2018 10:12 AM
同じものがFablic Betaになってるんじゃなかったでしたっけ?
Avatar
🍤ACエビフライ🔌 10/19/2018 10:17 AM
それですそれです。Googleに買われた後は活発に開発してない感じかどうか知りたくて。 もし消えゆくサービスの気配ならいまさら導入したくないなというのがあります
Avatar
10/29にFirebase Summitが開催されるので、そこで何かアナウンスがあるかもしれません。
10:34 AM
Attend #FirebaseSummit, Oct 29th in Prague, to learn about Firebase and meet the team that built it
Avatar
アナウンスがあると言ったのは、もう公開情報でFabricについては廃止になることが決まっていて、来年にはすべてFirebaseに移行されることになっています。 https://get.fabric.io/roadmap (edited)
Learn about the future of Fabric
10:52 AM
Googleに買われた後は活発に開発してない感じかどうか知りたくて。
でいうと、Fabricにいた開発者はCrashlyticsの移行をしていたり、digitの人たちがFirebase Authに電話番号認証を追加していたりとわりと活発に開発は行われています。おそらくBetaについても移行真っ最中なのではないかと思います。
(edited)
Avatar
🍤ACエビフライ🔌 10/19/2018 11:49 AM
ありがとうございます! 🙏 🙇 なるほどそういう感じなら導入を積極的に考えていってよさそうです。 検討しつつFirebase summitのアナウンスを待ってから決定していこうと思います。
Avatar
@🍤ACエビフライ🔌 ロードマップがより細かくなりました。Betaも入っています。 https://get.fabric.io/roadmap#the-roadmap
Learn about the future of Fabric
👍 1
💯 1
Avatar
🍤ACエビフライ🔌 10/29/2018 9:50 AM
@d_date ありがとうございます!!!
Avatar
🍤ACエビフライ🔌 10/29/2018 10:04 AM
まだDoneが一つもないですね。数ヶ月後とかになりそうな気配
Avatar
今日出たばかりなので、まだこれからです😅
Avatar
yutailang0119 12/14/2018 3:07 AM
直接がFirebaseの問題ではないんだけど、同じこと起きてる可能性高いので、ここで聞くんですが、解決方法わかる方いませんか https://github.com/CocoaPods/CocoaPods/issues/8206
I've read and understood the CONTRIBUTING guidelines and have done my best effort to follow. 🌈 Report What did you do? Product -> Archive What did you expect to happen? Successful archive Wh...
Avatar
↓は Firebase iOS SDK の Combine 対応 API (多分 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-L62
Firebase iOS SDK. Contribute to firebase/firebase-ios-sdk development by creating an account on GitHub.
10:11 AM
非同期単発は FutureaddSnapshotListener とかは AnyPublisher と分けてほしい気が。
10:12 AM
将来( Swift 6 で?) Futurefunc get() async throws -> Output が生えるだろうし。 (edited)
Avatar
Kishikawa Katsumi 9/10/2020 10:32 AM
何でEraseしてるんですかね。
Avatar
AnyPublisher にそろえたいのかもしれませんが、これは将来的に使い勝手に多大な影響を与えそうなのでコメントしたいんですが、検索してもどの issue / PR にコメントすればよいのやら・・・。
10:53 AM
combine-master から master (またはその他のブランチ)への PR がないんですよね。 (edited)
10:55 AM
↑の API を追加した combine-master への PR はマージされて lock されちゃってて・・・。 (edited)
11:01 AM
Future 返すように改変した PR 作って、そこで議論するという手もありますね。
Avatar
Kishikawa Katsumi 10/21/2020 1:16 PM
Server Side SwiftでFirebaseのSDKがない、というのと似たような問題としてApp ClipsはSocket Streamが使えないという制限があるからFirestoreが使えないっぽい。 という感じだとSwiftでREST APIをラップしたものは意外と需要があるかもしれないと思った。 まあ会社がやってるものは直アクセスはたぶんしなくて、前段にNode.jsのBFFとか置くんだろうけど。
Avatar
Obj-C 一切噛まない Swifty な API の Firebase SDK はニーズがありそうな気がしますね。
Avatar
Kishikawa Katsumi 10/21/2020 1:28 PM
あ、そうか。ObjCを置き換えるという利点もありますね。意外とメリットありそう。
1:28 PM
そもそもApp ClipsやちょっとしたエクステンションにFirebaseリンクするのちょっと大げさよね、という感じもあるし。 (edited)
Avatar
Firebase の API って概ね言語間で同じになってますけど、その分 Swifty じゃないところもありますし、軽量で Swifty な(しかも信頼できる)ライブラリがあるとうれしいですね。 (edited)
Avatar
Kishikawa Katsumi 10/21/2020 1:35 PM
なるほど。そこは他の言語のスタイルと合わせた方がいいかなと思ってたんですけど気にせずにSwiftっぽい方が嬉しいですか?
Avatar
難しいのは、結局 Functions で TS で書くとかになると、 API 似通ってる方がわかりやすいとかはありますよね・・・。
1:37 PM
Swift だけで書いてる分にはいいんですが・・・。
Avatar
Kishikawa Katsumi 10/21/2020 1:38 PM
まあこういう場合私が書くとしたら基本的に同じようなスタイルで書けるようにしつつ(コピペして細かい文法の違いを直すだけ、みたいな)、使いにくそうなところは別のスタイルでも書けるようにエイリアス的なAPIを用意する、とかかな。
Avatar
(エラーコードではなく)エラーが enum になってるとかはあるとうれしいかも。
Avatar
Kishikawa Katsumi 10/21/2020 1:39 PM
あまり「これがSwiftらしいでしょ」って冒険するよりかは保守的にいった方がいい気がする。
エラーが enum になってるとかはあるとうれしい
これはとても同意します。
Avatar
あとは今のタイミングだと、コールバックにするのか Future にするのかとか難しいですね・・・。
1:40 PM
async/await を見込むなら前者にしておいた方がマイグレーションツールの対象になりやすそうな。
1:41 PM
コールバックに (Value?, Error?) を渡すのか Result<Value, Error> を渡すのかも悩ましい?後者でもマイグレーションしてくれると信じたいですが。
Avatar
Kishikawa Katsumi 10/21/2020 1:43 PM
基本的にコールバックをFutureにするのは1つ増えるだけでできるからコールバックで作っていいんじゃないかと思ってるんですけど、その感覚どうですかね?
1:44 PM
Futureは使う人が用意するかエクステンション等であらかじめ用意するか、でカバーできるかなと。
Avatar
サーバーサイドとiOS両方で使うことを考えると、基本のライブラリはCombineとかswift-nioに依存しないコールバックにしておいて、使う側でCombineバインディングライブラリをインポートする、みたいな作りだと嬉しい気がします。 (edited)
Avatar
Kishikawa Katsumi 10/21/2020 1:44 PM
そういう作りはとてもいいと思います。
Avatar
あ、そうですね。マルチプラットフォームを考えると基本はコールバックになりますね。
1:46 PM
#if canImport(Combine) で本体に入れちゃうという手もありますね。 < 使う側でCombineバインディングライブラリをインポートする、みたいな作り
Avatar
Kishikawa Katsumi 10/21/2020 1:46 PM
まあエラーはさすがにResultで返してええやろ
👍 1
1:46 PM
ネットワーク通信のエラーはクライアントサイドとサーバーサイドの両方あるからそれを考えても(Value?, Error?)でやるのはしんどい。
Avatar
FirebaseのSwift PM対応は、IPA生成時にエラーを踏むのでプロダクションではしばらく使ってはいけないになってしまった https://github.com/firebase/firebase-ios-sdk/issues/6726
Step 0: Are you in the right place? For issues or feature requests related to the code in this repository file a Github issue. If this is a feature request please use the Feature Request template. ...
☹️ 2
😢 5
Avatar
M1ではCarthageも使えない状況 https://github.com/firebase/firebase-ios-sdk/issues/7039
[REQUIRED] Step 1: Describe your environment Xcode version: 12.2 Firebase SDK version: 7.1.0 Installation method: Carthage Firebase Component: All macOS version: 11.0 Chip: Apple M1 [REQUIRED] Step...
Avatar
M1は致し方なしの感
Avatar
まさかのCocoaPods一択
Avatar
CocoaPodsはちゃんと動いた。ffiで詰まるみたいな話をみかけたけど、VSCode (Intel) でterminal使ってるので特になにも詰まらなかった。
Avatar
Deviceでは動くけど、Simulatorでは動かない。 Firebase Analytics, PerformanceなどのStatic Linked Libraryはarm64のsimulatorに対応していないので絶賛対応中。 https://github.com/firebase/firebase-ios-sdk/issues/6520 CocoaPodsのバグも修正中 https://github.com/CocoaPods/CocoaPods/pull/10234
Step 0: Are you in the right place? For issues or feature requests related to the code in this repository file a Github issue. If this is a feature request please use the Feature Request template. ...
Avatar
CocoaPodsもビルドできるようになった https://github.com/firebase/firebase-ios-sdk/blob/master/AppleSilicon.md
Firebase iOS SDK. Contribute to firebase/firebase-ios-sdk development by creating an account on GitHub.
YellowWiggle 1
Exported 257 message(s)
Timezone: UTC+0