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 自定义表单

Braintree 的 PayPal 付款中未显示金额

贝宝与 Braintree Drop-In

Cordova & Braintree:PayPal 登录窗口为空白

Braintree iOS Drop-in Payment UI 定制