没有这个模块'OneSignal' - XCode Swift编译器错误

11

我目前正在尝试将OneSignal添加到我的React Native Expo(裸机)IOS构建中,并按照OneSignal在此处显示的指南进行操作:https://documentation.onesignal.com/docs/react-native-sdk-setup

然而,Xcode提示了编译器错误:No such module 'OneSignal'

Compiler Error

这是我的Podfile,其中包括OneSignalXCFramework的导入:

require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking")
require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods")
require File.join(File.dirname(`node --print "require.resolve('@react-native-community/cli-platform-ios/package.json')"`), "native_modules")

platform :ios, '12.0'

require 'json'
podfile_properties = JSON.parse(File.read('./Podfile.properties.json')) rescue {}

target '<NAME>' do
  use_expo_modules!
  config = use_native_modules!

  use_react_native!(
    :path => config[:reactNativePath],
    :hermes_enabled => podfile_properties['expo.jsEngine'] == 'hermes'
  )

  # Uncomment to opt-in to using Flipper
  #
  # if !ENV['CI']
  #   use_flipper!('Flipper' => '0.75.1', 'Flipper-Folly' => '2.5.3', 'Flipper-RSocket' => '1.3.1')
  # end

  post_install do |installer|
    react_native_post_install(installer)

    # Workaround `Cycle inside FBReactNativeSpec` error for react-native 0.64
    # Reference: https://github.com/software-mansion/react-native-screens/issues/842#issuecomment-812543933
    installer.pods_project.targets.each do |target|
      if (target.name&.eql?('FBReactNativeSpec'))
        target.build_phases.each do |build_phase|
          if (build_phase.respond_to?(:name) && build_phase.name.eql?('[CP-User] Generate Specs'))
            target.build_phases.move(build_phase, 0)
          end
        end
      end
    end
    
    target.build_configurations.each do |config|
    # some older pods don't support some architectures, anything over iOS 11 resolves that
      config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
    end
  end

  post_integrate do |installer|
    begin
      expo_patch_react_imports!(installer)
    rescue => e
      Pod::UI.warn e
    end
  end

end

target 'OneSignalNotificationServiceExtension' do
  pod 'OneSignalXCFramework', '>= 3.0', '< 4.0'
end


作为一个旁注,我已经尝试将 pod 'OneSignal' 或者 use_frameworks! 加入到 PodFile 中。还有其他人遇到过这个问题吗?

使用 SPM(Swift Package Manager)进行安装。https://documentation.onesignal.com/docs/swift-package-manager-setup - Huynh Inc
3个回答

11

Xcode 14.0.1 更新 & Swift 5.7 - 使用 SPM (Swift Package Manager)

最近我使用 SPM 将 OneSignal 集成到我的项目中,它工作得很好,直到我尝试将构建上传到 app store connect 时出现了相同的错误。这是我如何解决这个问题的方法。

步骤 1: 移除 OneSignal 依赖项

步骤 2: 将 OneSignal Notification 框架重新添加为依赖项。enter image description here

在选择软件包产品弹出窗口上。

  1. 选择 OneSignal 添加到项目作为目标。
  2. 选择 OneSignalExtension 添加到 oneSignalNotificationService 扩展作为目标。
  3. 现在转到 OneSignalNotificationExtension 中的 "NotificationService.swift" 文件,并将 > import Onesignal 替换为 >import OneSignalExtension。
  4. 还要用 OneSignalExtension 替换代码中的 oneSignal。
  5. 添加软件包并构建。

1
为了查看两个包产品,您必须使用https://github.com/OneSignal/OneSignal-iOS-SDK而不是https://github.com/OneSignal/OneSignal-XCFramework。 - jarrodparkes
2
这很烦人,也阻止了我分发我的应用程序。谢谢! - mtl
我很惊讶他们还没有更新设置文档,提到这个。 - Jorn Rigter

1
如果您和我一样使用苹果芯片的 Mac,例如 M1/M2 和 Pro 等,您需要打开 Rosetta。要执行此操作,请在 Xcode 菜单中选择“Product”>“Destination”>“Destination Architectures”>“Show Rosetta Destinations”。在运行以下命令后在 Rosetta 中构建:

pod deintegrate && pod install


1
终于成功了! - undefined
很高兴能够帮助您。 - undefined

0
在我的情况下,可能不是你们中的许多人遇到的原因,但可能会帮助某些人。第一次添加时,所有内容都正常工作,但在将代码合并到我的主分支后,我遇到了这个错误。我的问题是我已经将podfile添加到了.gitignore中,所以第一次它可以正常工作,但在合并后,podfile当然没有所需的最后一部分。
target 'OneSignalNotificationServiceExtension' do
  pod 'OneSignalXCFramework', '>= 3.0', '< 4.0'
end

所以请确保你拥有它。


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