在 Xcode 中构建档案时出错(我使用过 Unity 和 Firebase)
Posted
技术标签:
【中文标题】在 Xcode 中构建档案时出错(我使用过 Unity 和 Firebase)【英文标题】:Error in building an archive in Xcode (I've used Unity & Firebase) 【发布时间】:2020-04-29 12:36:56 【问题描述】:我一直在为这个问题苦苦挣扎……好几天了…… 我已经使用 Unity(和 Firebase)制作了一个应用程序,构建了一个 ios 版本(没有 CocoaPods,所以我稍后在 Xcode 中导入了框架,Firebase 在此处的第 4 步中说过:https://firebase.google.com/docs/ios/setup#frameworks) 到现在为止,一切都很好。 我使用 Xcode 打开了 .xcodeproj,填写了我的应用程序信息,尝试构建存档并收到此错误:
ld: warning: arm64 function not 4-byte aligned: _unwind_tester from /Users/dor/Desktop/PullApp-1.0.0/Libraries/libiPhone-lib.a(unwind_test_arm64.o)
Undefined symbols for architecture arm64:
"_OBJC_CLASS_$_FIRApp", referenced from:
objc-class-ref in libFirebaseCppApp.a(app_ios_814e1620d4f88024cea4bade26623a67.o)
"_OBJC_CLASS_$_FIRTransactionResult", referenced from:
objc-class-ref in libFirebaseCppDatabase.a(database_reference_ios_0c4ba7507f304dd9e420c9763efbc13d.o)
"_OBJC_CLASS_$_FIRDatabase", referenced from:
objc-class-ref in libFirebaseCppDatabase.a(database_ios_e51dee2718c2fa50bb12fbc46a002ec6.o)
"_OBJC_CLASS_$_FIRGameCenterAuthProvider", referenced from:
objc-class-ref in libFirebaseCppAuth.a(credential_ios_7e32949a14fe9694040ff5eed8d1b954.o)
"_OBJC_CLASS_$_GKLocalPlayer", referenced from:
objc-class-ref in libFirebaseCppAuth.a(credential_ios_7e32949a14fe9694040ff5eed8d1b954.o)
"_OBJC_CLASS_$_FIRGoogleAuthProvider", referenced from:
objc-class-ref in libFirebaseCppAuth.a(credential_ios_7e32949a14fe9694040ff5eed8d1b954.o)
"_OBJC_CLASS_$_FIRPhoneAuthProvider", referenced from:
objc-class-ref in libFirebaseCppAuth.a(credential_ios_7e32949a14fe9694040ff5eed8d1b954.o)
"_OBJC_CLASS_$_FIRPhoneAuthCredential", referenced from:
objc-class-ref in libFirebaseCppAuth.a(user_ios_1b162c7ca01af7914d8255750deffbf0.o)
"_OBJC_CLASS_$_FIROptions", referenced from:
objc-class-ref in libFirebaseCppApp.a(app_ios_814e1620d4f88024cea4bade26623a67.o)
"_OBJC_CLASS_$_FIROAuthProvider", referenced from:
objc-class-ref in libFirebaseCppAuth.a(credential_ios_7e32949a14fe9694040ff5eed8d1b954.o)
"_OBJC_CLASS_$_FIRConfiguration", referenced from:
objc-class-ref in libFirebaseCppApp.a(log_ios_dd26aec5b8537064a4c15d38b58b4640.o)
"_OBJC_CLASS_$_FIRFacebookAuthProvider", referenced from:
objc-class-ref in libFirebaseCppAuth.a(credential_ios_7e32949a14fe9694040ff5eed8d1b954.o)
"_OBJC_CLASS_$_FIRDatabaseReference", referenced from:
objc-class-ref in libFirebaseCppDatabase.a(database_reference_ios_0c4ba7507f304dd9e420c9763efbc13d.o)
"_OBJC_CLASS_$_FIREmailAuthProvider", referenced from:
objc-class-ref in libFirebaseCppAuth.a(credential_ios_7e32949a14fe9694040ff5eed8d1b954.o)
"_OBJC_CLASS_$_FIRGitHubAuthProvider", referenced from:
objc-class-ref in libFirebaseCppAuth.a(credential_ios_7e32949a14fe9694040ff5eed8d1b954.o)
"_OBJC_CLASS_$_FIRTwitterAuthProvider", referenced from:
objc-class-ref in libFirebaseCppAuth.a(credential_ios_7e32949a14fe9694040ff5eed8d1b954.o)
"_OBJC_CLASS_$_FIRAuth", referenced from:
objc-class-ref in libFirebaseCppAuth.a(auth_ios_b54468d60a10f4f18faae0e528a8c0ba.o)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我尝试了哪些解决方案,但仍然无法存档? - 在“其他链接器”中,我放置了“-ObjC”。 - 将架构更改为“标准架构”(不知道它的作用,但这是我的好朋友 google 向我推荐的众多解决方案之一)。 - 确保我在项目和目标的构建设置中都添加了“-ObjC”(因为这在错误消息中反复写入)。
这个^是我在网上找到的解决方案..仍然没有... 我可以在网站上找到任何真正符合我的确切错误的东西,也可以在任何地方找到真正... 在我完全放弃IOS之前有什么想法吗?
【问题讨论】:
【参考方案1】:[编辑 - 在此答案后总结 cmets]
问题是 Unity SDK 已过期,请参阅 this page 了解最新版本。
此外,您应该能够仅关注Unity getting started instructions。 iOS getting started instructions 仅适用于 iOS 原生游戏和应用程序(Unity SDK 尝试通过包含的External Dependency Manager for Unity 执行所有必要的操作)。
[原答案]
我想我知道这里发生了什么,请注意所有丢失的文件的名称中都有 Cpp。 Unity SDK 构建在C++ SDK 之上,您缺少所有这些依赖项。这些包含在您安装的初始 unitypackage 中,因此您可能需要仔细检查以确保您没有意外删除那里的 .a
文件(通常它们被版本控制软件忽略为“构建工件”) .
考虑到这一点,除非您正在使用 Firebase 做一些有趣的事情(例如:您自己的 Unity 绑定或可能正在使用嵌入 Unity into an iOS app)或者真的不信任 CocoaPods,否则您应该让外部依赖管理器用于 Unity 处理 iOS 库的解析。这随 Firebase Unity SDK 一起提供,应该可以正常工作。我写了一篇简短的文章here(当时它还被称为 Play Services Resolver),希望能消除您的任何不确定性。
这些是我当前(工作)的所有设置:
请注意我的配置方式,我需要打开 xcworkspace 而不是您习惯的 xcproj。这可以通过Cocoapods Integration
下拉菜单进行配置。
如果您还有任何问题,请告诉我!
--帕特里克
【讨论】:
首先 - 非常感谢!我坚持将我的应用程序实施到 IOS 超过 14 天!我好头疼哈哈哈。好的,所以我已经阅读了您所写的所有内容(还有这篇文章,非常有见地,所以再次感谢 ^_^ )并且我决定采用您的方法 - 使用 CocoaPods 和解析器。因此,我使用您在 IOS 解析器中的确切设置从 Unity 创建了一个新版本。构建成功(YAY)但是,我也在控制台中看到了这个错误:(在下一条评论中) "由于 CocoaPods 安装失败,iOS 框架添加失败。这可能会导致 Xcode 项目无法正常工作。失败后,执行“pod repo update”并成功。“pod install “然后再次尝试,但仍然失败。这可能是由于 CocoaPods 安装损坏。有关潜在解决方案,请参阅:guides.cocoapods.org/using/troubleshooting.html。” (在下一条评论中计数) "pod install output: Analyzing dependencies [!] CocoaPods 找不到 pod "Firebase/Analytics" 的兼容版本:在 Podfile 中:Firebase/Analytics (= 5.15.0) 您的规范来源都不包含满足依赖关系的规范:Firebase/Analytics (= 5.15.0)
。您有:* 过时的源代码库,您可以使用pod repo update
或pod install --repo-update
进行更新。* 输入错误的名称或版本。* 未添加源代码库将 Podspec 托管到您的 Podfile。"
我已经尝试了所有控制台的解决方案,仍然没有。我确实注意到了一些奇怪的事情,我尝试了几次,修改了 podfile 中的 pod 并删除了每个 pod 的版本,然后我尝试再次构建游戏,但是,弹出了同样的错误,所以我再次去podfile,看到pods版本都回来了。有些东西重置了它,但我不知道是什么,如果它真的很重要..希望你能帮助我,再次感谢一切,我确实,真的,很感激(^_^)
嗯,这很有趣。您是否有可能安装了不同版本的 Firebase Unity SDK?您也可以尝试只清除您的构建目录并让它重新生成。如果您在 Podfile 中使用 不同 版本的库取得成功,请务必向 github.com/firebase/quickstart-unity/issues 报告。一般来说,你根本不应该接触 Podfile,让解析器来做它的事情。如果您需要新的 pod,创建一个 Dependencies.xml 将确保您的更改不会被删除(在我链接的那篇文章中提到)。【参考方案2】:
此链接帮助我解决了问题:https://github.com/facebook/facebook-sdk-for-unity/issues/504。
但我只有一个来自您的错误(可能是 Firebase 问题):
objc-class-ref in libFirebaseCppApp.a(app_ios_814e1620d4f88024cea4bade26623a67.o)
导致
ld:警告:arm64 函数未 4 字节对齐:_unwind_tester 来自 /Users/XXX/XXX/XXX/XXX/YYYY/Build_iOS/Libraries/libiPhone-lib.a(unwind_test_arm64.o) 架构 arm64 的未定义符号:“OBJC_CLASS$GKLocalPlayer”...
我通过以下步骤手动添加了 GameKit.framework:
UnityFramework(目标下方带有黄色图标的那个)-> Build Phases -> Link Binary With Libraries(滚动到最后,您会找到+按钮,按下它并在搜索“GameKit.framework”中写入)
希望它对某人有所帮助,因为我浪费了几个小时来寻找解决这个问题的方法。
【讨论】:
以上是关于在 Xcode 中构建档案时出错(我使用过 Unity 和 Firebase)的主要内容,如果未能解决你的问题,请参考以下文章
使用版本 Xcode 11.4 构建 Xcode 项目时反复出错