项目移动到另一个位置后,框架的链接路径已经改变。

6
请看这张图片: enter image description here 这是我的项目结构:
1个app(顶部) 3个框架(我自己创建的) 1个Cocoa Pods静态库(底部)
当我按下cmd+b时,所有子项目都会从底部到顶部开始构建,没有问题,一切都很好。
为了引用/链接框架,我将框架产品拖到每个子项目的/Build Phases /Link Binary With Libraries和/Build Phases/Copy Files中。
问题是:
当我复制/移动项目文件夹到另一个位置(例如~/oldFolder/app到~/newFolder/app),子项目无法找到框架,报告Not Found错误,我需要重新构建并拖动框架产品进行链接以修复错误。
这太愚蠢了,而且难以与其他人合作,有人能帮忙吗?
附:错误截图: enter image description here

你需要进入构建设置(Build Settings)并为你的库指定相对路径,而不是绝对路径。 - l'L'l
点击“构建设置”,查看当前为您的框架设置的路径。 - l'L'l
抱歉,什么是相对路径?(该框架已构建/安装到默认路径) - Raymond Liao
3个回答

3
如果您想引用相对于源代码目录的路径,则可以使用$(SRCROOT)。$(SRCROOT)将指向您的项目文件所在的位置。苹果文档 举个例子:
如果在MyApp文件夹中有一个名为x的目录,其中包含您的项目文件,则可以将该目录称为$(SRCROOT)/x。在构建设置的框架路径部分输入此内容,以引用您的库。

框架的构建路径是由XCode默认设置的,因此路径不是自定义路径。您可以看到:每个配置的构建产品路径=> $(BUILD_DIR)/ $(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) - Raymond Liao
嗨,你只需要进入你的框架所在文件夹,将框架移动或复制到你项目下的源文件夹中,然后进入构建设置并更改路径为:$(SRCROOT)/"yourframeworkfoldername"。 - MedAmine.Rihane
抱歉回复晚了,我接受你对我的问题的答案,因为你给了我一个方向。谢谢你的帮助。 - Raymond Liao
谢谢 :) 很高兴能帮忙 - MedAmine.Rihane

1
这实际上意味着您无法更改已导入的框架的位置,对吧?以 FBSDKCoreKit.framework 为例。如果我要更改文件夹位置,我需要更改相对路径。点击名称旁边的文件夹图标,选择新位置即可。

enter image description here


这并不是代码本身的问题。应该是构建设置方面的问题。我需要知道如何在构建设置中设置动态引用框架的路径。顺便问一下,你的示例看起来好像是使用和我的相同的项目结构?你能分享给我一份示例吗?谢谢。 - Raymond Liao
@Raniys 你试过我建议的方法吗?不过另一个解决方法是完全从Xcode中移除框架,然后再拖放它,并激活"如果需要则复制项目"和"添加到目标"选项。这不是一个模板吧?除非你用“模板”指的是别的东西。这是我的一个应用程序,只是使用了FBSDKCore和LoginKit。 - tech4242
是的,你所说的“拖放”方法就是我所做的,但我认为这并不好。因此,我想找另一种解决方案来设置构建设置页面中的动态路径。确切地说,我需要在办公室和家里的不同计算机上编写项目,所以“拖放”方法让我感到难过。 - Raymond Liao

0

我在此发布如何解决此问题的详细信息:

  • 在框架中:
    1. 在构建设置页面中的“每个配置的构建产品路径”项目中设置“$(SRCROOT)/../build”;
    2. 按shift+cmd+k清除框架构建,然后按cmd+b重新构建框架;
  • 在我的应用程序中:
    1. 在构建设置页面的“框架搜索路径”项目中添加“$(SRCROOT)/../build”;
    2. 将框架从框架项目的产品中拖到“链接二进制文件与库”中的构建阶段页面中;
    3. 将框架从框架项目的产品中拖到“复制文件”中的构建阶段页面中(您可以通过单击构建阶段页面左上角来添加“复制文件”项);

请注意,如果您在同一项目中使用了一个以上的框架,并且该框架也链接到另一个框架(就像我在问题中发送的示例一样),则还需要执行我发布的所有步骤(框架和应用程序的步骤)。


如果您的项目中也使用了Cocoapods,那么您将会遇到另一个问题,就像我的示例一样:在完成上述所有步骤后,XCode将在您的框架项目中响应错误,如下所示:

ld: framework not found Pods_xxx.framework

clang: error: linker command failed with exit code 1 (use -v to see invocation)

"xxx"应该是您的框架项目名称。要解决这个问题,您只需要在项目/常规/链接的框架和库中删除Pods_xxx.framework。在重新构建项目后,错误将消失。在这里您可以找到此问题的详细信息。

p.s.:在安装pod后,Pods_xxx.framework将出现在常规/链接的框架和库中,因此如果运行“pod install”命令,则需要再次删除它


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