在包含应用程序和扩展程序之间共享领域

Posted

技术标签:

【中文标题】在包含应用程序和扩展程序之间共享领域【英文标题】:Sharing realm between containing app and extension 【发布时间】:2016-01-24 20:03:26 【问题描述】:

我在包含应用程序和扩展程序(自定义键盘)之间共享领域,它在模拟器上运行正常,但是当我尝试在真实设备上运行此应用程序时出现以下错误:

无法为“RealmSwift”加载底层模块

这有点奇怪,这不是模拟器的问题,但没关系。让我们为我的扩展添加 pods.frameworkLink Binary With Libraries

.../Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h:19:1: 类的重复接口定义 'BFCancellationTokenRegistration'

好的。让我们删除它。

无法为“RealmSwift”加载底层模块

不能争辩。让我们尝试将 RealmSwift.framework 添加到扩展中。

.../Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h:19:1: 类的重复接口定义 'BFCancellationTokenRegistration'

好的。经过几次迭代后,我的项目文件夹中有几个 Pods.frameworkRealmSwift.framework。除了一个 Pods.framework 之外,让我们将它们全部删除。让我们将此框架的目标成员资格更改为应用程序和扩展程序。

.../Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h:19:1: 类的重复接口定义 'BFCancellationTokenRegistration'

无法为“RealmSwift”加载底层模块

一起。

如何解决这个问题?

更新:我正在使用 Realm 和 Parse cocoapods。

【问题讨论】:

【参考方案1】:

只需在 Podfile 中创建第二个部分,即可指定应用扩展和主应用的依赖项。

target 'MyApp' do
   pod 'RealmSwift'
end

target 'MyAppExtension' do
   pod 'RealmSwift'
end

CocoaPods 在设置依赖项并在编译时将它们安装到您的目标中做了很多额外的步骤,所以我认为简单地将 Pods.framework 复制到扩展构建步骤中不会起作用。

如果您有多个对相同文件的引用,那么最好从您的项目中完全删除每个与 CocoaPods 相关的文件/文件夹,然后再次运行 pod install 以确保一切就绪再次正常启动。

告诉我你的情况!

【讨论】:

谢谢。我尝试这样做,但又出现了一堆错误,所以我最终从头开始创建一个新项目并将我的源代码迁移到那里。 嗨@lithium,你能解决这个问题吗?我有同样的问题 是的,我从头开始创建了新项目,之后一切正常。不是我想推荐的解决方案,但它对我有用。 嗨,@lithium 我尝试从头开始创建新项目但仍然无法正常工作,无论如何谢谢T_T

以上是关于在包含应用程序和扩展程序之间共享领域的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 应用程序及其扩展程序之间共享 Storyboard

NSUserDefaults 线程在 IOS 上的扩展之间共享数据是不是安全?

iOS swift 使用 alamofire 在应用程序和共享扩展程序之间共享 cookie

在主机应用程序和今天的扩展程序之间共享用户生成的图像的最佳方式是啥

为啥 NSUserDefaults 在我的应用程序和共享扩展程序之间不起作用?

核心数据:将数据访问与应用程序和包含的扩展同步