描述:
刚刚从 Xcode 10 更新到 Xcode 12,在 v10 之前这个项目构建并成功运行。
OneSignalNotificationExtension 目标构建失败:
Undefined symbol: _swift_getObjCClassMetadata
Undefined symbol: type metadata accessor for Foundation.UUID
Undefined symbol: Swift._bridgeAnythingToObjectiveC<A>(A) -> Swift.AnyObject
Undefined symbol: protocol descriptor for Swift.ExpressibleByFloatLiteral
Undefined symbol: associated conformance descriptor for Swift.ExpressibleByFloatLiteral.Swift.ExpressibleByFloatLiteral.FloatLiteralType: Swift._ExpressibleByBuiltinFloatLiteral
Undefined symbol: associated type descriptor for Swift.ExpressibleByFloatLiteral.FloatLiteralType
Undefined symbol: protocol descriptor for Swift.ExpressibleByIntegerLiteral
Undefined symbol: associated type descriptor for Swift.ExpressibleByIntegerLiteral.IntegerLiteralType
Undefined symbol: method descriptor for Swift.ExpressibleByIntegerLiteral.init(integerLiteral: A.IntegerLiteralType) -> A
Undefined symbol: static Foundation.UUID._unconditionallyBridgeFromObjectiveC(__C.NSUUID?) -> Foundation.UUID
Undefined symbol: value witness table for Builtin.Int32
Undefined symbol: protocol witness table for Swift.Int : Swift._ExpressibleByBuiltinIntegerLiteral in Swift
还有 100 个错误
我对 Xcode 和 Mac 不太好,所以如果不清楚或误导,我很抱歉。
谢谢
环境
反应原生 0.63.2
onesignal-react-native 3.9.1
Xcode 12
通过 npm 安装并与 pod 链接
重现问题的步骤:
建造
你好,
你的NotificationService.swift
文件是什么样的? 它应该是这样的:
import UserNotifications
import OneSignal
class NotificationService: UNNotificationServiceExtension {
var contentHandler: ((UNNotificationContent) -> Void)?
var receivedRequest: UNNotificationRequest!
var bestAttemptContent: UNMutableNotificationContent?
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: <strong i="8">@escaping</strong> (UNNotificationContent) -> Void) {
self.receivedRequest = request;
self.contentHandler = contentHandler
bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
if let bestAttemptContent = bestAttemptContent {
OneSignal.didReceiveNotificationExtensionRequest(self.receivedRequest, with: self.bestAttemptContent)
contentHandler(bestAttemptContent)
}
}
override func serviceExtensionTimeWillExpire() {
// Called just before the extension will be terminated by the system.
// Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
OneSignal.serviceExtensionTimeWillExpireRequest(self.receivedRequest, with: self.bestAttemptContent)
contentHandler(bestAttemptContent)
}
}
}
查看设置说明中的步骤 4.3.6 并从那里继续以确保您已正确设置所有内容。
希望这可以帮助。 干杯
感谢您的反馈。
我正在使用 Objective-C 文件。 我应该使用快速的吗?
我以为你在使用 Swift。 如果您使用的是 Obj-C,请使用 Objective C 之一。 享受!
我对 Xcode 12 也有一些问题
我可以在 Xcode 11 上成功构建项目。但是,一旦我打开 Xcode12 并构建项目,我就会收到以下错误:
▸ Linking OneSignalNotificationServiceExtension
❌ clang: error: no such file or directory: '/Users/carloscuesta/project-folder/ios/build/project/Build/Products/Debug-iphonesimulator/libRCTOneSignal.a'
这似乎不是 OneSignal 方面的错误。 看起来缓存或类似的东西有些奇怪,
我尝试过的事情:
rm -rf ~/Library/Developer/Xcode/DerivedData/
我不知道我还应该尝试什么,我想说一切都已正确链接,因为该应用程序在生产环境中运行良好,并且构建适用于 Xcode 11。
我使用 OneSignal 指南手动链接了库,关于如何解决这个问题的任何想法? 🙏🏼
通常当我遇到这个问题时,它是通过清理DerivedData
解决的,但我无法摆脱错误😞
我发现了一个奇怪的东西
如果我尝试使用 Xcode 12 构建应用程序,它总是失败。 但是,如果我首先使用 Xcode 11 构建应用程序,然后打开 Xcode 12 并构建应用程序,它就可以工作了🤯
但是,一旦我清理构建并尝试使用 Xcode 12 再次重建,它就会再次失败并再次出现相同的错误😖
与 Xcode 12 和 onesignal-react-native 3.9.1 相同的错误:-(
项目在更新之前正在运行。
同样的错误。
Onesignal SDK -> 2.15.2
react-native-onesignal -> 3.9.1
在 xCode 11 上运行良好。
你好,
这很奇怪@carloscuesta 。 您是否尝试在 Xcode 11 和 12 上查看项目之间的差异? 也许 12 出于某种原因正在更改一些重要的构建设置。
当我将 Xcode 从 11 更新到 12 时遇到了类似的问题。
嘿@rgomezp
我可以确认从 Xcode 11 到 Xcode 12 没有任何变化。 repo 的git status
未修改。
但是我仍然可以重现构建失败。 每当我在第一次工作后在 Xcode 11 和 Xcode 12 上构建时 😕
你好,
我相信这与之前在此处报告的Cocoapods 问题有关。
如果需要在模拟器上运行应用程序,这可能会添加x86_64
到VALID_ARCH
,例如, x86_64
arm64
arm64e
此堆栈溢出可能包含您需要的解决方案。
嘿! 感谢您的帮助@rgomezp
我会告诉你我的实验结果!
我在Project
> Architectures
> Excluded Architectures
上的 StackOverflow 帖子中提出了arm64
Excluded Architectures
。
这并没有解决问题。 我有同样的错误抱怨x86_64
。
所以我继续将x86_64
到Excluded Architectures
。
经过以下更改,以下错误似乎已修复。 但是,我还有另一个关于OneSignalNotificationServiceExtension.appex
。
Embedded binary is not signed with the same certificate as the parent app. Verify the embedded binary target's code sign settings match the parent app's.
但是我没有改变任何与 CodeSign 相关的东西🤔——Xcode11 构建工作正常
清理DerivedData
构建并重新启动计算机后。 我看到另一个错误: Link app (i386)
。
如果我打开错误,我会看到在DerivedData
文件夹中找不到很多文件。 它们都与 OneSignal 无关。 但是,如果它在 Xcode 11 上正常工作,我不知道为什么会失败。我现在很困惑 😅
VALID_ARCHS
这对我也不起作用。 我还读到这在 Xcode 12 上已被弃用,而应使用Excluded Architectures
代替。
我没有任何User-Defined Setting
用于此。 因为我没有使用 CocoaPods 并且我手动链接了模块。
我可以确认在没有“排除的架构”修改的情况下,在不会引发任何错误。
所以它与模拟器本身的架构 100% 相关
你好卡洛斯,
感谢您的详细调查。 为了可见性,我还发现了这个堆栈溢出线程。
总结@carloscuesta问题,
Embedded binary is not signed with the same certificate as the parent app...
错误是通过将 arm64 和 x86_64 添加到Excluded Architectures来解决的,根据在 VALID ARCHS 上使用它的指南。Carlos,此时我不确定还能做什么,因为这听起来像是一个非 OneSignal 问题。
如果其他人_are_使用 Cocoapods,请确认上面链接的 Cocoapods 解决方法对他们有效吗?
嘿@rgomezp
感谢您提供的所有帮助。
Carlos,此时我不确定还能做什么,因为这听起来像是一个非 OneSignal 问题。
我对这个声明不是 100% 肯定,因为如果我取消链接整个 OneSignal 库并删除OneSignalNotificationServiceExtension
项目构建在 Xcode12 上。 我不知道错误来自哪里,这是肯定的,也许这是一个特定的情况,因为库是手动链接的。 而且我不必接触任何与架构相关的东西
但是,是的,让我们看看我们是否可以找到其他用例👍🏼
Xcode 12 似乎是为具有架构的模拟器构建的 - arm64, i386, x86_64 。
所以我的解决方法是
它在我的项目中运行良好。
@stanleyctcl您的解决方案有效! :tada:
我没有看到RCTOneSignal
库中的RCTOneSignal
目标将VALID_ARCHS
定义为User-Defined
设置。 这是我们应该从图书馆方面删除的东西! 我会做一个 PR 来解决这个问题!
这就是为什么我的所有更改都不起作用的原因。 因为 OneSignal 库定义了这个用户设置。
嘿,谢谢@stanleyctcl
您的解决方案对我有用。
以前,我对 iOS 模拟器的发布模式构建失败。 我收到building for iOS Simulator, but linking in object file built for iOS, file onesignal
错误。 但是,我可以在真实设备上构建发布模式而不会出现任何错误。 上面的解决方案解决了这个问题。
不幸的是,在我实施您的解决方案后,我无法存档我的应用程序。 我收到了这个错误。
No architectures to compile for (ARCHS=arm64, VALID_ARCHS=arm64 arm64e armv7 armv7s, EXCLUDED_ARCHS=(
arm64
))
任何线索?
@abdullahizzuddiin确保您只排除了 iOS 模拟器的架构
啊,我的坏。 我忘记了那个小细节。 感谢@carloscuesta指点我。 结果证明我只需要 set Excluded Architecture
而没有从RCTOneSignal
子项目构建设置中删除VALID ARCHS
。 🤔
= = =
我想,我得到了差异错误。 我已成功存档。 但是,在我选择“自动管理签名”后,我收到了这个错误
我可以在以前版本的 Xcode 上将应用程序部署到 Appstore,而不会出现任何问题。 以前,我用的是 11.7。 现在,我使用了 12.0,我立即收到了这个错误,而我的 repo 没有任何更改。
//package.json
react-native-onesignal: 3.8.1
//Podfile
pod 'OneSignal', '>= 2.14.2', '< 3.0'
...
target 'OneSignalNotificationServiceExtension' do
pod 'OneSignal', '>= 2.14.2', '< 3.0'
end
有什么线索吗? 还是应该创建单独的问题?
附:
我还向Apple Developer Forum提交了我的问题,以防万一这不是这个库的问题。
我在 react native 0.60.0 版本上使用 react-native-onesignal 3.9.1 ......我能够通过在用户定义的设置(VALID_ARCHS)中包含 x86_64 来解决这个问题
大家好,
我认为这个问题可以安全关闭,因为它似乎不是 OneSignal 问题。
@abdullahizzuddiin
(不同的问题,考虑单独开票)
为了可见,我将发布对Apple Dev Forum 主题的回复之一:
问题:
尝试在实际设备上运行构建失败,即使构建在我的 MacBook Pro 上成功。
此消息出现以下错误:
配置文件“iOS 团队配置文件:com.xxxxxxxxxxxx.Name of -App”不包括当前选择的设备“iPhone”(标识符 0000xxxx-000xxxxxxxxxxxxxxxxxx)。
Xcode 帮助在线手册
帐户首选项
使用帐户首选项来管理开发者帐户资产(签名证书和配置文件)、添加存储库和添加服务器。
要打开 Accounts 首选项,请选择 Xcode > Preferences 并单击 Accounts。
I 然后我单击,管理证书,并通过单击加号添加新证书。
问题解决了:
然后我运行我的构建并清除了我的签名错误,应用程序安装在我的 iPhone 11 Pro Max 上。
希望这个解决方案可以帮助你。
嘿@rgomezp
这个问题混合了不同的问题。 您所指的那个与模拟器问题本身无关,这与RCTOneSignal
因为VALID_ARCHS
的用法
我不知道我们是否应该在模拟器解决之前完全关闭这个问题。
嗨@rgomezp
我遵循了您在上面摘录的 Apple Dev Forum 的建议。 但是,它并没有解决我的问题。
我暂时将 Xcode 版本降级到 11.7,并且能够成功构建、运行和存档。 但是,我仍然可以在 Xcode 12.0 中执行这些操作
我将保持打开状态,由 #1053 自动关闭
Xcode 12 似乎是为具有架构的模拟器构建的 - arm64, i386, x86_64 。
所以我的解决方法是
1. Add **arm64** in **Excluded Architectures** of Project Build setting 2. Remove **VALID ARCHS** from RCTOneSignal subproject build setting. **(VAILD ARCHS was moved to User-Defined of build setting in Xcode 12)**
它在我的项目中运行良好。
这对我有用。 记得删除它。 不要只是让它空白"",因为它不起作用
编辑:
我的项目使用手动链接一个信号 3.2.12。
反应原生 0.59.9
代码 12
我尝试了 stanleyctcl 解决方案,该解决方案可在模拟器中进行调试和发布构建。 但是当为通用设备/存档构建时,我遇到了与 abdullahizzuddiin 相同的问题
没有要编译的架构 (ARCHS=arm64, VALID_ARCHS=arm64 arm64e armv7 armv7s, EXCLUDED_ARCHS=(
arm64
))
对我有用的解决方案是
仅应用此
2. Remove **VALID ARCHS** from RCTOneSignal subproject build setting. **(VAILD ARCHS was moved to User-Defined of build setting in Xcode 12)**
这应该使存档工作但模拟器发布失败。 要解决这个问题。 您需要转到所有项目目标和 pod 的目标 -> 构建设置 -> 架构 -> 仅构建活动架构 -> 为发布模式设置“是”
啊,我的坏。 我忘记了那个小细节。 感谢@carloscuesta指点我。 结果证明我只需要 set
Excluded Architecture
而没有从RCTOneSignal
子项目构建设置中删除VALID ARCHS
。 🤔= = =
我想,我得到了差异错误。 我已成功存档。 但是,在我选择“自动管理签名”后,我收到了这个错误我可以在以前版本的 Xcode 上将应用程序部署到 Appstore,而不会出现任何问题。 以前,我用的是 11.7。 现在,我使用了 12.0,我立即收到了这个错误,而我的 repo 没有任何更改。
//package.json react-native-onesignal: 3.8.1 //Podfile pod 'OneSignal', '>= 2.14.2', '< 3.0' ... target 'OneSignalNotificationServiceExtension' do pod 'OneSignal', '>= 2.14.2', '< 3.0' end
有什么线索吗? 还是应该创建单独的问题?
附:
我还向Apple Developer Forum提交了我的问题,以防万一这不是这个库的问题。
我在 xcode 12 中发生了同样的问题,你解决了吗? @abdullahizzuddiin或者你只是将 xcode 降级到 11.7
谢谢你
要在模拟器中运行,我必须在“排除的架构”中添加“ arm64 ”。
但是,要在真实设备上运行该应用程序,我必须不进行“排除的架构”修改。
所以我每次跑步时都必须做出这个改变。
我希望这有帮助。
同样的问题,它又回来了。
相同的
相同的
最有用的评论
我对 Xcode 12 也有一些问题
我可以在 Xcode 11 上成功构建项目。但是,一旦我打开 Xcode12 并构建项目,我就会收到以下错误:
这似乎不是 OneSignal 方面的错误。 看起来缓存或类似的东西有些奇怪,
我尝试过的事情:
rm -rf ~/Library/Developer/Xcode/DerivedData/
我不知道我还应该尝试什么,我想说一切都已正确链接,因为该应用程序在生产环境中运行良好,并且构建适用于 Xcode 11。
我使用 OneSignal 指南手动链接了库,关于如何解决这个问题的任何想法? 🙏🏼
通常当我遇到这个问题时,它是通过清理
DerivedData
解决的,但我无法摆脱错误😞