如何在Swift应用程序中使用Realm(与Carthage一起安装)框架?

Pym*_*Pym 6 xcode realm ios ios-frameworks swift

我正在开发iOS App和Watchkit App.

我阅读了一些关于最佳实践的内容,我决定创建一个自定义框架,如NathashaTheRobot在此提供的建议:https://realm.io/news/architecting-app-apple-watch-natashatherobot/

所以我试图在我的框架中使用Realm.

我按照迦太基安装说明进行操作:

  1. 加入github "realm/realm-cocoa"你的Cartfile.

  2. carthage update.

  3. 拖动RealmSwift.frameworkRealm.frameworkCarthage/Build/iOS/目录到"链接的框架和库"的Xcode项目的"常规"设置部分.

  4. 在应用程序目标的"构建阶段"设置选项卡上,单击"+"图标并选择"新建运行脚本阶段".使用以下内容创建运行脚本:

    /usr/local/bin/carthage copy-frameworks

并在"输入文件"下添加要使用的框架的路径,例如:

$(SRCROOT)/Carthage/Build/iOS/Realm.framework 
$(SRCROOT)/Carthage/Build/iOS/RealmSwift.framework
Run Code Online (Sandbox Code Playgroud)

然后我将我的框架添加到了Target Membership两者Realm.frameworkRealmSwift.framework.

但是当我尝试构建项目时,我收到此错误:

ld: framework not found Realm for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

然后我给了一个镜头lipo:

$ lipo -info Carthage/Build/iOS/Realm.framework/Realm                                                                                                       
Architectures in the fat file: Carthage/Build/iOS/Realm.framework/Realm are: i386 x86_64 armv7 arm64
Run Code Online (Sandbox Code Playgroud)

你对我在这里做错了什么有什么想法吗?谢谢.


编辑:

好的,所以我发现了问题,它与Realm完全无关......

看起来我以某种方式删除了我的框架Build Phases的Headers和Resources部分(它们仍然是空的).我只是把它们放回去,所有东西都应该编译/工作.

标题和资源部分

不要试图删除这两个

jps*_*sim 11

是否有可能是您的测试目标无法找到框架?您必须将框架的父位置添加到单元测试的"框架搜索路径"部分(可能$(SRCROOT)/Carthage/Build/iOS).

这是一个Swift框架的示例项目,它将RealmSwift捆绑为依赖项,您可能会发现它可以用来比较您的构建设置:https://static.realm.io/debug/ParentFramework.tgz