模块“OneSignal”不存在。

23
我尝试在使用CocoaPods 1.0.0.beta.2和use_frameworks!指令的Xcode 7.2.1中集成OneSignal SDK。但是,当我试图在AppDelegate.swift中导入框架时,出现以下错误:

No such module 'OneSignal'。

我已经包含了其他来自Cocoapods的框架,并且可以无问题地工作(例如:Fabric)

我曾成功地在另一个项目中使用Cocoapods安装了OneSignal SDK,但是没有使用use_frameworks!指令,而是使用桥接头文件。


这只是一个猜测,但我一直需要在安装新的pods之后构建项目,然后才能导入它们。当我使用#use_frameworks安装OneSignal SDK时,情况再次如此。希望这可以帮助到您。 - Ollie
我也注意到了这个问题。但我已经多次构建和重构项目,清除了它以及构建文件夹,重新启动了Xcode。到目前为止还没有好运气。@Ollie,你使用#use_frameworks时,OneSignal可以工作吗? - Mihai
我在我的podfile中已经使用了#use_frameworks,因为我有其他与此一起工作的pods,但是为了使用OneSignal,我还必须使用桥接头文件。我意识到我的第一个评论可能有点误导人!(抱歉!!)他们在入门指南中指定你需要一个swift桥接头文件。https://documentation.onesignal.com/docs/installing-the-onesignal-ios-sdk - Ollie
你应该将这个作为答案发布。我通过添加桥接头文件成功地完成了它。我原本认为如果使用了 use_frameworks,就不需要桥接头文件。实际上,我没想到可以同时使用 use_frameworks 和桥接头文件。我真是太傻了。 - Mihai
好的,我会做的,很高兴问题已经解决了! - Ollie
8个回答

15
使用OneSignal 5.0.0(在Flutter上)时,我不得不使用:
import OneSignalFramework

替代

import OneSignal

13

使用use_frameworks!,可以导入用 Swift 编写的 Pod。如果您不这样做并尝试在 Swift 代码中导入 Pod,则 CocoaPods 将会抱怨。

虽然任何非用 Swift 编写的 pods 都需要使用桥接头文件。

参考 OneSignal pod 的入门指南,指导使用 Swift 的应用程序包含一个桥接头文件才能使用该 pod。OneSignal: 入门指南


Podfile 中的顶层。 - Ollie
https://documentation.onesignal.com/docs/using-onesignals-xcframework-for-mac-catalyst - Hunnain

12
你需要输入以下命令。这些命令已经为我解决了问题:
$ pod deintegrate
$ pod install

我的 Podfile:

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'Your_Project_Name' do
  # Comment the next line if you don't want to use dynamic frameworks

  # Pods for Das Gedenken
pod 'OneSignal'


end

target 'OneSignalNotificationServiceExtension' do
  #only copy below line
  pod 'OneSignal'
end

6

如果您在开始使用OneSignal之前已经有了Pod文件,则需要为OneSignalNotificationServiceExtension添加新目标。

    target 'OneSignalNotificationServiceExtension' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  # Pods for OneSignalNotificationServiceExtension
  pod 'OneSignal', '>= 2.5.2', '< 3.0'

  end

在将上述代码添加到podfile后,您必须再次运行“pod install”。

1

1

编辑

OneSignal的Cocoapod是用Swift编写的吗?我需要在代码中使用use_frameworks!还是桥接头文件?在Xcode 8.2.1,Swift 3和OneSignal(1.11.3)中可以使用什么?

  1. OneSignal:入门指南实际上在Swift 3中无法工作
  2. AppDelegate.swift中添加import OneSignal对我来说实际上没有用
    (没有自动完成和编译错误)
  3. use_frameworks!在这种特定情况下无济于事

Xcode 8.2.1,Swift 3,OneSignal 1.11.3

  • Use this bridging header (†):

    #import "OneSignal/OneSignal.h"
    
  • In the App Delegate:

    func application(_ application: UIApplication, didFinishLaunchingWithOptions
                     launchOptions: [UIApplicationLaunchOptionsKey: Any]?)
                     -> Bool {
        _ = OneSignal.init(launchOptions: launchOptions,
                           appId: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")
        ...
    }
    

  • (†) 添加一个正确设置的桥接头文件的简单方法是向项目中添加一个新的Objective-C源文件并按照对话框中的步骤进行操作。 配置桥接头文件

已经有一个有效的答案指定了桥接头的使用,你为什么要发布另一个答案? - Mihai
1
好的观点。答案涉及桥接头实际包含的具体内容,以及在Swift 3中调用的方式,与OneSignal教程直接冲突。 - SwiftArchitect
1
谢谢这个。帮了我很多。 - palme

0
在开始使用pod之前,安装pod后立即执行BUILDING(CMD + B)项目有所帮助。另外,在使用pod之前必须清除所有错误。

0
尝试这个: 前往产品 > 方案 > 新方案... 选择你的Cocoapod的名称,然后点击确定。 完成此操作后,构建项目。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接