IL2CPP:iOS 构建 NeatPlug 的链接错误 - Flurry Analytics 插件(通用)

Posted

技术标签:

【中文标题】IL2CPP:iOS 构建 NeatPlug 的链接错误 - Flurry Analytics 插件(通用)【英文标题】:IL2CPP : linking error for iOS build NeatPlug - Flurry Analytics plugin (universal) 【发布时间】:2015-06-26 09:23:29 【问题描述】:

我们在 Unity 游戏中使用 Neatplug 的 Flurry 分析插件。在我们将 unity 更新到 5.1.1P1 版本之前,一切都很顺利。 这样做会使 ios 构建(链接)在 xcode 中失败(使用 IL2CPP 脚本后端,以通用架构为目标)。 这是错误:

ld:警告:忽略文件 /.../Libraries/Plugins/iOS/libflurry-analytics-plugin-simulator.a, 文件中缺少所需的架构 arm64 /.../Libraries/Plugins/iOS/libflurry-analytics-plugin-simulator.a (2 片)ld:警告:忽略文件 /.../Libraries/Plugins/iOS/libsmart-iap-plugin-simulator.a, 文件中缺少所需的架构 arm64 /.../库/插件/iOS/libsmart-iap-plugin-simulator.a (2片)

架构 arm64 的未定义符号:“_SecItemUpdate”, 参考自: - [FlurryKeychainWrapper updateValueData:forKey:] 在 libFlurry.a(libFlurry.a-arm64-master.o) "_kSecValueData",引用 从: -[FlurryKeychainWrapper setData:forKey:] 在 libFlurry.a(libFlurry.a-arm64-master.o) -[FlurryKeychainWrapper updateValueData:forKey:] 在 libFlurry.a(libFlurry.a-arm64-master.o) “_kSecAttrAccessibleWhenUnlocked”,引用自: - [FlurryKeychainWrapper setData:forKey:] 在 libFlurry.a(libFlurry.a-arm64-master.o) "_kSecAttrAccessible", 参考自: - [FlurryKeychainWrapper setData:forKey:] 在 libFlurry.a(libFlurry.a-arm64-master.o) "_SecItemDelete",引用 从: - [FlurryKeychainWrapper removeObjectForKey:] 在 libFlurry.a(libFlurry.a-arm64-master.o) "_SecItemAdd",引用 从: - [FlurryKeychainWrapper setData:forKey:] 在 libFlurry.a(libFlurry.a-arm64-master.o) "_kSecMatchLimitOne", 参考自: - [FlurryKeychainWrapper dataForKey:] 在 libFlurry.a(libFlurry.a-arm64-master.o) “_OBJC_CLASS_$_SKProductsRequest”,引用自: libsmart-iap-plugin.a(SmartIAP.o) "_SecItemCopyMatching" 中的 objc-class-ref,引用自: -libFlurry.a(libFlurry.a-arm64-master.o)“_kSecClass”中的[FlurryKeychainWrapper dataForKey:],引用 从: -[FlurryKeychainWrapper setupSearchForKey:] 在 libFlurry.a(libFlurry.a-arm64-master.o) "_kSecAttrService", 参考自: -[FlurryKeychainWrapper setupSearchForKey:] 在 libFlurry.a(libFlurry.a-arm64-master.o) “_OBJC_CLASS_$_SKMutablePayment”,引用自: libsmart-iap-plugin.a(SmartIAP.o) "_kSecClassGenericPassword" 中的 objc-class-ref,引用自: - [FlurryKeychainWrapper setupSearchForKey:] 在 libFlurry.a(libFlurry.a-arm64-master.o) "_kSecAttrAccount", 参考自: - [FlurryKeychainWrapper setupSearchForKey:] 在 libFlurry.a(libFlurry.a-arm64-master.o) "_kSecAttrGeneric", 参考自: - [FlurryKeychainWrapper setupSearchForKey:] 在 libFlurry.a(libFlurry.a-arm64-master.o) "_kSecMatchLimit", 参考自: - [FlurryKeychainWrapper dataForKey:] 在 libFlurry.a(libFlurry.a-arm64-master.o) "_kSecReturnData", 参考自: - [FlurryKeychainWrapper dataForKey:] 在 libFlurry.a(libFlurry.a-arm64-master.o) “_OBJC_CLASS_$_SKPaymentQueue”,引用自: libsmart-iap-plugin.a(SmartIAP.o) ld 中的 objc-class-ref:未找到架构 arm64 clang 的符号:错误:链接器 命令失败,退出代码为 1(使用 -v 查看调用)

我们将此发送给 Neatplug 的支持人员,但没有得到答复。谢谢你的帮助

【问题讨论】:

【参考方案1】:

我怀疑这个插件在其原生二进制文件中缺少 ARM64 切片。您可以通过将 Unity Editor Player Settings 中的 Architecture 选项更改为 ARMv7 来确认这一点。这将使用 IL2CPP 脚本后端构建,仅适用于 ARMv7。如果项目在 Xcode 中链接,则问题在于该库缺少 ARM64 二进制文件。

【讨论】:

【参考方案2】:

我在更新到 Unity 5.3.4 时遇到了同样的问题。链接 Security.framework 似乎已经为我修复了它。

【讨论】:

以上是关于IL2CPP:iOS 构建 NeatPlug 的链接错误 - Flurry Analytics 插件(通用)的主要内容,如果未能解决你的问题,请参考以下文章

Unity 在为 Android 构建时在运行时抛出 IL2CPP 构建错误? 2018.4.5f1

签名分发 iOS 应用程序时出错“无法为签名者构建自签名根的链”

Unity5.5.4使用IL2CPP构建Android真机版本

有没有办法修复错误:替换现有签名警告:无法为签名者构建自签名根的链(xamarin iOS)

Unity Android IL2CPP 无法正常运行 Building 64bit aab Error

Protobuf-net & IL2CPP - System.Reflection.Emit 不受支持