Firebase Unity SDK 1.1.1。 Unity 5.5.0p4 XCode 8.2.1
Firebaseの認証とデータベースを使用すると、XCodeでプロジェクトをビルドするときに次のエラーが発生します。
アーキテクチャarm64の未定義シンボル:
"_ OBJC_CLASS _ $ _ FIRGoogleAuthProvider"、参照元:libAuth.aのobjc-class-ref(credential_ios_ef8c3cf45c3329a5e5902f99026c639a.o)
"_ OBJC_CLASS _ $ _ FIRGitHubAuthProvider"、参照先:libAuth.a(credential_ios_ef8c3cf45c3329a5e5902f99026c639a.o)のobjc-class-ref
"_ OBJC_CLASS _ $ _ FIREmailPasswordAuthProvider"、参照先:libAuth.a(credential_ios_ef8c3cf45c3329a5e5902f99026c639a.o)のobjc-class-ref
"_ OBJC_CLASS _ $ _ FIRFacebookAuthProvider"、参照先:libAuth.a(credential_ios_ef8c3cf45c3329a5e5902f99026c639a.o)のobjc-class-ref
"_ OBJC_CLASS _ $ _ FIRApp"、参照元:libApp.aのobjc-class-ref(app_ios_c76c7d869e568a9b561ea55e25a7dcc0.o)
"_ OBJC_CLASS _ $ _ FIRAuth"、参照元:libAuth.a(auth_ios_3c64a79cf1eb3f06f9309f4d8e91ee94.o)のobjc-class-ref
"_ OBJC_CLASS _ $ _ FIRTwitterAuthProvider"、参照先:libAuth.aのobjc-class-ref(credential_ios_ef8c3cf45c3329a5e5902f99026c639a.o)
"_ OBJC_CLASS _ $ _ FIROptions"、参照元:libApp.a(app_ios_c76c7d869e568a9b561ea55e25a7dcc0.o)のobjc-class-ref)ld:シンボルのシンボルが見つかりませんarm64 clang:エラー:リンカコマンドが終了コード1で失敗しました(呼び出しを表示するには-vを使用します)
XCodeで何かを見逃していますか?または、Unityでチェックするものがありますか?
ありがとう!
Unity Cloud Buildで構築する場合とローカルで構築する場合のエラーを把握するために数日を費やしました。うまくいけば、これは他の誰かを助けることができます!
CocoaPodsがインストールされている限り、これは機能します。 CocoaPodsがインストールされていない場合、iOS用にビルドした後、Unityコンソールにエラーが表示されます。それ以外は、Firebaseが提供する指示はUnity 5.6およびXcode 8.3で正常に機能しました。
CocoaPodsはUCBでは使用できませんが、Firebaseには非CocoaPodsの代替手段があります。 https://firebase.google.com/docs/ios/setup#frameworks
フレームワークを手動で追加
手順はネイティブiOSビルドを前提としていますが、必要なフレームワークをXcodeプロジェクトではなくAssets/Plugins/iOS/Firebaseにドラッグするだけです。 Unityはこれらのフレームワークをビルド時にXcodeプロジェクトに追加します。
リンカーフラグを追加
_-ObjC
_を他のリンクフラグに手動で追加する必要があります。何らかの理由で、ローカルXcodeプロジェクトに表示されましたが、UCBがビルドしたときには表示されませんでした。前述のmarosのようなポストプロセススクリプトを作成します。 https://forum.unity3d.com/threads/problem-building-ios-app-with-cloud-build-using-google-analytics.390803/#post -2549911
次のように_-ObjC
_を追加する必要があります。
proj.AddBuildProperty(target, "OTHER_LDFLAGS", "-ObjC");
この部分を追加しない場合、UCBはビルドを作成する可能性がありますが、_-ObjC
_フラグがないために含まれていない拡張機能/カテゴリメソッドを参照するため、FirebaseAuthを作成しようとするとすぐにゲームがクラッシュします。
他の必要なフレームワークとライブラリの追加
使用しているFirebase機能に応じて、異なる追加のフレームワークまたはライブラリが必要になる場合があります。たとえば、FirebaseDatabaseを使用したことがあり、ドキュメントではこれについて言及していませんでしたが、Xcodeは_libicucore.tbd
_を追加する必要があるリンカーエラーについて不平を言いました。
これを解決するための最良の方法は、CocoaPodsをローカルにアンインストールしてから、UnityにXcodeプロジェクトを作成させて、UCBが経験する内容をより正確に表現することです。この部分では、リンカエラーが参照しているフレームワークまたはライブラリを特定するために、Googlingと同様に試行錯誤が必要になる場合があります。 Xcodeプロジェクトをローカルでビルドしようとすると、リンカーエラーが発生します。
追加した:
_List<string> frameworks = new List<string>() {
"AdSupport.framework",
"CoreData.framework",
"SystemConfiguration.framework",
"libz.dylib",
"libsqlite3.dylib",
"libicucore.tbd"
};
_
GoogleServices-Info.plistを手動で移動する
もう1つの奇妙な点は、UCBがGoogleServices-Info.plistをXcodeプロジェクトに移動しなかったことです。ローカルで実行されるUCBで実行されていない他のスクリプトが必要です。リンカフラグとフレームワークを追加するポストプロセススクリプトでは、GoogleServices-Info.plistをXcodeプロジェクトディレクトリに移動してから、バンドルに追加することもできます。
最初にファイルを移動します。
_if (!File.Exists(path + "/GoogleService-Info.plist"))
{
FileUtil.CopyFileOrDirectory ("GoogleService-Info.plist", path + "/GoogleService-Info.plist");
}
_
次に、ビルドに追加します。
_string guid = proj.AddFile("GoogleService-Info.plist", "GoogleService-Info.plist");
proj.AddFileToBuild(target, guid);
_
そしてそれはそれであるはずです。 Firebase機能を追加する際に他の問題が発生した場合は更新します。現在、認証、データベース、分析を使用しています。
まず、あなたの(ハード)作業を共有してくれたすべての人に感謝します!
この件については多くのことが言われていますが、両方のすべてのピースを収集するのに、時間のlotと試行錯誤のlotがかかりましたSO&Unityフォーラム、だから私は最終的に解決したソリューションを投稿するだけで、Unity Cloud Build/Unity 5.6.0f3/Xcode 8.0を使用して、すべての問題を最終的に解決しました。
private static void ProcessPostBuild (BuildTarget buildTarget, string path)
{
// Only perform these steps for iOS builds
#if UNITY_IOS
Debug.Log ("[UNITY_IOS] ProcessPostBuild - Adding Google Analytics frameworks.");
// Go get pbxproj file
string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj";
// PBXProject class represents a project build settings file,
// here is how to read that in.
PBXProject proj = new PBXProject ();
proj.ReadFromFile (projPath);
// This is the Xcode target in the generated project
string target = proj.TargetGuidByName("Unity-iPhone");
proj.AddBuildProperty(target, "OTHER_LDFLAGS", "-ObjC");
proj.AddBuildProperty(target, "OTHER_LDFLAGS", "-v");
proj.SetBuildProperty(target, "ENABLE_BITCODE", "NO");
if (!File.Exists(path + "/GoogleService-Info.plist"))
{
FileUtil.CopyFileOrDirectory("Assets/GoogleService-Info.plist", path + "/GoogleService-Info.plist");
}
string guid = proj.AddFile("GoogleService-Info.plist", "GoogleService-Info.plist");
proj.AddFileToBuild(target, guid);
// List of frameworks that will be added to project
List<string> frameworks = new List<string>() {
"AddressBook.framework",
"AdSupport.framework",
"CoreData.framework",
"SystemConfiguration.framework",
};
// Add each by name
frameworks.ForEach((framework) => {
proj.AddFrameworkToProject(target, framework, false);
});
// List of frameworks that will be added to project
List<string> usrLibFrameworks = new List<string>() {
"libsqlite3.tbd",
"libz.tbd",
"libicucore.tbd",
};
// Add each by name
usrLibFrameworks.ForEach((framework) => {
proj.AddFileToBuild(target, proj.AddFile("usr/lib/"+ framework, "Frameworks/" + framework, PBXSourceTree.Sdk));
});
// Write PBXProject object back to the file
proj.WriteToFile (projPath);
#endif
}
PS firebase unity sdkがそのようなハックが動作することを必要とするのはクレイジーです(UCBは私たちにとって絶対的な要件であり、ほとんどのマルチプラットフォームモバイル開発者にとっては推測です)公式のFirebase Unityサポートの始まり、私はあまりそれを数えません
私は同じ問題を抱えていました。それを直しました。
Podfileファイルを見つけて、テキストエディターで開きます。削除する
、:integrate_targets => false
2行目で、「インストール! 「ココアポッド」
次に、プラットフォームの後に新しい行を追加します:ios ...
use_frameworks!
次に、ターミナル画面を開き、このプロジェクトのディレクトリに移動します。 「pod install」と入力して入力します。すべてがうまくいけば、ワークスペースファイルが作成され、プロジェクトの代わりにXcodeでワークスペースを開く必要があるというメッセージが表示されます。 Xcodeでプロジェクトを閉じて、projectname.xcworkspaceファイルを開きます。これで、Xcodeがワークスペースを開き、プロジェクトを実行できるようになります。展開ターゲットを8.0に調整する必要がある場合があります。これがあなたのために働くことを願っています
私はちょうどそれを把握し、このようになるようにUnityによって作成されたポッドファイルで古いバージョンを使用するだけです
ターゲット「Unity-iPhone」ポッド「Firebase/Analytics」、「3.17.0」ポッド「Firebase/Auth」、「3.17.0」ポッド「Firebase/Core」、「3.17.0」ポッド「Google-Mobile-Ads」 -SDK '、' 7.13 '終了
///注意: //
(Google-Mobile-Ads-SDK)の設定を作成する際に、Enable Modules(cおよびObjective-c)をyesに設定することを忘れないでください
ターミナルからフォルダーを開いて実行します:-> pod install to update pods
:)
私は同じ問題を抱えていた、数時間を費やした後、私は主な問題を得た。
それは、ポッドファイルライブラリの定義された特定のバージョンでした。
target 'Unity-iPhone' do
pod 'Firebase/Auth', '4.10.0'
pod 'Firebase/Core', '4.10.0'
end
IOSプロジェクトのポッドファイルをユニティビルドすると、最新のライブラリバージョンが定義されます。ただし、xcode/terminalからGITからポッドライブラリを更新しようとして、特定のバージョンが利用できない場合、更新に失敗してこのエラーが表示されます。
ソリューションは単純で、特定のバージョンを定義する必要はありません。ポッドはGITの最新バージョンを更新します。
target 'Unity-iPhone' do
pod 'Firebase/Auth'
pod 'Firebase/Core'
end
Xcodeを使用してFirebaseフレームワークでUnityアプリをローカルでビルド:
IOS SDKバージョンがすべてです。この答えには解決策の一部があります: https://stackoverflow.com/a/41908040/8063631
Mac環境での作業。
Unity to iOSでビルドする場合。事前に確認してください:アセット-> iOSリゾルバー->設定
IOSにビルドし、.workspaceファイルを開きます。
次にPods-> Podfileに移動して、4.0.0がそのエラーを起動するため、過去のリリースバージョン(3.7.0)を追加します。
target 'Unity-iPhone' do
pod 'Firebase/Auth'
pod 'Firebase/Core'
end
によって(たとえば...)
target 'Unity-iPhone' do
pod 'Firebase/Auth', '3.7.0'
pod 'Firebase/Core', '3.7.0'
end
競合を避けるためにxCode IDEを閉じ、まだ持っていない場合はCocoapodsをインストールします( https://guides.cocoapods.org/using/getting-started.html ):
確認する:
pod --version
でインストール:
Sudo gem install cocoapods
ターミナルを実行してプロジェクトフォルダーに移動し、次のように入力します。
pod install
現在のバージョンを削除し、3.7.0に置き換えます。
XCodeを開き、[Product]-> [Clean and Product]-> [Build]を押します
この問題が発生し、ポッドのインストールを更新することで修正されました。1つの方法はローカルにキャッシュされたコピーを消去して再インストールし、別の方法はインストールをオンラインソースから強制することでした
IOSへの構築が成功したことに言及する価値がある
「成功」の結果でビルドが完了しました
しかし、ポッドのインストール中にエラーが発生しました
macターミナルで、ディレクトリをPodfile
が含まれるビルド済みフォルダーに変更します
以下を実行しました
$ pod repo remove master
$ pod install --repo-update
Unityからプロジェクトを再ビルドすると、pods
が自動的にインストールされます
詳細については Firebase pods を参照してください
5.0.0以降のリリースでは、各リリースのソースもCocoaPodsマスターにデプロイされ、標準のCocoaPods Podfile構文を介して利用できます。
これらの手順を使用して、他のブランチ、タグ、またはコミットでFirebaseリポジトリにアクセスできます。
ポッドソースの場所を上書きする方法とオプションについては、Podfile構文リファレンスをご覧ください。
段階的なソースポッドのインストール手順
IOSの場合、次の行のサブセットをPodfile
にコピーします。
pod 'Firebase' # To enable Firebase module, with `@import Firebase` support pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :tag => '5.0.0' pod 'FirebaseAuth', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :tag => '5.0.0' pod 'FirebaseDatabase', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :tag => '5.0.0' pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :tag => '5.0.0' pod 'FirebaseFunctions', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :tag => '5.0.0' pod 'FirebaseMessaging', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :tag => '5.0.0' pod 'FirebaseStorage', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :tag => '5.0.0'
MacOSおよびtvOSの場合、次のサブセットをコピーします:pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :tag => '5.0.0' pod 'FirebaseAuth', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :tag => '5.0.0' pod 'FirebaseDatabase', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :tag => '5.0.0' pod 'FirebaseStorage', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :tag => '5.0.0'
1-少なくともCocoaPodsバージョン1.4.0-pod --versionがあることを確認します。
2-不要なコンポーネントのポッドを削除します。ただし、FirebaseCoreを常に含める必要があります。
3-最新のFirebaseリリースにタグを更新します。 リリースノート を参照してください
4-ポッドの更新を実行します。
ココアポッド
CocoaPodsは、iOS/macOSプロジェクトの依存関係マネージャーです。外部のフレームワーク/ライブラリをプロジェクトにインストールするために使用されます。
Firebaseフレームワークを使用してUnityアプリをXcodeでローカルにビルドする:
システムにcocoapodsをインストールする必要があります。 https://guides.cocoapods.org/using/getting-started.html#toc_
Unity Build CloudでFirebaseフレームワークを使用してUnityアプリをビルドする:
Unity Build Cloudサーバーでこの問題が発生するユーザー向け。
このフォーラムのスレッドによると、 https://forum.unity3d.com/threads/build-failed-cocoapods.421286/ cocoapodsのサポートはサポートされていません。 (そしておそらく開発の予定さえありません)。
Cocoapodsは、XcodeプロジェクトでiOSプロジェクトのセットアップ用に参照されるすべてのライブラリを保持する責任があります。 Unity Build Cloudではサポートされていないため、手動で行う必要があります。
macOSシステムにcocoapodsがインストールされていることを確認してください: https://guides.cocoapods.org/using/getting-started.html#toc_
unityアプリをローカルでビルドします(クラウドでビルドをトリガーしないでください)。ビルドは、Xcodeプロジェクト(実行可能である必要があります)をエクスポートします。このXcodeプロジェクトには、Unityプロジェクトに追加する必要があるライブラリ(Frameworks)が含まれています。
すべての* .frameworkフォルダーをEXPORTED_XCODE_PROJECT/FrameworksからYOUR_UNITY_PROJECT/Assets/Plugins/iOSに移動します。例:FirebaseAnalytics.framework、FirebaseCore.framework
Firebaseでは、iOS sqliteフレームワークもプロジェクトに含める必要があります。そのためには、このソリューションを使用します。 https://forum.unity3d.com/threads/problem-building-ios-app-with-cloud-build-using-google-analytics.390803/#post-2549911 =クラスPostBuildProcessorでメソッドを変更ProcessPostBuild、
// ObjC - needed for Firebase proj.AddBuildProperty (target, "OTHER_LDFLAGS", "-ObjC");
List<string> frameworks = new List<string>() { "AdSupport.framework", "CoreData.framework", "SystemConfiguration.framework", "libz.dylib", "libsqlite3.dylib", "libApp.a", "libAnalytics.a" };
Unityプロジェクトを保存すると、iOS Unity Build Cloudが動作するはずです