项目移动到另一个地方后,框架的 link 路径发生了变化
The frameworks' link path has changed after the project moved to another place
请看图:
这是我的项目结构:
- 1 个应用(前一个)
- 3个框架(自己创建)
- 1 cocoa pods 静态库(下一个)
当我cmd+b的时候,所有的子项目都会从最底层开始构建到最上面,这里没有问题,一切都很好。
- 为了 refer/link 框架,我将框架产品放到每个子项目的 /Build Phases/Link Binary With Libraries 和 /Build Phases/Copy Files.
问题是:
- 当我copy/move项目文件夹到另一个地方时(比如~/oldFolder/app到~/newFolder/app)子项目找不到框架,它报告未找到错误,我需要重新构建并将框架产品拖放到 link 以修复错误。
和别人合作太笨太难了,谁能帮忙?
p.s.: 对不起我的英语不好
添加错误图片:
如果要引用相对于源目录的路径,可以使用 $(SRCROOT)。 $(SRCROOT) 将指向您的项目文件所在的位置。 apple doc
一个例子:
如果您的 MyApp 文件夹中有一个包含您的项目文件的目录 x,则该文件夹 x 可以被引用为 $(SRCROOT)/x。在构建设置的框架路径部分输入此内容以引用您的库。
这一切都归结为您无法更改已导入框架的位置,对吗?这是 FBSDKCoreKit.framework 的示例。如果我要更改文件夹位置,则需要更改相对路径。单击名称旁边的文件夹图标并选择新位置
我 post 我这边如何解决这个问题的详细信息:
- 在框架中:
- 在构建设置页面的“每配置构建产品路径”项中设置“$(SRCROOT)/../build”;
- shift+cmd+k清理框架构建,然后cmd+b重建框架;
- 在我的应用程序中
- 在构建设置页面的“框架搜索路径”项中添加“$(SRCROOT)/../build”;
- 将框架从框架项目的产品拖到构建阶段页面中的“Link Binary With Libraries”;
- 将Framework从Framework项目的产品中拖到Build Phases页面的“Copy Files”(你可以添加“Copy Files”项
单击构建阶段页面的左上角);
请注意,如果您在同一个项目中使用了多个框架,并且该框架还链接到另一个框架,就像我在问题中发送的示例一样,您还需要执行上述所有步骤 posted(Framework和App的步骤).
如果你像我的示例一样在你的项目中也使用 cocoapods,你会遇到另一个问题:完成上述所有步骤后,XCode 将在你的框架项目中响应错误,如:
ld: framework not found Pods_xxx.framework
clang: error: linker command failed with exit code 1 (use -v to see invocation)
“xxx”应该是您的框架项目名称。要修复它,您只需删除 project/General/Linked 框架和库 中的 Pods_xxx.framework。重建项目后错误将消失。 你可以找到这个问题的详细信息。
p.s.: the Pods_xxx.framework will appear in General/Linked Frameworks and Libraries after you install pod, so you need remove it again if you run command "pod install"
请看图:
这是我的项目结构:
- 1 个应用(前一个)
- 3个框架(自己创建)
- 1 cocoa pods 静态库(下一个)
当我cmd+b的时候,所有的子项目都会从最底层开始构建到最上面,这里没有问题,一切都很好。
- 为了 refer/link 框架,我将框架产品放到每个子项目的 /Build Phases/Link Binary With Libraries 和 /Build Phases/Copy Files.
问题是:
- 当我copy/move项目文件夹到另一个地方时(比如~/oldFolder/app到~/newFolder/app)子项目找不到框架,它报告未找到错误,我需要重新构建并将框架产品拖放到 link 以修复错误。
和别人合作太笨太难了,谁能帮忙?
p.s.: 对不起我的英语不好
添加错误图片:
如果要引用相对于源目录的路径,可以使用 $(SRCROOT)。 $(SRCROOT) 将指向您的项目文件所在的位置。 apple doc
一个例子:
如果您的 MyApp 文件夹中有一个包含您的项目文件的目录 x,则该文件夹 x 可以被引用为 $(SRCROOT)/x。在构建设置的框架路径部分输入此内容以引用您的库。
这一切都归结为您无法更改已导入框架的位置,对吗?这是 FBSDKCoreKit.framework 的示例。如果我要更改文件夹位置,则需要更改相对路径。单击名称旁边的文件夹图标并选择新位置
我 post 我这边如何解决这个问题的详细信息:
- 在框架中:
- 在构建设置页面的“每配置构建产品路径”项中设置“$(SRCROOT)/../build”;
- shift+cmd+k清理框架构建,然后cmd+b重建框架;
- 在我的应用程序中
- 在构建设置页面的“框架搜索路径”项中添加“$(SRCROOT)/../build”;
- 将框架从框架项目的产品拖到构建阶段页面中的“Link Binary With Libraries”;
- 将Framework从Framework项目的产品中拖到Build Phases页面的“Copy Files”(你可以添加“Copy Files”项 单击构建阶段页面的左上角);
请注意,如果您在同一个项目中使用了多个框架,并且该框架还链接到另一个框架,就像我在问题中发送的示例一样,您还需要执行上述所有步骤 posted(Framework和App的步骤).
如果你像我的示例一样在你的项目中也使用 cocoapods,你会遇到另一个问题:完成上述所有步骤后,XCode 将在你的框架项目中响应错误,如:
ld: framework not found Pods_xxx.framework
clang: error: linker command failed with exit code 1 (use -v to see invocation)
“xxx”应该是您的框架项目名称。要修复它,您只需删除 project/General/Linked 框架和库 中的 Pods_xxx.framework。重建项目后错误将消失。
p.s.: the Pods_xxx.framework will appear in General/Linked Frameworks and Libraries after you install pod, so you need remove it again if you run command "pod install"