iOS Braintree Dropin ui,抛出未声明的标识符“BTAppSwitch”
Posted
技术标签:
【中文标题】iOS Braintree Dropin ui,抛出未声明的标识符“BTAppSwitch”【英文标题】:iOS Braintree Dropin ui, throws undeclared identifier 'BTAppSwitch` 【发布时间】:2021-10-19 20:58:20 【问题描述】:我正在为 React Native 使用 Braintree 插件 ui。我的问题似乎不是特定于图书馆的,我已经在其中创建了一个问题。
我现在需要将我的setReturnURLScheme
添加到我的AppDelegate.m
看起来像这样
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
[BTAppSwitch setReturnURLScheme:@"com.mycompany.myapp.payments"];
//...
但是,我收到一个关于 BTAppSwitch 的错误,上面写着Use of undeclared identifier 'BTAppSwitch'
。
据我所知,我已经正确/自动地安装并链接了所有 pod,但大多数说明都非常简短。似乎我可能缺少导入语句,但我尝试过的没有一个有帮助。有人可以帮忙吗?
我正在使用 v4
【问题讨论】:
我不确定 obj-c 但也许可以试试@import BTAppSwitch;
你试试 rm -rf /Users/user/Library/Developer/Xcode/DerivedData/project_id/Build/Products/Debug-iphonesimulator
您能列出您尝试过的导入语句吗?你试过#import "BraintreeCore.h"
吗?
【参考方案1】:
您需要在AppDelegate.m
文件中导入以下内容
#import "BraintreeCore.h"
确保您使用了正确的包标识符,如下所示
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
[BTAppSwitch setReturnURLScheme:@"yourappbundleidentifier.payments"];
return YES;
你的info.plist
必须包含这个
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>yourappbundleidentifier.payments</string>
</array>
</dict>
</array>
如果您在 xcode 中归档应用程序时仍然遇到问题。确定
#import "BraintreeCore.h"
必须放在这行代码之前
#ifdef FB_SONARKIT_ENABLED
希望这能解决您的问题
【讨论】:
我的问题是需要把#import "BraintreeCore.h"
before FB_SONARKIT_ENABLED
条件。我只是把它放在我的导入结束之后。
没错!一直发生在我身上! :D 我应该特别提到这一点! :)
哇。哇。升级到新版本的 React Native 在条件构建指令下放置了一些导入,我们花了一整天的时间才意识到这一点【参考方案2】:
正如您在README here 的文档中看到的,
安装正确的可可豆荚后,您需要在 AppDelegate.m 文件的顶部添加以下行:
#import "BraintreeCore.h"
这应该可以消除错误。但是不要忘记在构建之前完成所有其他初始化步骤
【讨论】:
【参考方案3】:这可能比想象的要容易。 V5 将 BTAppSwitch 重命名为 BTAppContextSwitcher 所以尝试这样做:
[BTAppContextSwitcher setReturnURLScheme:@"com.mycompany.myapp.payments"];
查看迁移指南: https://github.com/braintree/braintree_ios/blob/7c16276901b2ade9804d07facb516be912a7138f/V5_MIGRATION.md
引用:
v5 将 BTAppSwitch 类重命名为 BTAppContextSwitcher,以阐明它用于需要切换上下文的流,可以通过打开 SFSafariViewController 或通过打开不同的应用程序(特别是 Venmo)。
BTAppSwitchDelegate 在 v5 中被移除。如果您使用这些委托方法来确定何时在您的应用程序和 Venmo 应用程序之间切换控制,我们建议改用应用程序或场景委托方法。如果您使用 BTAppSwitchDelegate 来确定 SFSafariViewController 何时呈现或关闭,我们建议您改用 BTViewControllerPresentingDelegate 方法。
在您的应用委托中使用 BTAppContextSwitcher 注册您应用的自定义 URL 方案。
这可能是找不到 BTAppSwitch 的原因
【讨论】:
是的,我看到了。在意识到我的项目是围绕版本 4 构建之前,我尝试过 那么请告诉我们您是如何包含这些文件的。您是否进行了标准清理工作,例如清除产品、重新启动、清除派生数据? 其实如何确认是哪个版本?另外,我目前没有在这个文件中做任何导入。我试过的没有一个有任何区别。比如,导入“Braintree Core.h”。我可以尝试什么?你能告诉我更多关于清除派生数据的信息吗? podfile.lock 文件跟踪所有 pod 和版本。在文本编辑器中检查,或在终端的正确目录中使用命令“cat Podfile.lock”。检查如何删除派生数据:***.com/questions/38016143/…。对于 Cocoapods,您的 podfile 必须包含“pod 'Braintree'”。关于如何正确包含头文件/框架,请检查项目中包含的演示。 哪个演示/项目?【参考方案4】:在您的 AppDelegate 中,在顶部添加这两行:
@import Braintree;
@import BraintreeDropIn;
Cocoapods 输出 Objective-C 模块,您必须使用 @import
导入。
另外,如果您想了解一些有关 Objective-C 模块(Apple 在 WWDC '13 中引入它们)以及它与其他类型导入的比较,这是一篇很好的文章:https://useyourloaf.com/blog/modules-and-precompiled-headers/
【讨论】:
以上是关于iOS Braintree Dropin ui,抛出未声明的标识符“BTAppSwitch”的主要内容,如果未能解决你的问题,请参考以下文章
使用braintree PayPal Dropin的Angular不会触发提交事件
拥有带有 CB 和 PayPal 的 Braintree 自定义表单