【问题标题】:iOS Braintree Dropin ui, throws undeclared identifier 'BTAppSwitch`iOS Braintree Dropin ui,抛出未声明的标识符“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" 吗?

标签: ios objective-c react-native paypal braintree


【解决方案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”。检查如何删除派生数据:stackoverflow.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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多