将Carthage支持添加到现有项目中

10
我已经fork了AEXML项目,正在尝试添加Carthage支持。我添加了一个框架目标,并创建了一个新的方案,标记为共享(请参见下面的截图)。我能够运行carthage build,在我的Carthage/Build/iOS中看到:

enter image description here

当我将生成的AEXML.framework文件拖入我的示例应用程序时,项目将会构建,但是在启动时我收到以下错误信息:

enter image description here

我感觉自己在某个地方出了错,但不确定如何修复。

enter image description here

3个回答

1
我曾尝试通过添加脚本来检查每个框架是否在BUILD_PRODUCTS_DIR中找到,如果没有,则递归复制它们。当这样做不起作用时,我遇到了这个链接问题:
dyld: Library not loaded: @rpath/XCTest.framework/XCTest Referenced from: .../build/Products/Debug-iphonesimulator/Specta.framework/Specta Reason: image not found
最终,我尝试创建复制文件阶段,并包含我的框架和dSYM,创建组,然后将所有这些移动到Xcode 7.2中的Frameworks组中。我的链接问题完全消失了。

1

您需要在示例项目的“Build Phase”中添加运行脚本,例如:

在应用程序目标的“Build Phases”设置选项卡上,单击“+”图标并选择“New Run Script Phase”。创建一个包含以下内容的运行脚本:

 /usr/local/bin/carthage copy-frameworks

然后在“输入文件”中添加您想要使用的框架的路径,例如:

 $(SRCROOT)/Carthage/Build/iOS/Box.framework
 $(SRCROOT)/Carthage/Build/iOS/Result.framework
 $(SRCROOT)/Carthage/Build/iOS/ReactiveCocoa.framework

1
你应该在引用中添加链接参考。 - Tomasz Bąk

0

你遇到的错误指出在运行时找不到框架二进制文件。Abner Zhong 的回答在大多数情况下都有效,但有时你需要更加努力(对我来说是单元测试目标)。为了使其正常工作,Carthage README 建议:

在极少数情况下,您可能还想将每个依赖项复制到构建产品中(例如,在外部框架中嵌入依赖项,或确保依赖项存在于测试包中)。要执行此操作,请创建一个新的“复制文件”构建阶段,其中“Frameworks”为目标,然后在那里添加框架引用。

您可以在此处执行此操作: Xcode target settings


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