一种方法,有点骇人听闻,是将Run Script添加到每个 App 的Build Phase中,作为第一项,并将 Config.h 复制到某个已知位置 - /tmp/Config.h,您包含的库将看起来在那里。由于文件在每次构建时都被复制,所以它总是正确的。
EDIT1:所以不漂亮,但您可以在库中的依赖项下添加一个运行构建脚本。只需添加一个并保留复选框设置以显示环境变量。你可以看到这一组:
FILE_LIST=/Volumes/Data/Users/dhoerl/Library/Developer/Xcode/DerivedData/MyProject-fdzaatzqtmrnzubseakedvxmsgul/Build/Intermediates/MyStaticLibrary.build/Debug-iphoneos/MyStaticLibrary.build/Objects/LinkFileList
您可以看到其中几个以当前项目文件夹为前缀:
/Volumes/Data/Users/dhoerl/Library/Developer/Xcode/DerivedData/MyProject-
您可以在那里编写一些脚本来获取前缀,然后附加本地 Config.h 文件路径,现在您有了 Config.h 标头的完全限定路径,然后您可以将其复制到库中的已知位置。我将在 xcode 论坛上发帖,因为可能有更好的解决方案 - 曾经在 Xcode 3 中。如果我得到任何实质性的回复,我会更新这个。
EDIT2:试试这个:1)点击库,点击构建阶段,通过点击右下角的“+”按钮添加一个运行脚本构建阶段
2)将其拖动到列表中的第二项(在目标依赖项下方)
3) 将外壳更改为“/bin/ksh”
4)在编辑它以获得正确的文件/路径后,将其粘贴:
# Get the Project Name (assumes upper/lower/numbers only in name)
PROJ=$(echo $BUILD_DIR | sed -En -e 's/(\/.*\/)([A-Za-z0-9]+)-([a-z]+\/Build\/Products)/\2/p')
# Use this variable to construct a full path
FULL_PATH="/Volumes/Data/Users/dhoerl/Downloads/nightmare/"$PROJ"/"$PROJ"/HelloWorldLayer.h"
echo FULL_PATH equals $FULL_PATH
# Make Sure MyStaticLibrary is correct
echo PROJ_DIR equals "$PROJECT_DIR/MyStaticLibrary"
cp -f "$FULL_PATH" "$PROJECT_DIR/MyStaticLibrary"
5)这假设您将库放在您想要的任何位置,但每个 App 项目必须具有相同的父文件夹(没有太大限制 - 我过去所做的)。
PS:当我做这种事情时,我通常不包含应用程序的实际文件,而是为一个没有在库中实例化的类创建一个头文件。让我们称之为Foo。所以在你的库中,你有 Foo.h,它有很多返回信息的方法——小部件的数量、一些特殊文件夹的位置、plist、数组、字典等等。这个想法是库知道如何通过这个接口获得它需要的任何东西(类单例,或者只是一个具有类方法的类。YMMV。
PSS:其他人读到这个,创建演示项目是值得的。