gpt4 book ai didi

ios - 针对不同构建配置的框架的 Xcode 项目文件引用路径

转载 作者:行者123 更新时间:2023-11-28 19:00:54 26 4
gpt4 key购买 nike

当我尝试为不同的配置构建时,我的工作区中的“Link Binary with Libraries”和“Copy Files”路径出现问题 - “Debug”和“Release”这些路径存储在 pbxproj 文件中xcodeproj 包并且不随构建配置而变化。

我有一个工作区 Application.xcworkspace,它构建了两个框架和一个使用这些框架的可执行文件。我的派生数据位置设置为“相对于工作空间”它们的大致布局如下:

Framework_1 - Built and output to the Derived Data path.

Framework_2 - Depends on Framework_1, which is included in the Frameworks area of the project and specified in the "Link Binary with Libraries" Build Phase, and output to Derived Data path.

Application - Depends on Framework_1 and Framework_2, which are included in the Frameworks area of the project and specified in the "Link Binary with Libraries" Build Phase. Output directory is again the Derived Data path.

引用框架的项目文件中的路径是派生数据路径——它们就像

Workspace Path/DerivedData/Workspace Name/Build/Products/Debug/Framework_1.framework  

无论我构建什么 - 运行(调试)、测试(调试)或分析(发布),该路径都是相同的。

我的问题是当我为分析(发布)构建时,框架的路径仍然是调试路径,因此应用程序的发布版本链接到调试框架并且调试框架被捆绑到应用程序->内容->Frameworks(通过复制文件构建阶段)。更糟糕的是,如果我执行清理或删除派生数据目录,并尝试构建分析(发布),它不会构建或运行,因为引用的文件(调试)不存在。

我知道使这项工作成功的一种方法是拥有两个工作区 - 一个用于调试,另一个用于发布。那将是一个很大的麻烦。

另一种方法是设置另一个目标吗?

解决这个问题的正确方法是什么?任何帮助表示赞赏。

最佳答案

我想我想出了一个相当干净的方法来解决这个问题。

我的第一个目标是两个目标 - 一个设置为链接和复制调试框架,另一个用于对发布框架执行相同的操作。非常糟糕,第二个目标的输出有不同的名称,每个目标仍然有原来的问题。但是,我可以通过框架的单独配置构建获得相同的应用程序功能(调试与调试,发布与发布)。

然后我退后一步思考这个问题,并意识到我只需要一个目录来存放框架的链接和复制文件版本,但我需要根据配置以不同方式填充它。这让我想到了脚本,并且成功了。我最终添加了一个预操作运行脚本构建阶段来清除框架的所有旧副本并复制到正确的副本中。这是名为 Simple.framework 的框架的脚本,其中 DerivedData 位置是相对于工作空间的:

rm -R "${SRCROOT}/../Frameworks/Simple.framework"  
cp -R "${SRCROOT}/../DerivedData/TestTarget/Build/Products/${CONFIGURATION}/Simple.framework" "${SRCROOT}/../Frameworks/Simple.framework"

因此,对于我上面概述的项目,我会为应用程序构建阶段中的每个框架放置一个类似的阶段。

关于ios - 针对不同构建配置的框架的 Xcode 项目文件引用路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25918883/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com